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=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,6edeb2a39724bbc0 X-Google-Attributes: gid103376,public From: Stephen Leake Subject: Re: Variable-length arrays (from a C programmer) Date: 1998/04/24 Message-ID: <3540BDDA.1A0E@gsfc.nasa.gov>#1/1 X-Deja-AN: 347338112 Content-Transfer-Encoding: 7bit References: <353F9B75.3019A7A4@AlliedSignal.com> Content-Type: text/plain; charset=us-ascii Organization: NASA Goddard Space Flight Center -- Greenbelt, Maryland USA Mime-Version: 1.0 Reply-To: stephen.leake@gsfc.nasa.gov Newsgroups: comp.lang.ada Date: 1998-04-24T00:00:00+00:00 List-Id: Paul T. McAlister wrote: > > 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 > --------------------------------------