CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

'Match Brace' going screwy....

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

'Match Brace' going screwy....
PostPosted: Tue Apr 21, 2020 2:30 am     Reply with quote

Having an odd problem. Handling a large block of code and trying to
keep track of braces opening and closing.
Finding that the 'match brace' function in the IDE seems to have got
completely confused:
Code:

   switch (todo) { //attempt to match this brace
   case KEYBOARD:
      //draw a text keyboard with entry window - drops through to handler
      input_mode=HANDLE_BOARD; //flag to main code for keyboard input
      message[0]='\0'; //clear the input message
      tick=50;
      shift=FALSE; //start with shift off
      //now drop through to handler so this can be called to display and handle
   case HANDLE_BOARD:
      API_LIST();
      API_CLEAR(1,1,1); 
      Rv=make8(graphconfig.backcolour,2);
      Gv=make8(graphconfig.backcolour,1);
      Bv=make8(graphconfig.backcolour,0);
      API_CLEAR_COLOR_RGB(Rv,Gv,Bv);         
      API_COLOR_V(graphconfig.textcolour);
      colour = graphconfig.textcolour; //set colour
      API_CMD_FGCOLOR(graphconfig.buttoncolour);       
               
      API_TAG_MASK(TRUE);       
      if (shift)
      {
         API_CMD_KEYS(15, 130, 590, 50, (int16_t)GraphConfig.buttonfont, 0, "!\"£$%^&*()-+");
         API_CMD_KEYS(45, 190, 604, 50, GraphConfig.buttonfont, 0, "qwertyuiop{}");
         API_CMD_KEYS(65, 250, 604, 50, GraphConfig.buttonfont, 0, "asdfghjkl:@~");
         API_CMD_KEYS(85, 310, 540, 50, GraphConfig.buttonfont, 0, "|zxcvbnm<>?");
         API_TAG(13); //enter tag
         API_CMD_BUTTON(675,130, 110, 140, GraphConfig.buttonfont, 0, "Return");
         API_TAG(' '); //enter tag     
         API_CMD_BUTTON(135, 370, 370, 50, GraphConfig.buttonfont, 0, " ");
         API_TAG(8);
         API_CMD_BUTTON(609, 130, 50, 50, GraphConfig.buttonfont, 0, "<-"); 
         API_TAG(14); //Using SO as shift
         API_CMD_BUTTON(15, 370, 50, 50, GraphConfig.buttonfont, 0, "v");             
      } //It says this is the matching brace!....
      else
      {         
         API_CMD_KEYS(15, 130, 590, 50, GraphConfig.buttonfont, 0, "1234567890_=");
         API_CMD_KEYS(45, 190, 604, 50, GraphConfig.buttonfont, 0, "QWERTYUIOP[]");
         API_CMD_KEYS(65, 250, 604, 50, GraphConfig.buttonfont, 0, "ASDFGHJKL;'#");
         API_CMD_KEYS(85, 310, 540, 50, GraphConfig.buttonfont, 0, "\ZXCVBNM,./");
         API_TAG(13); //enter tag
         API_CMD_BUTTON(675,130, 110, 140, GraphConfig.buttonfont, 0, "Return");
         API_TAG(' '); //enter tag     
         API_CMD_BUTTON(135, 370, 370, 50, GraphConfig.buttonfont, 0, " ");
         API_TAG(8);
         API_CMD_BUTTON(609, 130, 50, 50, GraphConfig.buttonfont, 0, "<-");
         API_TAG(14); //Using SO as shift
         API_CMD_BUTTON(15, 370, 50, 50, GraphConfig.buttonfont, 0, "^");           
      }
      API_TAG_MASK(FALSE);         
      API_COLOR_V(RED);               
      API_CMD_TEXT(30, 40, 29, 0, prompttxt); 
      API_COLOR_V(graphconfig.textcolour);
      //Now need to draw the message box and show the current message     
      API_CMD_TEXT(400, 40, 29, 0, message);     
      API_DISPLAY();   // Instruct the graphics processor to show the list
      API_LIB_EndCoProList();   // Finish the co-processor list burst write
      API_CMD_SWAP();       
      API_LIB_AwaitCoProEmpty();  //and execute
      break;

If I highlight the opening brace after the switch statement, and select
'match brace', it selects the closing brace from the (shift) section.

The code actually compiles OK, so there is no brace mismatch.

I can't see any reason at all for the brace match to get confused, except
possibly the use of {} in the text for the buttons.

I am doing a 'drop through' on a switch case, but this is legitimate.

Has anyone seen this type of behaviour before?.
Any idea of what causes it?.

Going mad!... Smile
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Tue Apr 21, 2020 3:06 am     Reply with quote

Yes, it's this:

"qwertyuiop{}"

That is causing the issue. It's 'weird', it is seeing the second brace here
but not the first. Though they should be ignored, being inside the
inverted commas. So it loses count of the open/closed braces.....

If I 'remark' this line out, the match starts working OK.
temtronic



Joined: 01 Jul 2010
Posts: 9105
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Apr 21, 2020 12:36 pm     Reply with quote

weird... yup.
I was thinking maybe a 'hidden' extra { brace but..... it compiles fine, so the compiler is happy, just the 'matching braces counter' section of the IDE is upset.
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Tue Apr 21, 2020 12:44 pm     Reply with quote

Yes, it is successfully ignoring braces that are remmed out, but not in inverted commas. Will point this one out and hopefully it'll be fixed in a while.
What do you think of the 'best of' section. Suggestions please from everybody
on what to include... Very Happy
temtronic



Joined: 01 Jul 2010
Posts: 9105
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Apr 21, 2020 1:50 pm     Reply with quote

it is a GREAT idea, hopefully little personal 'gems' will be added quickly.
I'm stuck trying to decide HOW to move, 3, 3200# ( 1500KG) logs from a steep hill and not a) kill myself or b) destroy the 100 year old septic tank. Kinda preoccupied with that, being it's tomorrows job.....
I do like the Olympic Averaging for analog sensor readings to get rid of 'weird' numbers.....
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Wed Apr 22, 2020 12:43 am     Reply with quote

Be very careful...

Moving heavy things is worthy of making very sure that no part of
yourself is 'in the way'. Real care.
Levers, rollers, keeping hands and feet out of the way.

So repeat 'be careful'.

Hope you manage this without any problems.

New entry created for 'ADC filtering', with links to Olympic, and median
filters, and simple examples of basic averaging, and a rolling average.
temtronic



Joined: 01 Jul 2010
Posts: 9105
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Apr 23, 2020 11:32 am     Reply with quote

Hay Mr. T.
Well I still got all 10 fingers and toes ! Only took 4 hours. BIG problem is dealing with 'tame' fox that tried to make breakfast from my cat ! He almost bit my toe !
Too upset to concentrate to 'play with PICs'.....
My priorities have changed this 8:04 AM today.

Jay
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Thu Apr 23, 2020 12:17 pm     Reply with quote

I saw your post about nearly being bitten. Must admit 'wondered'... Smile
temtronic



Joined: 01 Jul 2010
Posts: 9105
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Apr 23, 2020 1:11 pm     Reply with quote

I'm in a semirural area and city don't care about gal feeding fox and racoons. fox has killed dozens of laying hens, nearly got my cat. they may be 'cute' but really they shouldn't get that close to humans....

on the plus side it's 61.7000*F in the greenhouse, oops now 61.4750*F, sigh. maybe having a PIC report every second is 'too much information' ?
I'm thinking I should average the averages over a minute. I used to just take 4 readings per minute in the good old' 16C84 days...
soonc



Joined: 03 Dec 2013
Posts: 215

View user's profile Send private message

Re: 'Match Brace' going screwy....
PostPosted: Thu Apr 30, 2020 9:32 am     Reply with quote

Ttelmah wrote:
Having an odd problem. Handling a large block of code and trying to
keep track of braces opening and closing.
Finding that the 'match brace' function in the IDE seems to have got
completely confused:
Code:

   switch (todo) { //attempt to match this brace
   case KEYBOARD:
      //draw a text keyboard with entry window - drops through to handler
      input_mode=HANDLE_BOARD; //flag to main code for keyboard input
      message[0]='\0'; //clear the input message
      tick=50;
      shift=FALSE; //start with shift off
      //now drop through to handler so this can be called to display and handle
   case HANDLE_BOARD:
      API_LIST();
      API_CLEAR(1,1,1); 
      Rv=make8(graphconfig.backcolour,2);
      Gv=make8(graphconfig.backcolour,1);
      Bv=make8(graphconfig.backcolour,0);
      API_CLEAR_COLOR_RGB(Rv,Gv,Bv);         
      API_COLOR_V(graphconfig.textcolour);
      colour = graphconfig.textcolour; //set colour
      API_CMD_FGCOLOR(graphconfig.buttoncolour);       
               
      API_TAG_MASK(TRUE);       
      if (shift)
      {
         API_CMD_KEYS(15, 130, 590, 50, (int16_t)GraphConfig.buttonfont, 0, "!\"£$%^&*()-+");
         API_CMD_KEYS(45, 190, 604, 50, GraphConfig.buttonfont, 0, "qwertyuiop{}");
         API_CMD_KEYS(65, 250, 604, 50, GraphConfig.buttonfont, 0, "asdfghjkl:@~");
         API_CMD_KEYS(85, 310, 540, 50, GraphConfig.buttonfont, 0, "|zxcvbnm<>?");
         API_TAG(13); //enter tag
         API_CMD_BUTTON(675,130, 110, 140, GraphConfig.buttonfont, 0, "Return");
         API_TAG(' '); //enter tag     
         API_CMD_BUTTON(135, 370, 370, 50, GraphConfig.buttonfont, 0, " ");
         API_TAG(8);
         API_CMD_BUTTON(609, 130, 50, 50, GraphConfig.buttonfont, 0, "<-"); 
         API_TAG(14); //Using SO as shift
         API_CMD_BUTTON(15, 370, 50, 50, GraphConfig.buttonfont, 0, "v");             
      } //It says this is the matching brace!....
      else
      {         
         API_CMD_KEYS(15, 130, 590, 50, GraphConfig.buttonfont, 0, "1234567890_=");
         API_CMD_KEYS(45, 190, 604, 50, GraphConfig.buttonfont, 0, "QWERTYUIOP[]");
         API_CMD_KEYS(65, 250, 604, 50, GraphConfig.buttonfont, 0, "ASDFGHJKL;'#");
         API_CMD_KEYS(85, 310, 540, 50, GraphConfig.buttonfont, 0, "\ZXCVBNM,./");
         API_TAG(13); //enter tag
         API_CMD_BUTTON(675,130, 110, 140, GraphConfig.buttonfont, 0, "Return");
         API_TAG(' '); //enter tag     
         API_CMD_BUTTON(135, 370, 370, 50, GraphConfig.buttonfont, 0, " ");
         API_TAG(8);
         API_CMD_BUTTON(609, 130, 50, 50, GraphConfig.buttonfont, 0, "<-");
         API_TAG(14); //Using SO as shift
         API_CMD_BUTTON(15, 370, 50, 50, GraphConfig.buttonfont, 0, "^");           
      }
      API_TAG_MASK(FALSE);         
      API_COLOR_V(RED);               
      API_CMD_TEXT(30, 40, 29, 0, prompttxt); 
      API_COLOR_V(graphconfig.textcolour);
      //Now need to draw the message box and show the current message     
      API_CMD_TEXT(400, 40, 29, 0, message);     
      API_DISPLAY();   // Instruct the graphics processor to show the list
      API_LIB_EndCoProList();   // Finish the co-processor list burst write
      API_CMD_SWAP();       
      API_LIB_AwaitCoProEmpty();  //and execute
      break;

If I highlight the opening brace after the switch statement, and select
'match brace', it selects the closing brace from the (shift) section.

The code actually compiles OK, so there is no brace mismatch.

I can't see any reason at all for the brace match to get confused, except
possibly the use of {} in the text for the buttons.

I am doing a 'drop through' on a switch case, but this is legitimate.

Has anyone seen this type of behaviour before?.
Any idea of what causes it?.

Going mad!... Smile

Here is a tip I've used for many years...
Code:

SomeCode()
{
  int das;
  das=0;
  das+=2;
} // end SomeCode()


Seems silly when the lines of code are all on one page, but when the braces span 2 or 3 pages of code it's easier to search for "end SomeCode" to find the match.

For really screwy situations:
Open the file in Visual Studio it has the best brace matching, VS2017 is the best..
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Thu Apr 30, 2020 12:26 pm     Reply with quote

The marker is just as dependant on you keeping it in balance as the
braces. If you are deleting a lot of code, it is equally easy to end up
with a start and no tail marker or a tail and no start.
This code has over 70 cases. A section was deleted and I needed
to check that I had kept the braces balanced.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group