Hi dears,

I'm trying to code a table to access strings. My target is produce a
routine to print menus in dual language.

*I wrote:*

const char *menu_str[][] = {
  { "text1 lang1", "text1 lang2" },
  { "text2 lang1", "text2 lang2" },
  { "textN lang1", "textN lang2" },
  { 0,0 }
  };

*results:*
idata
_menu_str db LOW(__str_0), HIGH(__str_0), UPPER(__str_0), LOW(__str_1),
HIGH(__str_1), UPPER(__str_1), LOW(__str_2), HIGH(__str_2), UPPER(__str_2),
LOW(__str_3), HIGH(__str_3), UPPER(__str_3)
 db LOW(__str_4), HIGH(__str_4), UPPER(__str_4), LOW(__str_5),
HIGH(__str_5), UPPER(__str_5), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
; I code from now on!
; ; Starting pCode block
__str_0:
DB 0x74, 0x65, 0x78, 0x74, 0x31, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x31, 0x00
; ; Starting pCode block
__str_1:
DB 0x74, 0x65, 0x78, 0x74, 0x31, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x32, 0x00
; ; Starting pCode block
__str_2:
DB 0x74, 0x65, 0x78, 0x74, 0x32, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x31, 0x00
; ; Starting pCode block
__str_3:
DB 0x74, 0x65, 0x78, 0x74, 0x32, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x32, 0x00
; ; Starting pCode block
__str_4:
DB 0x74, 0x65, 0x78, 0x74, 0x4e, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x31, 0x00
; ; Starting pCode block
__str_5:
DB 0x74, 0x65, 0x78, 0x74, 0x4e, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x32, 0x00

I'd like to know if is there any way to produce not a idata, but a CODE
sector to _menu_str constant, once all strings are constants and the table
to access it is a constant too, and I don't need to expend RAM memory to
this.

I did some alternate code to produce what I want:

const char menu_000 [] = "text1 lang1";
const char menu_001 [] = "text1 lang2";
const char menu_010 [] = "text2 lang1";
const char menu_011 [] = "text2 lang2";
const char menu_020 [] = "textN lang1";
const char menu_021 [] = "textN lang2";


void menu_str(void) __naked {
  __asm
  DW _menu_000, _menu_001
  DW _menu_010, _menu_011
  DW _menu_020, _menu_021
  DW 0, 0
  __endasm;
}

so, it results exactly I want:

S_config__menu_str code
_menu_str:
DW _menu_000, _menu_001
DW _menu_010, _menu_011
 DW _menu_020, _menu_021
DW _menu_090, _menu_091
 DW 0, 0
; ; Starting pCode block for Ival
 code
__menu_000:
DB 0x74, 0x65, 0x78, 0x74, 0x31, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x31, 0x00
; ; Starting pCode block for Ival
__menu_001:
DB 0x74, 0x65, 0x78, 0x74, 0x31, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x32, 0x00
; ; Starting pCode block for Ival
__menu_010:
DB 0x74, 0x65, 0x78, 0x74, 0x32, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x31, 0x00
; ; Starting pCode block for Ival
__menu_011:
DB 0x74, 0x65, 0x78, 0x74, 0x32, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x32, 0x00
; ; Starting pCode block for Ival
__menu_020:
DB 0x74, 0x65, 0x78, 0x74, 0x4e, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x31, 0x00
; ; Starting pCode block for Ival
__menu_021:
DB 0x74, 0x65, 0x78, 0x74, 0x4e, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x32, 0x00


Then, at de header file "I Lied" about the symbols, declaring:

extern const unsigned int menus_strs[5][2];

And IT WORKS... ok, but I'd like to this only in C language to future
compatibility.

Regards,

Antonio
------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to