From octave-sources-request at bevo dot che dot wisc dot edu Fri May 12 09:58:24 2000 Subject: 2-d median and ordered filtering From: Teemu Ikonen To: octave-sources at bevo dot che dot wisc dot edu Date: Fri, 12 May 2000 17:58:21 +0300 (EET DST) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime at docserver dot cac dot washington dot edu for more info. --0-327807492-958143501=:3661 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello everybody, Attached are functions for two-dimensional median and ordered filtering. medfilt2.m uses ordfilt2.m which in turn uses impad.m and cordflt2.oct, so you will need all four functions. All the functions are licensed under the GNU GPL and can also be obtained from the web at the address http://www.helsinki.fi/~tpikonen/octave/ t. --0-327807492-958143501=:3661 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="impad.m" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="impad.m" IyMgQ29weXJpZ2h0IChDKSAyMDAwIFRlZW11IElrb25lbg0KIyMNCiMjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3INCiMjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIyBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMg0KIyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dA0KIyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4NCiMjDQojIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUNCiMjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNB Lg0KDQojIyBQYWQgKGF1Z21lbnQpIGEgbWF0cml4IGZvciBhcHBsaWNhdGlv biBvZiBpbWFnZSBwcm9jZXNzaW5nIGFsZ29yaXRobXMuDQojIw0KIyMgcmV0 dmFsID0gaW1wYWQoQSwgeHBhZCwgeXBhZCwgW3BhZGRpbmcsIFtjb25zdF1d KQ0KIyMNCiMjIFBhZHMgdGhlIGlucHV0IGltYWdlIEEgd2l0aCB4cGFkKDEp IGVsZW1lbnRzIGZyb20gbGVmdCB4cGFkKDIpLCBlbGVtZW50cw0KIyMgZnJv bSByaWdodCB5cGFkKDEpIGVsZW1lbnRzIGZyb20gYWJvdmUgYW5kIHlwYWQo MikgZWxlbWVudHMgZnJvbSBiZWxvdy4NCiMjIFZhbHVlcyBvZiBwYWRkaW5n IGVsZW1lbnRzIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlIG9wdGlvbmFsIGFy Z3VtZW50cw0KIyMgcGFkZGluZyBhbmQgY29uc3QuIHBhZGRpbmcgaXMgb25l IG9mDQojIyAiemVyb3MiICAgICBwYWQgd2l0aCB6ZXJvcywgdGhpcyBpcyB0 aGUgZGVmYXVsdA0KIyMgIm9uZXMiICAgICAgcGFkIHdpdGggb25lcw0KIyMg ImNvbnN0YW50IiAgcGFkIHdpdGggYSB2YWx1ZSBvYnRhaW5lZCBmcm9tIHRo ZSBvcHRpb25hbCBmaWZ0aCANCiMjICAgICAgICAgICAgICBhcmd1bWVudCBj b25zdA0KIyMgInN5bW1ldHJpYyIgcGFkIHdpdGggdmFsdWVzIG9idGFpbmVk IGZyb20gQSBzbyB0aGF0IHRoZSBwYWRkZWQgaW1hZ2UNCiMjICAgICAgICAg ICAgICBtaXJyb3JzIEEgc3RhcnRpbmcgZnJvbSBlZGdlcyBvZiBBDQojIyAi cmVmbGVjdCIgICBzYW1lIGFzIHN5bW1ldHJpYywgYnV0IHRoZSBlZGdlIHJv d3MgYW5kIGNvbHVtbnMgYXJlIG5vdA0KIyMgICAgICAgICAgICAgIHVzZWQg aW4gdGhlIHBhZGRpbmcNCiMjICJyZXBsaWNhdGUiIHBhZCB3aXRoIHZhbHVl cyBvYnRhaW5lZCBmcm9tIEEgc28gdGhhdCB0aGUgcGFkZGVkIGltYWdlIA0K IyMgICAgICAgICAgICAgIHJlcGVhdGVzIGl0c2VsZiBpbiB0d28gZGltZW5z aW9ucw0KDQojIyBBdXRob3I6IFRlZW11IElrb25lbiA8dHBpa29uZW5AcGN1 LmhlbHNpbmtpLmZpPg0KIyMgQ3JlYXRlZDogNS41LjIwMDANCiMjIEtleXdv cmRzOiBwYWRkaW5nIGltYWdlIHByb2Nlc3NpbmcNCg0KIyMgQSBuaWNlIHRl c3QgbWF0cml4IGZvciBwYWRkaW5nOg0KIyMgQSA9IDEwKlsxOjVdJyAqIG9u ZXMoMSw1KSArIG9uZXMoNSwxKSpbMTo1XQ0KDQpmdW5jdGlvbiByZXR2YWwg PSBpbXBhZChBLCB4cGFkLCB5cGFkLCAuLi4pDQoNCnBhZGRpbmcgPSAiemVy b3MiOw0KY29uc3QgPSAxOw0KdmFfc3RhcnQoKTsNCmlmKG5hcmdpbiA+IDMp DQogIHBhZGRpbmcgPSB2YV9hcmcoKTsNCiAgaWYobmFyZ2luID4gNCkNCiAg ICBjb25zdCA9IHZhX2FyZygpOw0KICBlbmRpZg0KZW5kaWYNCiAgDQpvcmln eCA9IHNpemUoQSwyKTsNCm9yaWd5ID0gc2l6ZShBLDEpOw0KcmV0eCA9IG9y aWd4ICsgeHBhZCgxKSArIHhwYWQoMik7DQpyZXR5ID0gb3JpZ3kgKyB5cGFk KDEpICsgeXBhZCgyKTsNCg0KZW1wdHl3YXJuID0gZW1wdHlfbGlzdF9lbGVt ZW50c19vazsNCmVtcHR5X2xpc3RfZWxlbWVudHNfb2sgPSAxOw0KDQppZihz dHJjbXAocGFkZGluZywgInplcm9zIikpDQogIHJldHZhbCA9IHplcm9zKHJl dHkscmV0eCk7DQogIHJldHZhbCh5cGFkKDEpKzEgOiB5cGFkKDEpK29yaWd5 LCB4cGFkKDEpKzEgOiB4cGFkKDEpK29yaWd4KSA9IEE7DQogIGVsc2VpZihz dHJjbXAocGFkZGluZywib25lcyIpKQ0KICAgIHJldHZhbCA9IG9uZXMocmV0 eSxyZXR4KTsNCiAgICByZXR2YWwoeXBhZCgxKSsxIDogeXBhZCgxKStvcmln eSwgeHBhZCgxKSsxIDogeHBhZCgxKStvcmlneCkgPSBBOw0KICBlbHNlaWYo c3RyY21wKHBhZGRpbmcsImNvbnN0YW50IikpDQogICAgcmV0dmFsID0gY29u c3QuKm9uZXMocmV0eSxyZXR4KTsNCiAgICByZXR2YWwoeXBhZCgxKSsxIDog eXBhZCgxKStvcmlneSwgeHBhZCgxKSsxIDogeHBhZCgxKStvcmlneCkgPSBB Ow0KICBlbHNlaWYoc3RyY21wKHBhZGRpbmcsInJlcGxpY2F0ZSIpKQ0KICAg IHkxID0gb3JpZ3kteXBhZCgxKSsxOw0KICAgIHgxID0gb3JpZ3gteHBhZCgx KSsxOyAgICANCiAgICBpZih5MSA8IDEgfHwgeDEgPCAxIHx8IHlwYWQoMikg PiBvcmlneSB8fCB4cGFkKDIpID4gb3JpZ3gpDQogICAgICBlcnJvcigiVG9v IGxhcmdlIHBhZGRpbmcgZm9yIHRoaXMgcGFkZGluZyB0eXBlIik7DQogICAg ZWxzZQ0KICAgICAgeXJhbmdlMSA9IHkxIDogb3JpZ3k7DQogICAgICB5cmFu Z2UyID0gMSA6IHlwYWQoMik7DQogICAgICB4cmFuZ2UxID0geDEgOiBvcmln eDsNCiAgICAgIHhyYW5nZTIgPSAxIDogeHBhZCgyKTsNCiAgICAgIHJldHZh bCA9IFsgQSh5cmFuZ2UxLCB4cmFuZ2UxKSwgQSh5cmFuZ2UxLCA6KSwgQSh5 cmFuZ2UxLCB4cmFuZ2UyKTsNCiAgICAgICAgICAgICAgICAgQSg6LCB4cmFu Z2UxKSwgICAgICAgQSwgICAgICAgICAgICAgQSg6LCB4cmFuZ2UyKTsNCiAg ICAgICAgICAgICAgICAgQSh5cmFuZ2UyLCB4cmFuZ2UxKSwgQSh5cmFuZ2Uy LCA6KSwgQSh5cmFuZ2UyLCB4cmFuZ2UyKSBdOw0KICAgIGVuZGlmICAgICAg ICAgICAgICAgICAgICAgICAgDQogIGVsc2VpZihzdHJjbXAocGFkZGluZywi c3ltbWV0cmljIikpDQogICAgeTIgPSBvcmlneS15cGFkKDIpKzE7DQogICAg eDIgPSBvcmlneC14cGFkKDIpKzE7DQogICAgaWYoeXBhZCgxKSA+IG9yaWd5 IHx8IHhwYWQoMSkgPiBvcmlneCB8fCB5MiA8IDEgfHwgeDIgPCAxKQ0KICAg ICAgZXJyb3IoIlRvbyBsYXJnZSBwYWRkaW5nIGZvciB0aGlzIHBhZGRpbmcg dHlwZSIpOw0KICAgIGVsc2UNCiAgICAgIHlyYW5nZTEgPSAxIDogeXBhZCgx KTsNCiAgICAgIHlyYW5nZTIgPSB5MiA6IG9yaWd5Ow0KICAgICAgeHJhbmdl MSA9IDEgOiB4cGFkKDEpOw0KICAgICAgeHJhbmdlMiA9IHgyIDogb3JpZ3g7 DQogICAgICByZXR2YWwgPSBbIGZsaXBscihmbGlwdWQoQSh5cmFuZ2UxLCB4 cmFuZ2UxKSkpLCBmbGlwdWQoQSh5cmFuZ2UxLCA6KSksIGZsaXBscihmbGlw dWQoQSh5cmFuZ2UxLCB4cmFuZ2UyKSkpOw0KICAgICAgICAgICAgICAgICBm bGlwbHIoQSg6LCB4cmFuZ2UxKSksIEEsIGZsaXBscihBKDosIHhyYW5nZTIp KTsNCiAgICAgICAgICAgICAgICAgZmxpcGxyKGZsaXB1ZChBKHlyYW5nZTIs IHhyYW5nZTEpKSksIGZsaXB1ZChBKHlyYW5nZTIsIDopKSwgZmxpcGxyKGZs aXB1ZChBKHlyYW5nZTIsIHhyYW5nZTIpKSkgXTsNCiAgICBlbmRpZiAgICAg IA0KICBlbHNlaWYoc3RyY21wKHBhZGRpbmcsInJlZmxlY3QiKSkNCiAgICB5 MiA9IG9yaWd5LXlwYWQoMik7DQogICAgeDIgPSBvcmlneC14cGFkKDIpOw0K ICAgIGlmKHlwYWQoMSkrMSA+IG9yaWd5IHx8IHhwYWQoMSkrMSA+IG9yaWd4 IHx8IHkyIDwgMSB8fCB4MiA8IDEpDQogICAgICBlcnJvcigiVG9vIGxhcmdl IHBhZGRpbmcgZm9yIHRoaXMgcGFkZGluZyB0eXBlIik7DQogICAgZWxzZQ0K ICAgICAgeXJhbmdlMSA9IDIgOiB5cGFkKDEpKzE7DQogICAgICB5cmFuZ2Uy ID0geTIgOiBvcmlneS0xOw0KICAgICAgeHJhbmdlMSA9IDIgOiB4cGFkKDEp KzE7DQogICAgICB4cmFuZ2UyID0geDIgOiBvcmlneC0xOw0KICAgICAgcmV0 dmFsID0gWyBmbGlwbHIoZmxpcHVkKEEoeXJhbmdlMSwgeHJhbmdlMSkpKSwg ZmxpcHVkKEEoeXJhbmdlMSwgOikpLCBmbGlwbHIoZmxpcHVkKEEoeXJhbmdl MSwgeHJhbmdlMikpKTsNCiAgICAgICAgICAgICAgICAgZmxpcGxyKEEoOiwg eHJhbmdlMSkpLCBBLCBmbGlwbHIoQSg6LCB4cmFuZ2UyKSk7DQogICAgICAg ICAgICAgICAgIGZsaXBscihmbGlwdWQoQSh5cmFuZ2UyLCB4cmFuZ2UxKSkp LCBmbGlwdWQoQSh5cmFuZ2UyLCA6KSksIGZsaXBscihmbGlwdWQoQSh5cmFu Z2UyLCB4cmFuZ2UyKSkpIF07DQogICAgZW5kaWYNCiAgZWxzZSAgICANCiAg ICBlcnJvcigiVW5rbm93biBwYWRkaW5nIHR5cGUiKTsNCmVuZGlmDQoNCmVt cHR5X2xpc3RfZWxlbWVudHNfb2sgPSBlbXB0eXdhcm47ICANCiAgICAgIA0K ZW5kZnVuY3Rpb24NCg== --0-327807492-958143501=:3661 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="medfilt2.m" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="medfilt2.m" IyMgQ29weXJpZ2h0IChDKSAyMDAwIFRlZW11IElrb25lbg0KIyMNCiMjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3INCiMjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIyBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMg0KIyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dA0KIyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4NCiMjDQojIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUNCiMjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNB Lg0KDQojIyBUd28gZGltZW5zaW9uYWwgbWVkaWFuIGZpbHRlcmluZy4NCiMj DQojIyByZXR2YWwgPSBtZWRmaWx0MihBLCBbZG9tYWluLCBwYWRkaW5nXSkN CiMjDQojIyBSZXBsYWNlIGVsZW1lbnRzIG9mIEEgd2l0aCB0aGUgbWVkaWFu IG9mIHRoZWlyIG5laWdoYm91cnMgZGVmaW5lZCANCiMjIGJ5IHRydWUgZWxl bWVudHMgb2YgbG9naWNhbCBtYXRyaXggZG9tYWluLiBUaGUgZGVmYXVsdCBk b21haW4gaXMgDQojIyAzIGJ5IDMgbWF0cml4IHdpdGggYWxsIGVsZW1lbnRz IGVxdWFsIHRvIDEuIElmIGRvbWFpbiBpcyAxIGJ5IDIgDQojIyByb3cgdmVj dG9yLCBkb21haW4gd2lsbCBiZSBsb2dpY2FsKG9uZXMoZG9tYWluKDIpLCBk b21haW4oMSkpKS4NCiMjDQojIyBPcHRpb25hbCB2YXJpYWJsZSBwYWRkaW5n IGRlZmluZXMgdGhlIHBhZGRpbmcgdXNlZCBpbiBhdWdtZW50aW5nIA0KIyMg dGhlIGJvcmRlcnMgb2YgQS4gU2VlIElNUEFEIGZvciBkZXRhaWxzLg0KIyMN CiMjIFNlZSBhbHNvIE9SREZJTFQyLg0KDQojIyBBdXRob3I6IFRlZW11IElr b25lbiA8dHBpa29uZW5AcGN1LmhlbHNpbmtpLmZpPg0KIyMgQ3JlYXRlZDog NS41LjIwMDANCiMjIEtleXdvcmRzOiBpbWFnZSBwcm9jZXNzaW5nIG1lZGlh biBmaWx0ZXJpbmcNCg0KZnVuY3Rpb24gcmV0dmFsID0gbWVkZmlsdDIoQSwg Li4uKQ0KDQpwYWRkaW5nID0gInplcm9zIjsNCmRvbWFpbiA9IGxvZ2ljYWwo b25lcygzLDMpKTsNCg0KbmFyZ2luID0gbmFyZ2luIC0gMTsNCnZhX3N0YXJ0 KCk7DQp3aGlsZShuYXJnaW4tLSkNCiAgYSA9IHZhX2FyZygpOw0KICBpZihp c3N0cihhKSkNCiAgICBwYWRkaW5nID0gYTsNCiAgZWxzZWlmKGlzX3ZlY3Rv cihhKSAmJiBzaXplKGEpID09IFsxIDJdKQ0KICAgIGRvbWFpbiA9IGxvZ2lj YWwob25lcyhhKDIpLCBhKDEpKSk7DQogIGVsc2VpZihpc19tYXRyaXgoYSkp DQogICAgZG9tYWluID0gbG9naWNhbChhKTsNCiAgZW5kaWYNCmVuZHdoaWxl DQoNCm4gPSBzdW0oc3VtKGRvbWFpbikpOw0KaWYoKG4gLSAyKmZsb29yKG4v MikpID09IDApICUgbiBldmVuIC0gbW9yZSB3b3JrDQogIG50aCA9IGZsb29y KG4vMik7DQogIGEgPSBvcmRmaWx0MihBLCBudGgsIGRvbWFpbiwgcGFkZGlu Zyk7DQogIGIgPSBvcmRmaWx0MihBLCBudGggKyAxLCBkb21haW4sIHBhZGRp bmcpOw0KICByZXR2YWwgPSAoYSArIGIpLi8yOw0KZWxzZQ0KICBudGggPSBm bG9vcihuLzIpICsgMTsNCiAgcmV0dmFsID0gb3JkZmlsdDIoQSwgbnRoLCBk b21haW4sIHBhZGRpbmcpOw0KZW5kaWYNCg0KZW5kZnVuY3Rpb24NCiAgDQog IA0KICANCg== --0-327807492-958143501=:3661 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ordfilt2.m" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="ordfilt2.m" IyMgQ29weXJpZ2h0IChDKSAyMDAwIFRlZW11IElrb25lbg0KIyMNCiMjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3INCiMjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIyBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMg0KIyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dA0KIyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4NCiMjDQojIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUNCiMjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNB Lg0KDQojIyBUd28gZGltZW5zaW9uYWwgb3JkZXJlZCBmaWx0ZXJpbmcuDQoj Iw0KIyMgcmV0dmFsID0gb3JkZmlsdDIoQSwgbnRoLCBkb21haW4sIFtTLCBw YWRkaW5nXSkNCiMjDQojIyBPcmRlcmVkIGZpbHRlciByZXBsYWNlcyBhbiBl bGVtZW50IG9mIEEgd2l0aCB0aGUgbnRoIGVsZW1lbnQgb2YgdGhlIA0KIyMg c29ydGVkIHNldCBvZiBuZWlnaGJvdXJzIGRlZmluZWQgYnkgdGhlIGxvZ2lj YWwgKGJvb2xlYW4pIG1hdHJpeCBkb21haW4uDQojIyBOZWlnaGJvdXIgZWxl bWVudHMgYXJlIHNlbGVjdGVkIHRvIHRoZSBzb3J0IGlmIHRoZSBjb3JyZXNw b25kaW5nIA0KIyMgZWxlbWVudCBpbiB0aGUgZG9tYWluIG1hdHJpeCBpcyB0 cnVlLg0KIyMgDQojIyBUaGUgb3B0aW9uYWwgdmFyaWFibGUgUyBpcyBhIG1h dHJpeCBvZiBzaXplKGRvbWFpbikuIFZhbHVlcyBvZiBTIA0KIyMgY29ycmVz cG9uZGluZyB0byBub256ZXJvIHZhbHVlcyBvZiBkb21haW4gYXJlIGFkZGVk IHRvIHZhbHVlcyBvYnRhaW5lZCANCiMjIGZyb20gQSB3aGVuIGRvaW5nIHRo ZSBzb3J0aW5nLg0KIyMNCiMjIE9wdGlvbmFsIHZhcmlhYmxlIHBhZGRpbmcg ZGV0ZXJtaW5lcyBob3cgdGhlIG1hdHJpeCBBIGlzIHBhZGRlZCBmcm9tIA0K IyMgdGhlIGVkZ2VzLiBTZWUgSU1QQUQgZm9yIGRldGFpbHMuDQojIyANCiMj IFNlZSBhbHNvIE1FREZJTFQyLg0KDQojIyBBdXRob3I6IFRlZW11IElrb25l biA8dHBpa29uZW5AcGN1LmhlbHNpbmtpLmZpPg0KIyMgQ3JlYXRlZDogNS41 LjIwMDANCiMjIEtleXdvcmRzOiBpbWFnZSBwcm9jZXNzaW5nIGZpbHRlcmlu Zw0KDQpmdW5jdGlvbiByZXR2YWwgPSBvcmRmaWx0MihBLCBudGgsIGRvbWFp biwgLi4uKQ0KDQpTID0gemVyb3Moc2l6ZShkb21haW4pKTsNCnBhZGRpbmcg PSAiemVyb3MiOw0KbmFyZ2luID0gbmFyZ2luIC0gMzsNCnZhX3N0YXJ0KCk7 DQp3aGlsZShuYXJnaW4tLSkNCiAgYSA9IHZhX2FyZygpOw0KICBpZihpc3N0 cihhKSkNCiAgICBwYWRkaW5nID0gYTsNCiAgZWxzZWlmKGlzX21hdHJpeChh KSAmJiBzaXplKGEpID09IHNpemUoZG9tYWluKSkNCiAgICBTID0gYTsNCiAg ZW5kaWYNCmVuZHdoaWxlDQoNCmlmKCFpc19ib29sKGRvbWFpbikpDQogICUg IHdhcm5pbmcoImRvbWFpbiBzaG91bGQgYmUgYSBib29sZWFuIG1hdHJpeCwg Y29udmVydGluZyIpOw0KICBkb21haW4gPSBsb2dpY2FsKGRvbWFpbik7DQpl bmRpZjsNCg0KeHBhZCgxKSA9IGZsb29yKChzaXplKGRvbWFpbiwgMikrMSkv MikgLSAxOw0KeHBhZCgyKSA9IHNpemUoZG9tYWluLDIpIC0geHBhZCgxKSAt IDE7DQp5cGFkKDEpID0gZmxvb3IoKHNpemUoZG9tYWluLCAxKSsxKS8yKSAt IDE7DQp5cGFkKDIpID0gc2l6ZShkb21haW4sMSkgLSB5cGFkKDEpIC0gMTsN Cg0KaWYoeXBhZCgxKSA+PSBzaXplKEEsMSkgfHwgeHBhZCgxKSA+PSBzaXpl KEEsMikpDQogIGVycm9yKCJkb21haW4gbWF0cml4IHRvbyBsYXJnZSIpOw0K ZW5kaWY7DQoNCkEgPSBpbXBhZChBLCB4cGFkLCB5cGFkLCBwYWRkaW5nKTsN CnJldHZhbCA9IGNvcmRmbHQyKEEsIG50aCwgZG9tYWluLCBTKTsNCg0KZW5k ZnVuY3Rpb24NCg== --0-327807492-958143501=:3661 Content-Type: TEXT/plain; name="cordflt2.cc" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="cordflt2.cc" Ly8gQ29weXJpZ2h0IChDKSAyMDAwIFRlZW11IElrb25lbg0KLy8NCi8vIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3INCi8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQovLyBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMg0KLy8gb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQovLw0KLy8gVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dA0KLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLy8gTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUNCi8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4NCi8vDQovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KLy8gYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUNCi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNB Lg0KDQojaW5jbHVkZSA8b2N0YXZlL29jdC5oPg0KDQovLyBUZW1wbGF0ZSBm dW5jdGlvbiBmb3IgcXNvcnQgY29tcGFyZQ0KLy8gRVQgaXMgdGhlIHR5cGUg b2YgdGhlIG1hdHJpeCBlbGVtZW50DQp0ZW1wbGF0ZSA8Y2xhc3MgRVQ+DQpp bnQgY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQ0Kew0K ICAgIGlmKCooRVQgKilhID4gKihFVCAqKWIpDQogICAgICByZXR1cm4gMTsN CiAgICBlbHNlIGlmKCooRVQgKilhIDwgKihFVCAqKWIpDQogICAgICByZXR1 cm4gLTE7DQogICAgZWxzZQ0KICAgICAgcmV0dXJuIDA7DQp9DQoNCg0KLy8g RXhwbGljaXQgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIGNvbXBsZXggcXNvcnQg Y29tcGFyZQ0KdGVtcGxhdGUgPD4gaW50IGNvbXBhcmU8Q29tcGxleD4oY29u c3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikNCnsNCiAgICBkb3VibGUgYW5v cm0yID0gKCooQ29tcGxleCAqKWEpLnJlYWwoKSAqICgqKENvbXBsZXggKilh KS5yZWFsKCkgDQogICAgICArICgqKENvbXBsZXggKilhKS5pbWFnKCkgKiAo KihDb21wbGV4ICopYSkuaW1hZygpOw0KICAgIGRvdWJsZSBibm9ybTIgPSAo KihDb21wbGV4ICopYikucmVhbCgpICogKCooQ29tcGxleCAqKWIpLnJlYWwo KSANCiAgICAgICsgKCooQ29tcGxleCAqKWIpLmltYWcoKSAqICgqKENvbXBs ZXggKiliKS5pbWFnKCk7DQogICAgICAgIA0KICAgIGlmKCBhbm9ybTIgPiBi bm9ybTIgKSB7DQogICAgICByZXR1cm4gMTsNCiAgICB9IGVsc2UgaWYoIGFu b3JtMiA8IGJub3JtMiApIHsNCiAgICAgIHJldHVybiAtMTsNCiAgICB9IGVs c2Ugew0KICAgICAgcmV0dXJuIDA7DQogICAgfQ0KfQ0KDQogDQovLyBUZW1w bGF0ZSBmdW5jdGlvbiBmb3IgZG9pbmcgdGhlIGFjdHVhbCBmaWx0ZXJpbmcN Ci8vIE1UIGlzIHRoZSB0eXBlIG9mIHRoZSBtYXRyaXggdG8gYmUgZmlsdGVy ZWQgKE1hdHJpeCBvciBDb21wbGV4TWF0cml4KQ0KLy8gRVQgaXMgdGhlIHR5 cGUgb2YgdGhlIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCAoZG91YmxlIG9yIENv bXBsZXgpDQp0ZW1wbGF0ZSA8Y2xhc3MgTVQsIGNsYXNzIEVUPiANCm9jdGF2 ZV92YWx1ZV9saXN0IGRvX2ZpbHRlcmluZyhNVCBBLCBpbnQgbnRoLCBib29s TWF0cml4IGRvbSwgTVQgUykNCnsNCiAgICBpbnQgaSwgaiwgYywgZDsNCiAg ICANCiAgICBpbnQgbGVuID0gMDsNCiAgICBmb3IoaiA9IDA7IGogPCBkb20u Y29sdW1ucygpOyBqKyspIHsNCglmb3IoaSA9IDA7IGkgPCBkb20ucm93cygp OyBpKyspIHsNCgkgICAgaWYoZG9tLmVsZW0oaSxqKSkgDQoJICAgICAgbGVu Kys7DQoJfQ0KICAgIH0NCiAgICBpZihudGggPiBsZW4gLSAxKSB7DQoJd2Fy bmluZygibnRoIHNob3VsZCBiZSBsZXNzIHRoYW4gbm9uLXplcm8gdmFsdWVz IGluIGRvbWFpbiIpOw0KCXdhcm5pbmcoInNldHRpbmcgbnRoIHRvIGxhcmdl c3QgcG9zc2libGUgdmFsdWVcbiIpOw0KCW50aCA9IGxlbiAtIDE7DQogICAg fQ0KICAgIGlmKG50aCA8IDApIHsNCgl3YXJuaW5nKCJudGggc2hvdWxkIGJl IG5vbi1uZWdhdGl2ZSwgc2V0dGluZyB0byAxXG4iKTsNCgludGggPSAwOyAv LyBudGggaXMgYSBjLWluZGV4DQogICAgfQ0KICAgICAgICAgICAgICAgIA0K ICAgIGludCByb3dvZmZzZXQgPSAoZG9tLmNvbHVtbnMoKSArIDEpLzIgLSAx Ow0KICAgIGludCBjb2xvZmZzZXQgPSAoZG9tLnJvd3MoKSArIDEpLzIgLSAx Ow0KDQogICAgLy9vdXRwdXRzDQogICAgb2N0YXZlX3ZhbHVlX2xpc3Qgb3V0 Ow0KICAgIGNvbnN0IGludCBvcmlneCA9IEEuY29sdW1ucygpIC0gZG9tLmNv bHVtbnMoKSsxOw0KICAgIGNvbnN0IGludCBvcmlneSA9IEEucm93cygpIC0g ZG9tLnJvd3MoKSsxOw0KICAgIE1UIHJldHZhbCA9IE1UKG9yaWd5LCBvcmln eCk7DQoNCiAgICBpbnQgKm9mZnNldHMgPSBuZXcgaW50W2xlbl07DQogICAg RVQgKnZhbHVlcyA9IG5ldyBFVFtsZW5dOw0KICAgIEVUICphZGRzID0gbmV3 IEVUW2xlbl07DQogICAgDQogICAgYyA9IDA7DQogICAgZCA9IEEucm93cygp Ow0KICAgIGZvcihqID0gMDsgaiA8IGRvbS5jb2x1bW5zKCk7IGorKykgew0K CWZvcihpID0gMDsgaSA8IGRvbS5yb3dzKCk7IGkrKykgew0KCSAgICBpZihk b20uZWxlbShpLGopKSB7DQoJCW9mZnNldHNbY10gPSAoaSAtIGNvbG9mZnNl dCkgKyAoaiAtIHJvd29mZnNldCkqZDsNCgkJYWRkc1tjXSA9IFMuZWxlbShp LGopOw0KCQljKys7DQoJICAgIH0NCgl9DQogICAgfQ0KICAgIA0KICAgIEVU ICpkYXRhID0gQS5mb3J0cmFuX3ZlYygpOw0KICAgIGludCBiYXNlID0gY29s b2Zmc2V0ICsgQS5yb3dzKCkqcm93b2Zmc2V0Ow0KICAgIGZvcihqID0gMDsg aiA8IHJldHZhbC5jb2x1bW5zKCk7IGorKykgew0KCWZvcihpID0gMDsgaSA8 IHJldHZhbC5yb3dzKCk7IGkrKykgew0KCSAgICBmb3IoYyA9IDA7IGMgPCBs ZW47IGMrKykgew0KCQl2YWx1ZXNbY10gPSBkYXRhW2Jhc2UgKyBvZmZzZXRz W2NdXSArIGFkZHNbY107DQoJICAgIH0NCgkgICAgYmFzZSsrOw0KCSAgICBv Y3RhdmVfcXNvcnQoKHZvaWQgKikgdmFsdWVzLCBsZW4sIHNpemVvZihFVCks ICZjb21wYXJlPEVUPik7DQoJICAgIHJldHZhbChpLCBqKSA9IHZhbHVlc1tu dGhdOw0KCX0NCgliYXNlICs9IGRvbS5yb3dzKCkgLSAxOw0KICAgIH0NCg0K ICAgIG91dCgwKSA9IG9jdGF2ZV92YWx1ZShyZXR2YWwpOw0KICAgIA0KICAg IHJldHVybiBvdXQ7DQp9DQoNCi8vIGluc3RhbnRpYXRlIHRlbXBsYXRlcw0K dGVtcGxhdGUgaW50IGNvbXBhcmU8ZG91YmxlPihjb25zdCB2b2lkICosIGNv bnN0IHZvaWQgKik7DQp0ZW1wbGF0ZSBvY3RhdmVfdmFsdWVfbGlzdCBkb19m aWx0ZXJpbmc8TWF0cml4LCBkb3VibGU+KE1hdHJpeCwgaW50LCBib29sTWF0 cml4LCBNYXRyaXgpOw0KLy8gZysrIGlzIGJyb2tlbiwgZXhwbGljaXQgaW5z dGFudGlhdGlvbiBvZiBzcGVjaWFsaXplZCB0ZW1wbGF0ZSBmdW5jdGlvbg0K Ly8gY29uZnVzZXMgdGhlIGNvbXBpbGVyLg0KLy8gdGVtcGxhdGUgaW50IGNv bXBhcmU8Q29tcGxleD4oY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOw0K dGVtcGxhdGUgb2N0YXZlX3ZhbHVlX2xpc3QgZG9fZmlsdGVyaW5nPENvbXBs ZXhNYXRyaXgsIENvbXBsZXg+KENvbXBsZXhNYXRyaXgsIGludCwgYm9vbE1h dHJpeCwgQ29tcGxleE1hdHJpeCk7DQoNCkRFRlVOX0RMRChjb3JkZmx0Miwg YXJncywgLA0KImZ1bmN0aW9uIHJldHZhbCA9IG9yZGZpbHQyKEEsIG50aCwg ZG9tYWluLCBTKQ0KDQogSW1wbGVtZW50YXRpb24gb2YgdHdvLWRpbWVuc2lv bmFsIG9yZGVyZWQgZmlsdGVyaW5nLiBVc2VyIGludGVyZmFjZQ0KIGluIG9y ZGZpbHQyLm0NCiIpDQp7DQogICAgaWYoYXJncy5sZW5ndGgoKSAhPSA0KSB7 DQoJcHJpbnRfdXNhZ2UgKCJvcmRmaWx0MiIpOw0KCXJldHVybiBvY3RhdmVf dmFsdWVfbGlzdCgpOw0KICAgIH0NCiAgICANCiAgICAvLyBudGggaXMgYW4g aW5kZXggdG8gYW4gYXJyYXksIHRodXMgLSAxDQogICAgaW50IG50aCA9IChp bnQpIChhcmdzKDEpLnZlY3Rvcl92YWx1ZSgpKSgwKSAtIDE7DQogICAgYm9v bE1hdHJpeCBkb20gPSBhcmdzKDIpLmJvb2xfbWF0cml4X3ZhbHVlKCk7DQoN CiAgICBvY3RhdmVfdmFsdWVfbGlzdCByZXR2YWw7DQogICAgDQogICAgaWYo YXJncygwKS5pc19yZWFsX21hdHJpeCgpKSB7DQoJTWF0cml4IEEgPSBhcmdz KDApLm1hdHJpeF92YWx1ZSgpOw0KCU1hdHJpeCBTID0gYXJncygzKS5tYXRy aXhfdmFsdWUoKTsNCglyZXR2YWwgPSBkb19maWx0ZXJpbmc8TWF0cml4LCBk b3VibGU+KEEsIG50aCwgZG9tLCBTKTsNCiAgICB9IA0KICAgIGVsc2UgaWYo YXJncygwKS5pc19jb21wbGV4X21hdHJpeCgpKSB7DQoJQ29tcGxleE1hdHJp eCBBID0gYXJncygwKS5jb21wbGV4X21hdHJpeF92YWx1ZSgpOw0KCUNvbXBs ZXhNYXRyaXggUyA9IGFyZ3MoMykuY29tcGxleF9tYXRyaXhfdmFsdWUoKTsN CglyZXR2YWwgPSBkb19maWx0ZXJpbmc8Q29tcGxleE1hdHJpeCwgQ29tcGxl eD4oQSwgbnRoLCBkb20sIFMpOw0KICAgIH0gDQogICAgZWxzZSB7DQoJZXJy b3IoIkEgc2hvdWxkIGJlIHJlYWwgb3IgY29tcGxleCBtYXRyaXhcbiIpOw0K CXJldHVybiBvY3RhdmVfdmFsdWVfbGlzdCgpOw0KICAgIH0NCiAgICANCiAg ICByZXR1cm4gcmV0dmFsOw0KICAgICANCn0NCg== --0-327807492-958143501=:3661-- ----------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.che.wisc.edu/octave/octave.html How to fund new projects: http://www.che.wisc.edu/octave/funding.html Subscription information: http://www.che.wisc.edu/octave/archive.html -----------------------------------------------------------------------