[BLACKBOX] Variant Records vs. Component Pascal

From: Stephen R. Troy <"Stephen>
Date: Thu, 31 Dec 2009 14:12:04 -0700
----boundary-LibPST-iamunique-1661310720_-_- Content-type: text/plain Hello List, This is my first post to this list. To help you reply, I started programming digital computers, in machine language, in 1957. Since then I have done scientific and engineering programming in FORTRAN, BASIC, Pascal, and then Modula-2 for many years. I have only limited familiarity with C. Now retired, recently I have moved to Oberon and now Component Pascal, writing programs to support hobbies. I have a program I have been evolving for several years, which reads in a database which is in a structured ASCII text file using a third-party database schema. The program develops several index files, performs various sorting and filtering operations on these indexes, and the uses the modified indexes to write out reports using the same database schema. There are three main types of records, and I was able to write very efficient sorting and filtering procedures in Modula-2 by writing the records as variant records of a basic type, then instantiating the records by pointers. My indexes were linked lists of the pointers, both linear and binary trees, and so I could find, sort, and filter each of the three types of records using the same very efficient code, because I manipulated only the pointers' "next-record" pointer in the linked lists, not moving any records in memory. But I apparently I can't use this method in Component Pascal because variant records are not allowed. I tried defining a basic record as an ABSTRACT type, then defining each of my three record types as extensions. However, I can't instantiate a record as a NEW(pointer to basic type), and I can't use a single sort routine with each of the three (pointer to extension type) -- I need three separate routines, which is clumsy at best, and seems contrary to the basic intent of Component Pascal. I tried defining the basic record type as EXTENSIBLE, but that made no difference. I found an obscure section in the Component Pascal documentation that said that using a RECORD [union] system flag, which allowed a "C-type" union data structure, it was possible to simulate Pascal- and Modula-style variant records, but the example in the documentation will not compile -- it gives an "invalid system flag" error message on the [union] flag. Any suggestions would be welcome at this point. Thanks, Steve Troy ---- To unsubscribe, send a message with body "SIGNOFF BLACKBOX" to LISTSERV{([at]})nowhere.xy ----boundary-LibPST-iamunique-1661310720_-_- Content-type: application/rtf Content-transfer-encoding: base64 Content-Disposition: attachment; filename="rtf-body.rtf" e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbWh0bWwxIFxkZWZmMHtcZm9udHRibA0Ke1xmMFxm c3dpc3NcZmNoYXJzZXQwIEFyaWFsO30NCntcZjFcZm1vZGVybiBDb3VyaWVyIE5ldzt9DQp7XGYy XGZuaWxcZmNoYXJzZXQyIFN5bWJvbDt9DQp7XGYzXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXIg TmV3O319DQp7XGNvbG9ydGJsXHJlZDBcZ3JlZW4wXGJsdWUwO1xyZWQwXGdyZWVuMFxibHVlMjU1 O30NClx1YzFccGFyZFxwbGFpblxkZWZ0YWIzNjAgXGYwXGZzMjQgDQp7XCpcaHRtbHRhZzE5IDxo dG1sPn0NCntcKlxodG1sdGFnNTAgPGJvZHk+fXtcKlxodG1sdGFnNjR9XGh0bWxydGYge1xodG1s cnRmMCANCntcKlxodG1sdGFnODQgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OlZlcmRhbmE7IGNv bG9yOiMwMDAwMDA7IGZvbnQtc2l6ZToxMHB0OyI+fVxodG1scnRmIHtcaHRtbHJ0ZjAgXGh0bWxy dGYgfVxodG1scnRmMCB7XCpcaHRtbHRhZzcyfVxodG1scnRmfVxodG1scnRmMA0KDQp7XCpcaHRt bHRhZzk2IDxkaXY+fVxodG1scnRmIHtcaHRtbHJ0ZjAge1wqXGh0bWx0YWc2NH1caHRtbHJ0ZiB7 XGh0bWxydGYwIFxodG1scnRmIHtcaHRtbHJ0ZjAgSGVsbG8gTGlzdCxcaHRtbHJ0ZiB9XGh0bWxy dGYwIHtcKlxodG1sdGFnNzJ9XGh0bWxydGZccGFyfVxodG1scnRmMA0KDQp7XCpcaHRtbHRhZzEw NCA8L2Rpdj59XGh0bWxydGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTYgPGRpdj59XGh0bWxy dGYge1xodG1scnRmMCB7XCpcaHRtbHRhZzY0fVxodG1scnRmIHtcaHRtbHJ0ZjAgXGh0bWxydGYg e1xodG1scnRmMCBUaGlzIGlzIG15IGZpcnN0IHBvc3QgdG8gdGhpcyBsaXN0Lg0Ke1wqXGh0bWx0 YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgVG8gaGVscCB5b3UgcmVwbHksIEkg c3RhcnRlZCBwcm9ncmFtbWluZyBkaWdpdGFsIGNvbXB1dGVycywgaW4gbWFjaGluZSBsYW5ndWFn ZSwgaW4gMTk1Ny4NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAg IFNpbmNlIHRoZW4gSSBoYXZlIGRvbmUgc2NpZW50aWZpYyBhbmQgZW5naW5lZXJpbmcgcHJvZ3Jh bW1pbmcgaW4gRk9SVFJBTiwgQkFTSUMsIFBhc2NhbCwgYW5kIHRoZW4gTW9kdWxhLTIgZm9yIG1h bnkgeWVhcnMuIEkgaGF2ZSBvbmx5IGxpbWl0ZWQgZmFtaWxpYXJpdHkgd2l0aCBDLg0Ke1wqXGh0 bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgTm93IHJldGlyZWQsIHJlY2Vu dGx5IEkgaGF2ZSBtb3ZlZCB0byBPYmVyb24gYW5kIG5vdyBDb21wb25lbnQgUGFzY2FsLCB3cml0 aW5nIHByb2dyYW1zIHRvIHN1cHBvcnQgaG9iYmllcy4NCntcKlxodG1sdGFnODQgJm5ic3A7fVxo dG1scnRmIFwnYTBcaHRtbHJ0ZjAgIFxodG1scnRmIH1caHRtbHJ0ZjAge1wqXGh0bWx0YWc3Mn1c aHRtbHJ0ZlxwYXJ9XGh0bWxydGYwDQoNCntcKlxodG1sdGFnMTA0IDwvZGl2Pn1caHRtbHJ0ZiB9 XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc5NiA8ZGl2Pn1caHRtbHJ0ZiB7XGh0bWxydGYwIA0Ke1wq XGh0bWx0YWcxMTIgPGJyPn1caHRtbHJ0ZiBccGFyDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzEw NCA8L2Rpdj59XGh0bWxydGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTYgPGRpdj59XGh0bWxy dGYge1xodG1scnRmMCB7XCpcaHRtbHRhZzY0fVxodG1scnRmIHtcaHRtbHJ0ZjAgXGh0bWxydGYg e1xodG1scnRmMCBJIGhhdmUgYSBwcm9ncmFtIEkgaGF2ZSBiZWVuIGV2b2x2aW5nIGZvciBzZXZl cmFsIHllYXJzLCB3aGljaCByZWFkcyBpbiBhIGRhdGFiYXNlIHdoaWNoIGlzIGluIGEgc3RydWN0 dXJlZCBBU0NJSSB0ZXh0IGZpbGUgdXNpbmcgYSB0aGlyZC1wYXJ0eSBkYXRhYmFzZSBzY2hlbWEu DQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwICBUaGUgcHJvZ3Jh bSBkZXZlbG9wcyBzZXZlcmFsIGluZGV4IGZpbGVzLCBwZXJmb3JtcyB2YXJpb3VzIHNvcnRpbmcg YW5kIGZpbHRlcmluZyBvcGVyYXRpb25zIG9uIHRoZXNlIGluZGV4ZXMsIGFuZCB0aGUgdXNlcyB0 aGUgbW9kaWZpZWQgaW5kZXhlcyB0byB3cml0ZSBvdXQgcmVwb3J0cyB1c2luZyB0aGUgc2FtZSBk YXRhYmFzZSBzY2hlbWEuDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxy dGYwICBUaGVyZSBhcmUgdGhyZWUgbWFpbiB0eXBlcyBvZiByZWNvcmRzLCBhbmQgSSB3YXMgYWJs ZSB0byB3cml0ZSB2ZXJ5IGVmZmljaWVudCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgcHJvY2VkdXJl cyBpbiBNb2R1bGEtMiBieSB3cml0aW5nIHRoZSByZWNvcmRzIGFzIHZhcmlhbnQgcmVjb3JkcyBv ZiBhIGJhc2ljIHR5cGUsIHRoZW4gaW5zdGFudGlhdGluZyB0aGUgcmVjb3JkcyBieSBwb2ludGVy cy4NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgIE15IGluZGV4 ZXMgd2VyZSBsaW5rZWQgbGlzdHMgb2YgdGhlIHBvaW50ZXJzLCBib3RoIGxpbmVhciBhbmQgYmlu YXJ5IHRyZWVzLCBhbmQgc28gSSBjb3VsZCBmaW5kLCBzb3J0LCBhbmQgZmlsdGVyIGVhY2ggb2Yg dGhlIHRocmVlIHR5cGVzIG9mIHJlY29yZHMgdXNpbmcgdGhlIHNhbWUgdmVyeSBlZmZpY2llbnQg Y29kZSwgYmVjYXVzZSBJIG1hbmlwdWxhdGVkIG9ubHkgdGhlIHBvaW50ZXJzJyAibmV4dC1yZWNv cmQiIHBvaW50ZXIgaW4gdGhlIGxpbmtlZCBsaXN0cywgbm90IG1vdmluZyBhbnkgcmVjb3JkcyBp biBtZW1vcnkuDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwICBc aHRtbHJ0ZiB9XGh0bWxydGYwIHtcKlxodG1sdGFnNzJ9XGh0bWxydGZccGFyfVxodG1scnRmMA0K DQp7XCpcaHRtbHRhZzEwNCA8L2Rpdj59XGh0bWxydGYgfVxodG1scnRmMCANCntcKlxodG1sdGFn OTYgPGRpdj59XGh0bWxydGYge1xodG1scnRmMCANCntcKlxodG1sdGFnMTEyIDxicj59XGh0bWxy dGYgXHBhcg0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWcxMDQgPC9kaXY+fVxodG1scnRmIH1caHRt bHJ0ZjAgDQp7XCpcaHRtbHRhZzk2IDxkaXY+fVxodG1scnRmIHtcaHRtbHJ0ZjAge1wqXGh0bWx0 YWc2NH1caHRtbHJ0ZiB7XGh0bWxydGYwIFxodG1scnRmIHtcaHRtbHJ0ZjAgQnV0IEkgYXBwYXJl bnRseSBJIGNhbid0IHVzZSB0aGlzIG1ldGhvZCBpbiBDb21wb25lbnQgUGFzY2FsIGJlY2F1c2Ug dmFyaWFudCByZWNvcmRzIGFyZSBub3QgYWxsb3dlZC4NCntcKlxodG1sdGFnODQgJm5ic3A7fVxo dG1scnRmIFwnYTBcaHRtbHJ0ZjAgIEkgdHJpZWQgZGVmaW5pbmcgYSBiYXNpYyByZWNvcmQgYXMg YW4gQUJTVFJBQ1QgdHlwZSwgdGhlbiBkZWZpbmluZyBlYWNoIG9mIG15IHRocmVlIHJlY29yZCB0 eXBlcyBhcyBleHRlbnNpb25zLg0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxo dG1scnRmMCAgSG93ZXZlciwgSSBjYW4ndCBpbnN0YW50aWF0ZSBhIHJlY29yZCBhcyBhIE5FVyhw b2ludGVyIHRvIGJhc2ljIHR5cGUpLCBhbmQgSSBjYW4ndCB1c2UgYSBzaW5nbGUgc29ydCByb3V0 aW5lIHdpdGggZWFjaCBvZiB0aGUgdGhyZWUgKHBvaW50ZXIgdG8gZXh0ZW5zaW9uIHR5cGUpIC0t IEkgbmVlZCB0aHJlZSBzZXBhcmF0ZSByb3V0aW5lcywgd2hpY2ggaXMgY2x1bXN5IGF0IGJlc3Qs IGFuZCBzZWVtcyBjb250cmFyeSB0byB0aGUgYmFzaWMgaW50ZW50IG9mIENvbXBvbmVudCBQYXNj YWwuDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwICBJIHRyaWVk IGRlZmluaW5nIHRoZSBiYXNpYyByZWNvcmQgdHlwZSBhcyBFWFRFTlNJQkxFLCBidXQgdGhhdCBt YWRlIG5vIGRpZmZlcmVuY2UuDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0 bWxydGYwICBJIGZvdW5kIGFuIG9ic2N1cmUgc2VjdGlvbiBpbiB0aGUgQ29tcG9uZW50IFBhc2Nh bCBkb2N1bWVudGF0aW9uIHRoYXQgc2FpZCB0aGF0IHVzaW5nIGEgUkVDT1JEIFt1bmlvbl0gc3lz dGVtIGZsYWcsIHdoaWNoIGFsbG93ZWQgYSAiQy10eXBlIiB1bmlvbiBkYXRhIHN0cnVjdHVyZSwg aXQgd2FzIHBvc3NpYmxlIHRvIHNpbXVsYXRlIFBhc2NhbC0gYW5kIE1vZHVsYS1zdHlsZSB2YXJp YW50IHJlY29yZHMsIGJ1dCB0aGUgZXhhbXBsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiB3aWxsIG5v dCBjb21waWxlIC0tIGl0IGdpdmVzIGFuICJpbnZhbGlkIHN5c3RlbSBmbGFnIiBlcnJvciBtZXNz YWdlIG9uIHRoZSBbdW5pb25dIGZsYWcuDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBc J2EwXGh0bWxydGYwICBcaHRtbHJ0ZiB9XGh0bWxydGYwIHtcKlxodG1sdGFnNzJ9XGh0bWxydGZc cGFyfVxodG1scnRmMA0KDQp7XCpcaHRtbHRhZzEwNCA8L2Rpdj59XGh0bWxydGYgfVxodG1scnRm MCANCntcKlxodG1sdGFnOTYgPGRpdj59XGh0bWxydGYge1xodG1scnRmMCANCntcKlxodG1sdGFn MTEyIDxicj59XGh0bWxydGYgXHBhcg0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWcxMDQgPC9kaXY+ fVxodG1scnRmIH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzk2IDxkaXY+fVxodG1scnRmIHtcaHRt bHJ0ZjAge1wqXGh0bWx0YWc2NH1caHRtbHJ0ZiB7XGh0bWxydGYwIFxodG1scnRmIHtcaHRtbHJ0 ZjAgQW55IHN1Z2dlc3Rpb25zIHdvdWxkIGJlIHdlbGNvbWUgYXQgdGhpcyBwb2ludC5caHRtbHJ0 ZiB9XGh0bWxydGYwIHtcKlxodG1sdGFnNzJ9XGh0bWxydGZccGFyfVxodG1scnRmMA0KDQp7XCpc aHRtbHRhZzEwNCA8L2Rpdj59XGh0bWxydGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTYgPGRp dj59XGh0bWxydGYge1xodG1scnRmMCB7XCpcaHRtbHRhZzY0fVxodG1scnRmIHtcaHRtbHJ0ZjAg XGh0bWxydGYge1xodG1scnRmMCBUaGFua3MsXGh0bWxydGYgfVxodG1scnRmMCB7XCpcaHRtbHRh ZzcyfVxodG1scnRmXHBhcn1caHRtbHJ0ZjANCg0Ke1wqXGh0bWx0YWcxMDQgPC9kaXY+fVxodG1s cnRmIH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzk2IDxkaXY+fVxodG1scnRmIHtcaHRtbHJ0ZjAg e1wqXGh0bWx0YWc2NH1caHRtbHJ0ZiB7XGh0bWxydGYwIFxodG1scnRmIHtcaHRtbHJ0ZjAgU3Rl dmUgVHJveQ0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGluZQ0KXGh0bWxydGYwIFxo dG1scnRmIH1caHRtbHJ0ZjAge1wqXGh0bWx0YWc3Mn1caHRtbHJ0ZlxwYXJ9XGh0bWxydGYwDQoN CntcKlxodG1sdGFnMTA0IDwvZGl2Pn1caHRtbHJ0ZiB9XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWcy NDggPC9zcGFuPn0NCntcKlxodG1sdGFnNTggPC9ib2R5Pn0NCntcKlxodG1sdGFnMjcgPC9odG1s Pn0NCntcKlxodG1sdGFnMyBccGFyIH0NCntcKlxodG1sdGFnNjQgPHA+fVxodG1scnRmIFxwYXIN ClxodG1scnRmMCBcaHRtbHJ0ZiB7XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfS0tLS0N CntcKlxodG1sdGFnNCBccGFyIH1caHRtbHJ0ZiAgXGh0bWxydGYwIFRvIHVuc3Vic2NyaWJlLCBz ZW5kIGEgbWVzc2FnZSB3aXRoIGJvZHkgIlNJR05PRkYgQkxBQ0tCT1giIHRvIExJU1RTRVJWQExJ U1RTLk9CRVJPTi5DSA0Ke1wqXGh0bWx0YWc0IFxwYXIgfVxodG1scnRmICBcaHRtbHJ0ZjAgXGh0 bWxydGZ9fQBvdyBJCmdldCBpdCEiIA= ----boundary-LibPST-iamunique-1661310720_-_--- Received on Thu Dec 31 2009 - 22:12:04 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:30:38 UTC