Author Topic: _str array - Invalid Expression?  (Read 8020 times)

Ivan N. Zlatev

  • Community Member
  • Posts: 87
  • Hero Points: 5
_str array - Invalid Expression?
« on: February 19, 2008, 05:22:30 PM »
I have the following Slick-C code to generate changelog entries for me. The issue I am having is that I keep getting an Invalid Expression error at _str changeLogFileNames[] = { "Changelog", "ChangeLog" };

What am I doing wrong?

Code: [Select]
// MIT/X11 Licensed
//

#define NAME "Ivan N. Zlatev"
#define EMAIL "----"

_command void insert_changelog_entry () name_info(',')
{
   _str changeLogFileNames[] = { "Changelog", "ChangeLog" };
   _str changeLogFileName = null;

   for (int i=0; i < changeLogFileNames._length (); i++) {
      if (file_exists (changeLogFileNames[i]) {
         changeLogFileName = changeLogFileNames[i];
         break;
      }
   }

   if (changeLogFileName != null) {
      _str currentFileName = get_current_buffer_filename ();
      edit (changeLogFileName);
      _undo ('S');
      _GoToROffset (0);
      _insert_text (get_changelog_date () :+ "  " :+ NAME :+ "  " :+ EMAIL);
      _insert_text (p_newline :+ p_newline);
      _insert_text ("\t* " :+ currentFileName :+ ": ");

      push_bookmark ();
      _insert_text (p_newline :+ p_newline);
      pop_bookmark ();
   }
}

static _str get_current_buffer_filename ()
{
   return strip_filename (p_buf_name,'DP');
}

// formats to yyyy-mm-dd
//
static _str get_changelog_date ()
{
   _str date = _date ("U"); // mm/dd/yyyy
   _str month, day, year;
   int day_pos, year_pos;

   if (strcmp (substr (date, 2, 1), "/") == 0) { // single digit month
      month = "0" :+ substr (date, 1, 1);
      day_pos = 3;
   } else {
      month = substr (date, 1, 2);
      day_pos = 4;
   }

   if (strcmp (substr (date, day_pos + 1, 1), "/") == 0) { // single digit day
      day = "0" :+ substr (date, day_pos, 1);
      year_pos = day_pos + 2;
   } else {
      day = substr (date, day_pos, 2);
      year_pos = day_pos + 3;
   }

   year = substr (date, year_pos, 4);

   return (year :+ "-" :+ month :+ "-" :+ day);
}
« Last Edit: February 19, 2008, 05:29:59 PM by Ivan N. Zlatev »

hs2

  • Senior Community Member
  • Posts: 2762
  • Hero Points: 292
Re: _str array - Invalid Expression?
« Reply #1 on: February 19, 2008, 06:07:17 PM »
Make the array definition static/global (outside insert_changelog_entry) or use e.g. this to init the array dynamically:
Code: [Select]
   _str changeLogFileNames[];
    changeLogFileNames[ changeLogFileNames._length() ] = "Changelog1";
    changeLogFileNames[ changeLogFileNames._length() ] = "Changelog2";
HS2

Ivan N. Zlatev

  • Community Member
  • Posts: 87
  • Hero Points: 5
Re: _str array - Invalid Expression?
« Reply #2 on: February 19, 2008, 06:15:03 PM »
HS2,

I moved the array out of the method ...
Code: [Select]
_str changeLogFileNames[] = { "Changelog", "ChangeLog" };

_command void insert_changelog_entry () name_info(',')
{
   _str changeLogFileName = null;

   for (int i=0; i < changeLogFileNames._length (); i++) {

But now I get an Invalid Expression on the for line  ???

hs2

  • Senior Community Member
  • Posts: 2762
  • Hero Points: 292
Re: _str array - Invalid Expression?
« Reply #3 on: February 19, 2008, 06:20:16 PM »
This is curr. not supported by Slick-C:
Code: [Select]
for (int i=0, ... You 'd need to define int i; outside the for loop.

Good luck,
HS2

Ivan N. Zlatev

  • Community Member
  • Posts: 87
  • Hero Points: 5
Re: _str array - Invalid Expression?
« Reply #4 on: February 19, 2008, 06:50:50 PM »
Thanks very much HS2.