From: Stephen Leake <stephen.leake@gsfc.nasa.gov>
Subject: Re: Variable-length arrays (from a C programmer)
Date: 1998/04/24
Date: 1998-04-24T00:00:00+00:00 [thread overview]
Message-ID: <3540BDDA.1A0E@gsfc.nasa.gov> (raw)
In-Reply-To: 353F9B75.3019A7A4@AlliedSignal.com
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 <stdio.h>
>
> // 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
> --------------------------------------
next prev parent reply other threads:[~1998-04-24 0:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-04-23 0:00 Variable-length arrays (from a C programmer) Paul T. McAlister
1998-04-24 0:00 ` Stephen Leake [this message]
1998-04-24 0:00 ` Anonymous
1998-04-24 0:00 ` Stephen Leake
1998-04-28 0:00 ` Matthew Heaney
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox