From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp-4.sys.kth.se (smtp-4.sys.kth.se [130.237.48.193]); by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id 233d1b2c; for ; Wed, 11 Mar 2015 21:51:32 -0500 (EST) Received: from smtp-4.sys.kth.se (localhost.localdomain [127.0.0.1]) by smtp-4.sys.kth.se (Postfix) with ESMTP id F2A0DE13 for ; Thu, 12 Mar 2015 03:51:30 +0100 (CET) X-Virus-Scanned: by amavisd-new at kth.se Received: from smtp-4.sys.kth.se ([127.0.0.1]) by smtp-4.sys.kth.se (smtp-4.sys.kth.se [127.0.0.1]) (amavisd-new, port 10024) with LMTP id Rc7s1t11AFx1 for ; Thu, 12 Mar 2015 03:51:28 +0100 (CET) X-KTH-Auth: kristaps [180.42.49.96] X-KTH-mail-from: kristaps@bsd.lv X-KTH-rcpt-to: discuss@mdocml.bsd.lv Received: from skins.local (unknown [180.42.49.96]) by smtp-4.sys.kth.se (Postfix) with ESMTPSA id 4DBBD45A for ; Thu, 12 Mar 2015 03:51:12 +0100 (CET) Message-ID: <5500FF15.2090108@bsd.lv> Date: Thu, 12 Mar 2015 11:51:01 +0900 From: Kristaps Dzonsons User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 X-Mailinglist: mdocml-discuss Reply-To: discuss@mdocml.bsd.lv MIME-Version: 1.0 To: discuss@mdocml.bsd.lv Subject: PATCH: Intra- and inter-document linking. Content-Type: multipart/mixed; boundary="------------000007030802030300030203" This is a multi-part message in MIME format. --------------000007030802030300030203 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Hi folks, This wraps up an examplenimplementation of `Ix' for mdoc(7) by extending `Xr' to handle indices made with `Ix'. In other words, linking to sections in other manpages. Enclosed is the patch. * BACKGROUND `Ix' is a macro proposal that inserts an anchor at an arbitrary location in an mdoc(7) document. There are already two implicit anchors generated with `Sh' and `Ss'; `Ix' allows for the same. As with `Sh' and `Ss', `Ix' anchors can be linked with the `Sx' macro. In effect, this allows doing things like: .Bl -tag -width Ds .It Fl b Ar moo .Ix -b flag This is a flag... ... .El Then later: The .Sx -b flag allows us to... For completeness, I also add an `Lkx' macro that serves to link to sections in the same document by a different name. Thus, The .Lkx "-b flag" "bee flag" allows us to... I actually don't like the `Lkx' and would prefer `Sxx' or something, but bikeshed bikeshed bikeshed. `Ix' is nice because it fits with the existing `Sx' model and can simply be ignored in non-conformant tools like groff(1). Output modes /not/ allowing for linkage, such as -Tascii, can simply discard `Ix' and render the contents of `Sx' as-is. This is the existing behaviour when using `Sx' to link to `Sh' and so on. * INTER-PAGE LINKING The remaining problem is inter-document linkage. This can be easily accomodated by extending `Xr' to accept 1, 2, 3, or 4 arguments: .Xr NAME [SECTION [LINK [LINKNAME]]] So we can have .Xr foo .Xr foo 1 .Xr foo 1 NAME .Xr foo 1 NAME "name section" By default, links to other sections can be formatted as "foo(1) section NAME", but this needs some more consideration because it might not be a section that's linked. * PROBLEMS All of this works beautifully in -Thtml (and can be extended to -Tpdf and friends). The problem is in -Tascii, which as it stands can't support links. (That's beyond the scope of these patches.) While we can get away with `Sx' doing nothing for sections, using `Sx' in console mode to refer to `Ix' tags is confusing because, well, they don't exist. There is, however, a solution. I don't have a patch for this (yet), but am working on it. Essentially, -Tascii knows the exact line and column of its output. When we invoke an `Ix', we remember the output line and column. Then when we use `Sx', we can refer to the line and column of the origin. For example, Hello .Ix world world. ... ... Link to .Sx world . Right now, this produces "Link to world". Why not make it do "Link to world [line 23, column 45]"? This way, we can have arbitrary links in - -Tascii and quickly jump to the locations in the manpager. This doesn't do much for `Xr', unfortunately. Best, Kristaps -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIcBAEBCgAGBQJVAP8VAAoJEMT2SUY9XBES7A8QAIbH4nUAzZwf05As7tKiOW+u YV9kHedKZjgYWPX6MgUwGyl+MRwqdVcT+Xx/LPhJtXsnzBGwd+1CsKsAZFTfi7rr dyB3ZupSf3ZF89X+aRn3MpY8A+7XiKUm/seXZFLtB/u7rMRnEP0TVJF1oWF6V5oW fLAQvuq7Aw5HkPj1nscUSQO6pQx/xpYozgZ5R8E3aBSN7DRFj/6U6784C7AlIia8 IKrnvp4WJVYulDgwADxQE0SgxOfeIT+aDDIqGCy3gqfIeH1xsgiXHsB+IJQkgsLT lxnw3blrPnDoEcYaUu0/u+i57z+Q+REbPYgkNENp7lZaHqopovY/lX2nZCmacyOE yMONC9E7vLvnPVikyNfz2V6FXG3hb76m1HBxtPCcTZnn25uzbUI3Ha+N8pyMEL77 6tV+H7G8/ffkoS9UBXODyXETGqjCLG09L24k+iiIKuamEfaQcyHY46p8Nyo+TpH9 LES3RsquRUIdz96yK4kbLH964x8juU6fdCkZ8cR5iPYb+SdUz6RkmBAChlFHYPjB 3W/sEr+aw3AOsghaNwUznSCeNx9Ag492U0nIwPOeeUaWG9k68/Jd7mbcuy8avPLP 7F1O9j+g7mugmhHCcaIkPlsfbgwhtWmbmbPVGAqDgalzccxPA/0UyOsZ3/lGRy/t hgOknxeuWPvk7B4vlC14 =cGAE -----END PGP SIGNATURE----- --------------000007030802030300030203 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="index.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="index.patch" PyAuRFNfU3RvcmUKPyBNYWtlZmlsZS5sb2NhbAo/IGNnaS5oCj8gY29uZmlnLmgKPyBjb25m aWcubG9nCj8gY29uZmlndXJlLmxvY2FsCj8gZm9vLjcKPyBmb28uNy5odG1sCj8gZm9vLmh0 bWwKPyBpbmRleC5wYXRjaAo/IGxpbmtpbmcucGF0Y2gKPyBtYWNoaW5lLmRpZmYKPyB0Ymwu cGF0Y2gKPyB0YmwyLnBhdGNoCkluZGV4OiBodG1sLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2hvbWUvY3ZzL21kb2NtbC9tZG9jbWwvaHRtbC5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjE4NQpkaWZmIC11IC1wIC1yMS4xODUgaHRtbC5jCi0tLSBodG1sLmMJMjEgSmFuIDIw MTUgMjA6MzM6MjUgLTAwMDAJMS4xODUKKysrIGh0bWwuYwkxMiBNYXIgMjAxNSAwMjo0OTow NyAtMDAwMApAQCAtNzA3LDcgKzcwNyw4IEBAIGJ1ZmZtdF9pbmNsdWRlcyhzdHJ1Y3QgaHRt bCAqaCwgY29uc3QgY2gKIH0KIAogdm9pZAotYnVmZm10X21hbihzdHJ1Y3QgaHRtbCAqaCwg Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2VjKQorYnVmZm10X21hbihzdHJ1Y3Qg aHRtbCAqaCwgY29uc3QgY2hhciAqbmFtZSwgCisJY29uc3QgY2hhciAqc2VjLCBjb25zdCBj aGFyICppbmRleCkKIHsKIAljb25zdCBjaGFyCSpwLCAqcHA7CiAKQEAgLTczMSw2ICs3MzIs MTAgQEAgYnVmZm10X21hbihzdHJ1Y3QgaHRtbCAqaCwgY29uc3QgY2hhciAqbgogCX0KIAlp ZiAocHApCiAJCWJ1ZmNhdChoLCBwcCk7CisJaWYgKE5VTEwgIT0gaW5kZXgpIHsKKwkJYnVm Y2F0KGgsICIjaW5kZXgtIik7CisJCWJ1ZmNhdF9pZChoLCBpbmRleCk7CisJfQogfQogCiB2 b2lkCkBAIC03NTIsNyArNzU3LDEyIEBAIGJ1ZmNhdF9pZChzdHJ1Y3QgaHRtbCAqaCwgY29u c3QgY2hhciAqc3IKIHsKIAogCS8qIENmLiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv dHlwZXMuaHRtbCNoLTYuMj4uICovCi0KLQl3aGlsZSAoJ1wwJyAhPSAqc3JjKQotCQlidWZj YXRfZm10KGgsICIlLjJ4IiwgKnNyYysrKTsKKwlmb3IgKCA7ICdcMCcgIT0gKnNyYzsgc3Jj KyspIHsKKwkJaWYgKGlzYWxudW0oKHVuc2lnbmVkIGludCkqc3JjKSkKKwkJCWJ1Zm5jYXQo aCwgc3JjLCAxKTsKKwkJZWxzZSBpZiAoJyAnID09ICpzcmMpCisJCQlidWZuY2F0KGgsICJf IiwgMSk7CisJCWVsc2UKKwkJCWJ1ZmNhdF9mbXQoaCwgIiUuMngiLCAqc3JjKTsKKwl9CiB9 CkluZGV4OiBodG1sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvY3ZzL21kb2Nt bC9tZG9jbWwvaHRtbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcwCmRpZmYgLXUgLXAg LXIxLjcwIGh0bWwuaAotLS0gaHRtbC5oCTIgRGVjIDIwMTQgMTA6MDg6MDYgLTAwMDAJMS43 MAorKysgaHRtbC5oCTEyIE1hciAyMDE1IDAyOjQ5OjA4IC0wMDAwCkBAIC0xNzEsNyArMTcx LDcgQEAgdm9pZAkJICBidWZjYXRfc3R5bGUoc3RydWN0IGh0bWwgKiwKIHZvaWQJCSAgYnVm Y2F0X3N1KHN0cnVjdCBodG1sICosIGNvbnN0IGNoYXIgKiwKIAkJCWNvbnN0IHN0cnVjdCBy b2Zmc3UgKik7CiB2b2lkCQkgIGJ1ZmluaXQoc3RydWN0IGh0bWwgKik7Ci12b2lkCQkgIGJ1 ZmZtdF9tYW4oc3RydWN0IGh0bWwgKiwKK3ZvaWQJCSAgYnVmZm10X21hbihzdHJ1Y3QgaHRt bCAqLCBjb25zdCBjaGFyICosIAogCQkJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwog dm9pZAkJICBidWZmbXRfaW5jbHVkZXMoc3RydWN0IGh0bWwgKiwgY29uc3QgY2hhciAqKTsK IApJbmRleDogbWRvYy43Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2N2cy9tZG9j bWwvbWRvY21sL21kb2MuNyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNTIKZGlmZiAtdSAt cCAtcjEuMjUyIG1kb2MuNwotLS0gbWRvYy43CTIzIEZlYiAyMDE1IDEzOjMxOjA0IC0wMDAw CTEuMjUyCisrKyBtZG9jLjcJMTIgTWFyIDIwMTUgMDI6NDk6MDggLTAwMDAKQEAgLTQ0MCw2 ICs0NDAsOCBAQCBpbiB0aGUgYWxwaGFiZXRpY2FsCiAuRWwKIC5TcyBTZWN0aW9ucyBhbmQg Y3Jvc3MgcmVmZXJlbmNlcwogLkJsIC1jb2x1bW4gIkJycSwgQnJvLCBCcmMiIGRlc2NyaXB0 aW9uCisuSXQgU3ggXCZJeCBUYSBpbmRleCBhbmNob3IgKG9uZSBsaW5lKQorLkl0IFN4IFwm TGt4IFRhIGludGVybmFsIGNyb3NzIHJlZmVyZW5jZSB0byBhbiBpbmRleAogLkl0IFN4IFwm U2ggVGEgc2VjdGlvbiBoZWFkZXIgKG9uZSBsaW5lKQogLkl0IFN4IFwmU3MgVGEgc3Vic2Vj dGlvbiBoZWFkZXIgKG9uZSBsaW5lKQogLkl0IFN4IFwmU3ggVGEgaW50ZXJuYWwgY3Jvc3Mg cmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBvciBzdWJzZWN0aW9uCkBAIC01MTAsNiArNTEyLDcg QEAgaW4gdGhlIGFscGhhYmV0aWNhbAogLkJsIC1jb2x1bW4gIkJycSwgQnJvLCBCcmMiIGRl c2NyaXB0aW9uCiAuSXQgU3ggXCZBbiBUYSBhdXRob3IgbmFtZSAoPjAgYXJndW1lbnRzKQog Lkl0IFN4IFwmTGsgVGEgaHlwZXJsaW5rOiBBciB1cmkgT3AgQXIgbmFtZQorLkl0IFN4IFwm TGt4IFRhIGluZGV4OiBBciBpbmRleCBPcCBBciBuYW1lCiAuSXQgU3ggXCZNdCBUYSBEbyBt YWlsdG8gRGMgaHlwZXJsaW5rOiBBciBhZGRyZXNzCiAuSXQgU3ggXCZDZCBUYSBrZXJuZWwg Y29uZmlndXJhdGlvbiBkZWNsYXJhdGlvbiAoPjAgYXJndW1lbnRzKQogLkl0IFN4IFwmQWQg VGEgbWVtb3J5IGFkZHJlc3MgKD4wIGFyZ3VtZW50cykKQEAgLTE4NTQsNiArMTg1NywxOCBA QCB3aWxsIHByZXNlcnZlIHRoZSBzZW1pY29sb24gd2hpdGVzcGFjZSBlCiAuUHAKIFNlZSBh bHNvCiAuU3ggXCZCbCAuCisuU3MgXCZJeAorU3BlY2lmeSBhbiBpbmRleCBwb2ludCB3aXRo IGFuIGFyYml0cmFyeSBuYW1lLgorVGhlIGFyZ3VtZW50IGlzIG5vdCBwcmludGVkLgorSXRz IHN5bnRheCBpcyBhcyBmb2xsb3dzOgorLlBwCisuRGwgUGYgXC4gSXggQXIgaW5kZXgKKy5Q cAorQW4gaW5kZXggaXMgYW4gYW5jaG9yIHdpdGhpbiBhIGRvY3VtZW50LgorSXQgY2FuIGJl IGFjY2Vzc2VkIHdpdGgKKy5TeCBcJkxreAorYW5kCisuU3ggXCZTeCAuCiAuU3MgXCZMYgog U3BlY2lmeSBhIGxpYnJhcnkuCiBUaGUgc3ludGF4IGlzIGFzIGZvbGxvd3M6CkBAIC0xOTA1 LDYgKzE5MjAsMjUgQEAgRXhhbXBsZXM6CiAuUHAKIFNlZSBhbHNvCiAuU3ggXCZNdCAuCisu U3MgXCZMa3gKK0Zvcm1hdHMgYW4gaW5kZXggbGluay4KK0lmIGludm9rZWQgd2l0aG91dCBh cmd1bWVudHMsIGlzIHRoZSBzYW1lIGFzCisuU3ggXCZTeCAuCitJdHMgc3ludGF4IGlzIGFz IGZvbGxvd3M6CisuUHAKKy5EbCBQZiBcLiBTeCBcJkxreCBBciBpbmRleCBPcCBBciBuYW1l CisuUHAKK0V4YW1wbGVzOgorLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50CitcJi5JeCBm b29iYXIKK1NvbWUgdGV4dCBoZXJlLgorXCYuTGt4IGZvb2JhciBcKGRxR28gdG8gdGhlIGFi b3ZlIGxpbmtcKGRxCisuRWQKKy5QcAorU2VlIGFsc28KKy5TeCBcJkl4CithbmQKKy5TeCBc JlN4IC4KIC5TcyBcJkxwCiBTeW5vbnltIGZvcgogLlN4IFwmUHAgLgpAQCAtMjcwNSwxOCAr MjczOSwzMSBAQCBMaW5rIHRvIGFub3RoZXIgbWFudWFsCiAuUHEgUXEgY3Jvc3MtcmVmZXJl bmNlIC4KIEl0cyBzeW50YXggaXMgYXMgZm9sbG93czoKIC5QcAotLkQxIFBmIFwuIFN4IFwm WHIgQXIgbmFtZSBPcCBzZWN0aW9uCisuRDEgUGYgXC4gU3ggXCZYciBBciBuYW1lIE9wIHNl Y3Rpb24gT3AgaW5kZXggT3AgaW5kZXhfbmFtZQogLlBwCiBDcm9zcyByZWZlcmVuY2UgdGhl CiAuQXIgbmFtZQogYW5kCiAuQXIgc2VjdGlvbgotbnVtYmVyIG9mIGFub3RoZXIgbWFuIHBh Z2U7Ci1vbWl0dGluZyB0aGUgc2VjdGlvbiBudW1iZXIgaXMgcmFyZWx5IHVzZWZ1bC4KK251 bWJlciBvZiBhbm90aGVyIG1hbiBwYWdlLgorLlBxIE9taXR0aW5nIHRoZSBzZWN0aW9uIG51 bWJlciBpcyByYXJlbHkgdXNlZnVsLgorSWYKKy5BciBpbmRleAoraXMgc3BlY2lmaWVkLCB0 aGUgbGluayBpcyB0byBhIHBvc2l0aW9uIHNwZWNpZmllZCB3aXRoCisuU3MgXCZJeCAsCisu U3MgXCZTaCAsCitvcgorLlNzIFwmU3MgLgorSWYKKy5BciBpbmRleF9uYW1lCitpcyB1c2Vk IGFzIHdlbGwsIGl0IGlzIHByaW50ZWQgaW5zdGVhZCBvZgorLkFyIGluZGV4ICwKK3doaWNo IGlzIHVzZWQgcHVyZWx5IGFzIHRoZSBpbmRleCBsb2NhdGlvbi4KIC5QcAogRXhhbXBsZXM6 CiAuRGwgXCYuWHIgbWFuZG9jIDEKIC5EbCBcJi5YciBtYW5kb2MgMSBcJjsKKy5EbCBcJi5Y ciBtYW5kb2MgMSAiU0VFIEFMU08iCiAuRGwgXCYuWHIgbWFuZG9jIDEgXCZOcyBzIGJlaGF2 aW91cgogLlNzIFwmYnIKIEVtaXRzIGEgbGluZS1icmVhay4KSW5kZXg6IG1kb2MuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMvbWRvY21sL21kb2NtbC9tZG9jLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjM4CmRpZmYgLXUgLXAgLXIxLjIzOCBtZG9jLmMKLS0t IG1kb2MuYwkxMiBGZWIgMjAxNSAxMzowMDo1MiAtMDAwMAkxLjIzOAorKysgbWRvYy5jCTEy IE1hciAyMDE1IDAyOjQ5OjA5IC0wMDAwCkBAIC02MSwxMCArNjEsMTIgQEAgY29uc3QJY2hh ciAqY29uc3QgX19tZG9jX21hY3JvbmFtZXNbTURPQwogCSJGbyIsCQkiRmMiLAkJIk9vIiwJ CSJPYyIsCiAJIkJrIiwJCSJFayIsCQkiQnQiLAkJIkhmIiwKIAkiRnIiLAkJIlVkIiwJCSJM YiIsCQkiTHAiLAotCSJMayIsCQkiTXQiLAkJIkJycSIsCQkiQnJvIiwKKwkiTGsiLAkJIkxr eCIsCQkKKwkiTXQiLAkJIkJycSIsCQkiQnJvIiwKIAkiQnJjIiwJCSIlQyIsCQkiRXMiLAkJ IkVuIiwKIAkiRHgiLAkJIiVRIiwJCSJiciIsCQkic3AiLAotCSIlVSIsCQkiVGEiLAkJImxs IiwJCSJ0ZXh0IiwKKwkiJVUiLAkJIlRhIiwJCSJsbCIsCQkiSXgiLAorCSJ0ZXh0IiwKIAl9 OwogCiBjb25zdAljaGFyICpjb25zdCBfX21kb2NfYXJnbmFtZXNbTURPQ19BUkdfTUFYXSA9 IHsKSW5kZXg6IG1kb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMvbWRv Y21sL21kb2NtbC9tZG9jLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM2CmRpZmYgLXUg LXAgLXIxLjEzNiBtZG9jLmgKLS0tIG1kb2MuaAkxMiBGZWIgMjAxNSAxMjoyNDozMyAtMDAw MAkxLjEzNgorKysgbWRvYy5oCTEyIE1hciAyMDE1IDAyOjQ5OjA5IC0wMDAwCkBAIC0xMjYs NiArMTI2LDcgQEAgZW51bQltZG9jdCB7CiAJTURPQ19MYiwKIAlNRE9DX0xwLAogCU1ET0Nf TGssCisJTURPQ19Ma3gsCiAJTURPQ19NdCwKIAlNRE9DX0JycSwKIAlNRE9DX0JybywKQEAg LTE0MCw2ICsxNDEsNyBAQCBlbnVtCW1kb2N0IHsKIAlNRE9DX19VLAogCU1ET0NfVGEsCiAJ TURPQ19sbCwKKwlNRE9DX0l4LAogCU1ET0NfTUFYCiB9OwogCkluZGV4OiBtZG9jX2h0bWwu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9jdnMvbWRvY21sL21kb2NtbC9tZG9j X2h0bWwuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMjYKZGlmZiAtdSAtcCAtcjEuMjI2 IG1kb2NfaHRtbC5jCi0tLSBtZG9jX2h0bWwuYwkzIE1hciAyMDE1IDIxOjExOjM0IC0wMDAw CTEuMjI2CisrKyBtZG9jX2h0bWwuYwkxMiBNYXIgMjAxNSAwMjo0OToxMCAtMDAwMApAQCAt OTIsNiArOTIsNyBAQCBzdGF0aWMJaW50CQkgIG1kb2NfaWNfcHJlKE1ET0NfQVJHUyk7CiBz dGF0aWMJaW50CQkgIG1kb2NfaWduZGVsaW1fcHJlKE1ET0NfQVJHUyk7CiBzdGF0aWMJaW50 CQkgIG1kb2NfaW5fcHJlKE1ET0NfQVJHUyk7CiBzdGF0aWMJaW50CQkgIG1kb2NfaXRfcHJl KE1ET0NfQVJHUyk7CitzdGF0aWMJaW50CQkgIG1kb2NfaXhfcHJlKE1ET0NfQVJHUyk7CiBz dGF0aWMJaW50CQkgIG1kb2NfbGJfcHJlKE1ET0NfQVJHUyk7CiBzdGF0aWMJaW50CQkgIG1k b2NfbGlfcHJlKE1ET0NfQVJHUyk7CiBzdGF0aWMJaW50CQkgIG1kb2NfbGtfcHJlKE1ET0Nf QVJHUyk7CkBAIC0yMzEsNiArMjMyLDcgQEAgc3RhdGljCWNvbnN0IHN0cnVjdCBodG1sbWRv YyBtZG9jc1tNRE9DXwogCXttZG9jX2xiX3ByZSwgTlVMTH0sIC8qIExiICovCiAJe21kb2Nf cHBfcHJlLCBOVUxMfSwgLyogTHAgKi8KIAl7bWRvY19sa19wcmUsIE5VTEx9LCAvKiBMayAq LworCXttZG9jX2xrX3ByZSwgTlVMTH0sIC8qIExreCAqLwogCXttZG9jX210X3ByZSwgTlVM TH0sIC8qIE10ICovCiAJe21kb2NfcXVvdGVfcHJlLCBtZG9jX3F1b3RlX3Bvc3R9LCAvKiBC cnEgKi8KIAl7bWRvY19xdW90ZV9wcmUsIG1kb2NfcXVvdGVfcG9zdH0sIC8qIEJybyAqLwpA QCAtMjQ1LDYgKzI0Nyw3IEBAIHN0YXRpYwljb25zdCBzdHJ1Y3QgaHRtbG1kb2MgbWRvY3Nb TURPQ18KIAl7bWRvY19feF9wcmUsIG1kb2NfX3hfcG9zdH0sIC8qICVVICovCiAJe05VTEws IE5VTEx9LCAvKiBUYSAqLwogCXttZG9jX3NraXBfcHJlLCBOVUxMfSwgLyogbGwgKi8KKwl7 bWRvY19peF9wcmUsIE5VTEx9LCAvKiBJeCAqLwogfTsKIAogc3RhdGljCWNvbnN0IGNoYXIg KiBjb25zdCBsaXN0c1tMSVNUX01BWF0gPSB7CkBAIC01MzgsNiArNTQxLDI1IEBAIG1kb2Nf cm9vdF9wcmUoTURPQ19BUkdTKQogfQogCiBzdGF0aWMgaW50CittZG9jX2l4X3ByZShNRE9D X0FSR1MpCit7CisJc3RydWN0IGh0bWxwYWlyCSB0YWc7CisKKwlidWZpbml0KGgpOworCWJ1 ZmNhdChoLCAiaW5kZXgtIik7CisKKwlmb3IgKG4gPSBuLT5jaGlsZDsgbiAmJiBNRE9DX1RF WFQgPT0gbi0+dHlwZTsgKSB7CisJCWJ1ZmNhdF9pZChoLCBuLT5zdHJpbmcpOworCQlpZiAo TlVMTCAhPSAobiA9IG4tPm5leHQpKQorCQkJYnVmY2F0X2lkKGgsICIgIik7CisJfQorCisJ UEFJUl9JRF9JTklUKCZ0YWcsIGgtPmJ1Zik7CisJcHJpbnRfb3RhZyhoLCBUQUdfQSwgMSwg JnRhZyk7CisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50CiBtZG9jX3NoX3ByZShNRE9D X0FSR1MpCiB7CiAJc3RydWN0IGh0bWxwYWlyCSB0YWc7CkBAIC01NTYsNyArNTc4LDcgQEAg bWRvY19zaF9wcmUoTURPQ19BUkdTKQogCX0KIAogCWJ1ZmluaXQoaCk7Ci0JYnVmY2F0KGgs ICJ4Iik7CisJYnVmY2F0KGgsICJpbmRleC0iKTsKIAogCWZvciAobiA9IG4tPmNoaWxkOyBu ICYmIE1ET0NfVEVYVCA9PSBuLT50eXBlOyApIHsKIAkJYnVmY2F0X2lkKGgsIG4tPnN0cmlu Zyk7CkBAIC01ODYsNyArNjA4LDcgQEAgbWRvY19zc19wcmUoTURPQ19BUkdTKQogCQlyZXR1 cm4oMSk7CiAKIAlidWZpbml0KGgpOwotCWJ1ZmNhdChoLCAieCIpOworCWJ1ZmNhdChoLCAi aW5kZXgtIik7CiAKIAlmb3IgKG4gPSBuLT5jaGlsZDsgbiAmJiBNRE9DX1RFWFQgPT0gbi0+ dHlwZTsgKSB7CiAJCWJ1ZmNhdF9pZChoLCBuLT5zdHJpbmcpOwpAQCAtNjk2LDMzICs3MTgs NTYgQEAgc3RhdGljIGludAogbWRvY194cl9wcmUoTURPQ19BUkdTKQogewogCXN0cnVjdCBo dG1scGFpcgkgdGFnWzJdOworCWNvbnN0IGNoYXIJKm5hbWUsICpzZWMsICppbmRleCwgKmRl c2M7CisJc3RydWN0IHRhZwkqdDsKIAotCWlmIChOVUxMID09IG4tPmNoaWxkKQorCWlmIChO VUxMID09IChuID0gbi0+Y2hpbGQpKQogCQlyZXR1cm4oMCk7CiAKKwluYW1lID0gbi0+c3Ry aW5nOworCXNlYyA9IGRlc2MgPSBpbmRleCA9IE5VTEw7CisJaWYgKE5VTEwgIT0gbi0+bmV4 dCkgeworCQlzZWMgPSBuLT5uZXh0LT5zdHJpbmc7CisJCWlmIChOVUxMICE9IG4tPm5leHQt Pm5leHQpIHsKKwkJCWluZGV4ID0gZGVzYyA9IG4tPm5leHQtPm5leHQtPnN0cmluZzsKKwkJ CWlmIChOVUxMICE9IG4tPm5leHQtPm5leHQtPm5leHQpCisJCQkJZGVzYyA9IG4tPm5leHQt Pm5leHQtPm5leHQtPnN0cmluZzsKKwkJfQorCX0KKwogCVBBSVJfQ0xBU1NfSU5JVCgmdGFn WzBdLCAibGluay1tYW4iKTsKIAogCWlmIChoLT5iYXNlX21hbikgewotCQlidWZmbXRfbWFu KGgsIG4tPmNoaWxkLT5zdHJpbmcsCi0JCSAgICBuLT5jaGlsZC0+bmV4dCA/Ci0JCSAgICBu LT5jaGlsZC0+bmV4dC0+c3RyaW5nIDogTlVMTCk7CisJCWJ1ZmZtdF9tYW4oaCwgbmFtZSwg c2VjLCBOVUxMKTsKIAkJUEFJUl9IUkVGX0lOSVQoJnRhZ1sxXSwgaC0+YnVmKTsKLQkJcHJp bnRfb3RhZyhoLCBUQUdfQSwgMiwgdGFnKTsKKwkJdCA9IHByaW50X290YWcoaCwgVEFHX0Es IDIsIHRhZyk7CiAJfSBlbHNlCi0JCXByaW50X290YWcoaCwgVEFHX0EsIDEsIHRhZyk7CisJ CXQgPSBwcmludF9vdGFnKGgsIFRBR19BLCAxLCB0YWcpOwogCi0JbiA9IG4tPmNoaWxkOwot CXByaW50X3RleHQoaCwgbi0+c3RyaW5nKTsKKwlwcmludF90ZXh0KGgsIG5hbWUpOwogCi0J aWYgKE5VTEwgPT0gKG4gPSBuLT5uZXh0KSkKLQkJcmV0dXJuKDApOworCWlmIChOVUxMICE9 IGluZGV4KSB7CisJCWgtPmZsYWdzIHw9IEhUTUxfTk9TUEFDRTsKKwkJcHJpbnRfdGV4dCho LCAiKCIpOworCQloLT5mbGFncyB8PSBIVE1MX05PU1BBQ0U7CisJCXByaW50X3RleHQoaCwg aW5kZXgpOworCQloLT5mbGFncyB8PSBIVE1MX05PU1BBQ0U7CisJCXByaW50X3RleHQoaCwg IikiKTsKKwl9CisKKwlpZiAoTlVMTCAhPSBkZXNjKSB7CisJCXByaW50X3RhZ3EoaCwgdCk7 CisJCWgtPmZsYWdzIHw9IEhUTUxfTk9TUEFDRTsKKwkJcHJpbnRfdGV4dChoLCAiLCBzZWN0 aW9uIik7CisJCWlmIChoLT5iYXNlX21hbikgeworCQkJYnVmZm10X21hbihoLCBuYW1lLCBz ZWMsIGluZGV4KTsKKwkJCVBBSVJfSFJFRl9JTklUKCZ0YWdbMV0sIGgtPmJ1Zik7CisJCQlw cmludF9vdGFnKGgsIFRBR19BLCAyLCB0YWcpOworCQl9IGVsc2UKKwkJCXByaW50X290YWco aCwgVEFHX0EsIDEsIHRhZyk7CisJCXByaW50X3RleHQoaCwgZGVzYyk7CisJfQogCi0JaC0+ ZmxhZ3MgfD0gSFRNTF9OT1NQQUNFOwotCXByaW50X3RleHQoaCwgIigiKTsKLQloLT5mbGFn cyB8PSBIVE1MX05PU1BBQ0U7Ci0JcHJpbnRfdGV4dChoLCBuLT5zdHJpbmcpOwotCWgtPmZs YWdzIHw9IEhUTUxfTk9TUEFDRTsKLQlwcmludF90ZXh0KGgsICIpIik7CiAJcmV0dXJuKDAp OwogfQogCkBAIC0xMTA0LDcgKzExNDksNyBAQCBtZG9jX3N4X3ByZShNRE9DX0FSR1MpCiAJ c3RydWN0IGh0bWxwYWlyCSB0YWdbMl07CiAKIAlidWZpbml0KGgpOwotCWJ1ZmNhdChoLCAi I3giKTsKKwlidWZjYXQoaCwgIiNpbmRleC0iKTsKIAogCWZvciAobiA9IG4tPmNoaWxkOyBu OyApIHsKIAkJYnVmY2F0X2lkKGgsIG4tPnN0cmluZyk7CkBAIC0xNTkyLDE0ICsxNjM3LDIz IEBAIHN0YXRpYyBpbnQKIG1kb2NfbGtfcHJlKE1ET0NfQVJHUykKIHsKIAlzdHJ1Y3QgaHRt bHBhaXIJIHRhZ1syXTsKKwllbnVtIG1kb2N0CSB0eXBlID0gbi0+dG9rOwogCiAJaWYgKE5V TEwgPT0gKG4gPSBuLT5jaGlsZCkpCiAJCXJldHVybigwKTsKIAogCWFzc2VydChNRE9DX1RF WFQgPT0gbi0+dHlwZSk7CiAKLQlQQUlSX0NMQVNTX0lOSVQoJnRhZ1swXSwgImxpbmstZXh0 Iik7Ci0JUEFJUl9IUkVGX0lOSVQoJnRhZ1sxXSwgbi0+c3RyaW5nKTsKKwlpZiAoTURPQ19M a3ggPT0gdHlwZSkgeworCQlQQUlSX0NMQVNTX0lOSVQoJnRhZ1swXSwgImxpbmstaW50Iik7 CisJCWJ1ZmluaXQoaCk7CisJCWJ1ZmNhdChoLCAiI2luZGV4LSIpOworCQlidWZjYXRfaWQo aCwgbi0+c3RyaW5nKTsKKwkJUEFJUl9IUkVGX0lOSVQoJnRhZ1sxXSwgaC0+YnVmKTsKKwl9 IGVsc2UgIHsKKwkJUEFJUl9DTEFTU19JTklUKCZ0YWdbMF0sICJsaW5rLWV4dCIpOworCQlQ QUlSX0hSRUZfSU5JVCgmdGFnWzFdLCBuLT5zdHJpbmcpOworCX0KIAogCXByaW50X290YWco aCwgVEFHX0EsIDIsIHRhZyk7CiAKSW5kZXg6IG1kb2NfbWFjcm8uYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvaG9tZS9jdnMvbWRvY21sL21kb2NtbC9tZG9jX21hY3JvLmMsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTgzCmRpZmYgLXUgLXAgLXIxLjE4MyBtZG9jX21hY3JvLmMK LS0tIG1kb2NfbWFjcm8uYwkxMiBGZWIgMjAxNSAxMjoyNDozMyAtMDAwMAkxLjE4MworKysg bWRvY19tYWNyby5jCTEyIE1hciAyMDE1IDAyOjQ5OjEwIC0wMDAwCkBAIC0xODAsNiArMTgw LDcgQEAgY29uc3QJc3RydWN0IG1kb2NfbWFjcm8gX19tZG9jX21hY3Jvc1tNRAogCXsgaW5f bGluZSwgMCB9LCAvKiBMYiAqLwogCXsgaW5fbGluZV9lb2xuLCAwIH0sIC8qIExwICovCiAJ eyBpbl9saW5lLCBNRE9DX0NBTExBQkxFIHwgTURPQ19QQVJTRUQgfSwgLyogTGsgKi8KKwl7 IGluX2xpbmUsIE1ET0NfQ0FMTEFCTEUgfCBNRE9DX1BBUlNFRCB9LCAvKiBMa3ggKi8KIAl7 IGluX2xpbmUsIE1ET0NfQ0FMTEFCTEUgfCBNRE9DX1BBUlNFRCB9LCAvKiBNdCAqLwogCXsg YmxrX3BhcnRfaW1wLCBNRE9DX0NBTExBQkxFIHwgTURPQ19QQVJTRUQgfCBNRE9DX0pPSU4g fSwgLyogQnJxICovCiAJeyBibGtfcGFydF9leHAsIE1ET0NfQ0FMTEFCTEUgfCBNRE9DX1BB UlNFRCB8CkBAIC0xOTYsNiArMTk3LDcgQEAgY29uc3QJc3RydWN0IG1kb2NfbWFjcm8gX19t ZG9jX21hY3Jvc1tNRAogCXsgaW5fbGluZV9lb2xuLCAwIH0sIC8qICVVICovCiAJeyBwaHJh c2VfdGEsIE1ET0NfQ0FMTEFCTEUgfCBNRE9DX1BBUlNFRCB8IE1ET0NfSk9JTiB9LCAvKiBU YSAqLwogCXsgaW5fbGluZV9lb2xuLCBNRE9DX1BST0xPR1VFIH0sIC8qIGxsICovCisJeyBp bl9saW5lX2VvbG4sIE1ET0NfSk9JTiB9LCAvKiBJeCAqLwogfTsKIAogY29uc3QJc3RydWN0 IG1kb2NfbWFjcm8gKiBjb25zdCBtZG9jX21hY3JvcyA9IF9fbWRvY19tYWNyb3M7CkBAIC0x Mjg4LDkgKzEyOTAsMTAgQEAgaW5fbGluZV9hcmduKE1BQ1JPX1BST1RfQVJHUykKIAljYXNl IE1ET0NfQng6CiAJCS8qIEZBTExUSFJPVUdIICovCiAJY2FzZSBNRE9DX0VzOgotCQkvKiBG QUxMVEhST1VHSCAqLwotCWNhc2UgTURPQ19YcjoKIAkJbWF4YXJncyA9IDI7CisJCWJyZWFr OworCWNhc2UgTURPQ19YcjoKKwkJbWF4YXJncyA9IDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6 CiAJCW1heGFyZ3MgPSAxOwpJbmRleDogbWRvY190ZXJtLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2hvbWUvY3ZzL21kb2NtbC9tZG9jbWwvbWRvY190ZXJtLmMsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMzEzCmRpZmYgLXUgLXAgLXIxLjMxMyBtZG9jX3Rlcm0uYwotLS0gbWRv Y190ZXJtLmMJNiBNYXIgMjAxNSAxNTo0ODo1MiAtMDAwMAkxLjMxMworKysgbWRvY190ZXJt LmMJMTIgTWFyIDIwMTUgMDI6NDk6MTEgLTAwMDAKQEAgLTIzMiw2ICsyMzIsNyBAQCBzdGF0 aWMJY29uc3Qgc3RydWN0IHRlcm1hY3QgdGVybWFjdHNbTURPCiAJeyBOVUxMLCB0ZXJtcF9s Yl9wb3N0IH0sIC8qIExiICovCiAJeyB0ZXJtcF9zcF9wcmUsIE5VTEwgfSwgLyogTHAgKi8K IAl7IHRlcm1wX2xrX3ByZSwgTlVMTCB9LCAvKiBMayAqLworCXsgdGVybXBfbGtfcHJlLCBO VUxMIH0sIC8qIExreCAqLwogCXsgdGVybXBfdW5kZXJfcHJlLCBOVUxMIH0sIC8qIE10ICov CiAJeyB0ZXJtcF9xdW90ZV9wcmUsIHRlcm1wX3F1b3RlX3Bvc3QgfSwgLyogQnJxICovCiAJ eyB0ZXJtcF9xdW90ZV9wcmUsIHRlcm1wX3F1b3RlX3Bvc3QgfSwgLyogQnJvICovCkBAIC0y NDYsNiArMjQ3LDcgQEAgc3RhdGljCWNvbnN0IHN0cnVjdCB0ZXJtYWN0IHRlcm1hY3RzW01E TwogCXsgTlVMTCwgdGVybXBfX19fcG9zdCB9LCAvKiAlVSAqLwogCXsgTlVMTCwgTlVMTCB9 LCAvKiBUYSAqLwogCXsgdGVybXBfbGxfcHJlLCBOVUxMIH0sIC8qIGxsICovCisJeyB0ZXJt cF9za2lwX3ByZSwgTlVMTCB9LCAvKiBJeCAqLwogfTsKIAogCkBAIC0xMjU3LDYgKzEyNTks MTYgQEAgdGVybXBfeHJfcHJlKERFQ0xfQVJHUykKIAlwLT5mbGFncyB8PSBURVJNUF9OT1NQ QUNFOwogCXRlcm1fd29yZChwLCAiKSIpOwogCisJaWYgKE5VTEwgPT0gKG4gPSBuLT5uZXh0 KSkgCisJCXJldHVybigwKTsKKwkKKwlwLT5mbGFncyB8PSBURVJNUF9OT1NQQUNFOworCXRl cm1fd29yZChwLCAiIHNlY3Rpb24iKTsKKwlpZiAoTlVMTCAhPSBuLT5uZXh0KQorCQl0ZXJt X3dvcmQocCwgbi0+bmV4dC0+c3RyaW5nKTsKKwllbHNlCisJCXRlcm1fd29yZChwLCBuLT5z dHJpbmcpOworCiAJcmV0dXJuKDApOwogfQogCkBAIC0yMTc0LDYgKzIxODYsOSBAQCB0ZXJt cF9sa19wcmUoREVDTF9BUkdTKQogCWlmIChOVUxMID09IChsaW5rID0gbi0+Y2hpbGQpKQog CQlyZXR1cm4oMCk7CiAKKwlpZiAoTlVMTCAhPSBsaW5rLT5uZXh0KQorCQlsaW5rID0gbGlu ay0+bmV4dDsKKwogCWlmIChOVUxMICE9IChkZXNjciA9IGxpbmstPm5leHQpKSB7CiAJCXRl cm1fZm9udHB1c2gocCwgVEVSTUZPTlRfVU5ERVIpOwogCQl3aGlsZSAoTlVMTCAhPSBkZXNj cikgewpAQCAtMjE4OCw3ICsyMjAzLDYgQEAgdGVybXBfbGtfcHJlKERFQ0xfQVJHUykKIAl0 ZXJtX2ZvbnRwdXNoKHAsIFRFUk1GT05UX0JPTEQpOwogCXRlcm1fd29yZChwLCBsaW5rLT5z dHJpbmcpOwogCXRlcm1fZm9udHBvcChwKTsKLQogCXJldHVybigwKTsKIH0KIAo= --------------000007030802030300030203-- -- To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv