From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,6edeb2a39724bbc0,start X-Google-Attributes: gid103376,public From: "Paul T. McAlister" Subject: Variable-length arrays (from a C programmer) Date: 1998/04/23 Message-ID: <353F9B75.3019A7A4@AlliedSignal.com>#1/1 X-Deja-AN: 347082309 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Organization: AlliedSignal Inc. Mime-Version: 1.0 Newsgroups: comp.lang.ada Date: 1998-04-23T00:00:00+00:00 List-Id: I have an application where I will be displaying a number of different screens full of text messages. I want these messages and screens to be data table driven. In "C" (see example), I can define an array of messages for each page, then define an array of pages for the whole thing. I don't have to worry about string length or number of items defined in the arrays, the compiler handles all of that for me. I have not been able to figure out how to do the equivalent thing in Ada. I don't know how to define strings without setting the length to the maximum length string I will have, which wastes a lot of space. I think I know how to define the variable length arrays for the messages for each screen, but I don't know how to define an array type of these arrays of string for each page (since they are different types because they are different lengths). I am using Ada83. I know this is a lengthy question, but any help would be greatly appreciated. - - - - - - - - - - - - #include // structure for each message typedef struct { char *text; // pointer to message text int xPos; // x position on screen int yPos; // y position on screen } MSG_STRUCT; // structure for each page typedef struct { MSG_STRUCT *msg; // pointer to array of message structures int num_msgs; // number of message on this page } PAGE_STRUCT; // page 1 messages MSG_STRUCT page1[] = { {"Greetings Earthling", 0, 0} , {"Take me to your leader", 1, 0} }; // page 2 messages MSG_STRUCT page2[] = { {"Screen 2", 0, 0} , {"This text is some lines farther down", 5, 0} , {"and this is even FARTHER down", 10, 0} }; // page 3 messages MSG_STRUCT page3[] = { {"This is the third screen", 0, 0} , {"and by now you should be getting", 1, 10} , {"the point of what it is", 2, 12} , {"I am trying to do!!", 3, 14} }; // messages for all pages PAGE_STRUCT pages[] = { {page1, (sizeof(page1) / sizeof(page1[0]))} , {page2, (sizeof(page2) / sizeof(page2[0]))} , {page3, (sizeof(page3) / sizeof(page3[0]))} }; void main() { int iPage; int iMsg; int nPage; // find number of pages nPage = sizeof(pages) / sizeof(pages[0]); // for each page for (iPage = 0; iPage < nPage; ++iPage) { printf("\n"); // put blank line between pages // for each message for (iMsg = 0; iMsg < pages[iPage].num_msgs; ++iMsg) { printf(pages[iPage].msg[iMsg].text); // print message printf("\n"); // terminate line } } } --PTM 8-) -------------------------------------- Paul McAlister Paul.McAlister@AlliedSignal.com 913.768.2238 --------------------------------------