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.1 required=5.0 tests=BAYES_00, PP_MIME_FAKE_ASCII_TEXT,XPRIO autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII X-Google-Thread: 103376,18aea7ce90e03321,start X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2001-07-12 02:02:19 PST Path: archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!192.71.180.34!newsfeed1.swip.net!swipnet!nike.foi.se!mercur.foa.se!not-for-mail From: "Magnus Sparf" Newsgroups: comp.lang.ada Subject: Direct_IO problem -- generic package problem Date: Thu, 12 Jul 2001 10:42:10 +0200 Organization: National Defence Research Establishment, Sweden Message-ID: <9ijobe$qb4$1@mercur.foa.se> NNTP-Posting-Host: dhcp-062-126.foi.se X-Trace: mercur.foa.se 994927790 26980 150.227.62.126 (12 Jul 2001 08:49:50 GMT) X-Complaints-To: usenet@foa.se NNTP-Posting-Date: Thu, 12 Jul 2001 08:49:50 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Xref: archiver1.google.com comp.lang.ada:9857 Date: 2001-07-12T10:42:10+02:00 List-Id: I�m new to ADA (hopefully picking up track fast) and this summer I have the task of converting an old Ada83 application (VAX environment) to Ada95 (PC environment). In the very heart of this application there is a homemade database that compiles without problem in the VAX environment. When I compile it on GNAT 3.13p in the PC environment. I get the following error: db.adb:58:49: actual for "Element_Type" must be a definite subtype :::(the last line in the extract) Extract of code (DB is a generic package and used to create a lot of different databases): ---------------------------------------------------------------------------- ----------- package body DB is type FILLED_TABLES is array (SMALL_NAT range <>) of BOOLEAN; pragma pack (FILLED_TABLES); type LINE_COL is record X_V : SMALL_NAT := 1; Y_V : SMALL_NAT := 1; end record; type TABLE_VALUES is array (SMALL_NAT range <>) of LINE_COL; type M_T is array (SMALL_NAT range <>, SMALL_NAT range <>) of ITEM; type B_T is array (SMALL_NAT range <>, SMALL_NAT range <>) of BOOLEAN; type MATRIX (MAX : SMALL_NAT; FIRST_RECORD : BOOLEAN; ROWS_FIRST : SMALL_NAT; ROWS_LAST : SMALL_NAT; COLUMNS_FIRST : SMALL_NAT; COLUMNS_LAST : SMALL_NAT) is record case FIRST_RECORD is when TRUE => -- description of entire file with tables FILLED : FILLED_TABLES(2..MAX) := (others => FALSE); DISCRIMANT_VALUES : TABLE_VALUES(2..MAX) := (others => (1, 1)); when FALSE => -- tables VALUE : M_T (ROWS_FIRST..ROWS_LAST, COLUMNS_FIRST..COLUMNS_LAST); ITEM_PUT : B_T (ROWS_FIRST..ROWS_LAST, COLUMNS_FIRST..COLUMNS_LAST); RAD_INDEX : R_T (ROWS_FIRST..ROWS_LAST); COLUMN_INDEX : C_T (COLUMNS_FIRST..COLUMNS_LAST); end case; end record; package MY_DIRECT_IO is new Ada.DIRECT_IO(MATRIX); ---------------------------------------------------------------------------- ------------- If I give type MATRIX default values it compiles with warnings about Storage constraints errors in runtime (that also occurs...). MATRIX is used at a lot of other places further down. Are there any quick (not dirty) solutions to this problem? My own ideas is to create separate databases for all eight databases that uses DB (CAR_DB, BOAT_DB, HOUSE_DB...) with specified values for MATRIX, but that seems like a lot of work and not very objectoriented. I�ve read the GNAT RM about the problem (Ada95 <-> Ada83) "Indefinite subtypes in generics" but don`t seem to understand, especially when there�s a standard package involved. All you experienced ones out there leave the "Ada is dead"-discussions and pleaseeeeee help me out... Magnus Sparf magnus-s@dsv.su.se