~ubuntu-branches/ubuntu/quantal/avra/quantal

« back to all changes in this revision

Viewing changes to macro.c

  • Committer: Bazaar Package Importer
  • Author(s): Tobias Klauser
  • Date: 2010-01-20 15:24:49 UTC
  • mfrom: (1.1.5 upstream) (4.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20100120152449-mpgx1ibvci0njzta
Tags: 1.2.3a-1
* New upstream release (closes: #507443).
  - Fixes address range error (closes: #527978).
* Install register and bit-name definitions from AVR000.zip.
* Update standards version to 3.8.3.
* Use new Homepage control field.
* Add Vcs-Git and Vcs-Browser control fields.
* Change maintainer's email address.

Show diffs side-by-side

added added

removed removed

Lines of Context:
98
98
                }
99
99
                get_next_token(name, TERM_END);
100
100
 
101
 
                for(i = 0; !IS_END(name[i]); i++) {     
 
101
                for(i = 0; !IS_END_OR_COMMENT(name[i]); i++) {  
102
102
                        if(!IS_LABEL(name[i])) {
103
103
                                print_msg(pi, MSGTYPE_ERROR, "illegal characters used in macro name '%s'",name);
104
104
                                return(False);
128
128
        }
129
129
        else {  /* pi->pass == PASS_2 */
130
130
                if(pi->list_line && pi->list_on) {
131
 
                        fprintf(pi->list_file, "          %s", pi->list_line);
 
131
                        fprintf(pi->list_file, "          %s\n", pi->list_line);
132
132
                        pi->list_line = NULL;
133
133
                }
134
134
                // reset macro label running numbers
145
145
 
146
146
        loopok = True;
147
147
        while(loopok) {
148
 
                if(fgets(pi->fi->buff, LINEBUFFER_LENGTH, pi->fi->fp)) {
 
148
                if(fgets_new(pi,pi->fi->buff, LINEBUFFER_LENGTH, pi->fi->fp)) {
149
149
                        pi->fi->line_number++;
150
150
                        i = 0;
151
 
                        while(IS_HOR_SPACE(pi->fi->buff[i]) && !IS_END(pi->fi->buff[i])) i++;
 
151
                        while(IS_HOR_SPACE(pi->fi->buff[i]) && !IS_END_OR_COMMENT(pi->fi->buff[i])) i++;
152
152
                        if(pi->fi->buff[i] == '.') {
153
153
                          i++;
154
154
                          if(!nocase_strncmp(&pi->fi->buff[i], "endm", 4))
159
159
                        if(pi->pass == PASS_1) {
160
160
                                if(loopok) {
161
161
                                        i = 0; /* find start of line */
162
 
                                        while(IS_HOR_SPACE(pi->fi->buff[i]) && !IS_END(pi->fi->buff[i])) {
 
162
                                        while(IS_HOR_SPACE(pi->fi->buff[i]) && !IS_END_OR_COMMENT(pi->fi->buff[i])) {
163
163
                                        i++;
164
164
                                        }
165
165
                                        start = i;
166
166
                                        /* find end of line */
167
 
                                        while(!IS_END(pi->fi->buff[i]) && (IS_LABEL(pi->fi->buff[i]) || pi->fi->buff[i] == ':')) {
 
167
                                        while(!IS_END_OR_COMMENT(pi->fi->buff[i]) && (IS_LABEL(pi->fi->buff[i]) || pi->fi->buff[i] == ':')) {
168
168
                                        i++;
169
169
                                        }
170
170
                                        if(pi->fi->buff[i-1] == ':' && (pi->fi->buff[i-2] == '%' 
171
 
                                        && (IS_HOR_SPACE(pi->fi->buff[i]) || IS_END(pi->fi->buff[i])))) {
 
171
                                        && (IS_HOR_SPACE(pi->fi->buff[i]) || IS_END_OR_COMMENT(pi->fi->buff[i])))) {
172
172
                                                if(macro->first_label) {
173
173
                                                        for(macro_label = macro->first_label; macro_label->next; macro_label=macro_label->next){}
174
174
                                        macro_label->next = calloc(1,sizeof(struct macro_label));
202
202
                        }
203
203
                        else if(pi->fi->buff && pi->list_file && pi->list_on) {
204
204
                                if(pi->fi->buff[i] == ';')
205
 
                                        fprintf(pi->list_file, "         %s", pi->fi->buff);
 
205
                                        fprintf(pi->list_file, "         %s\n", pi->fi->buff);
206
206
                                else
207
 
                                        fprintf(pi->list_file, "          %s", pi->fi->buff);
 
207
                                        fprintf(pi->list_file, "          %s\n", pi->fi->buff);
208
208
                        }
209
209
                }
210
210
                else {
451
451
          }
452
452
        }
453
453
        if(pi->list_line && pi->list_on) {
454
 
          fprintf(pi->list_file, "C:%06x   +  %s", pi->cseg_addr, pi->list_line);
 
454
          fprintf(pi->list_file, "C:%06x   +  %s\n", pi->cseg_addr, pi->list_line);
455
455
          pi->list_line = NULL;
456
456
        }
457
457
  }
487
487
                strcpy(&buff[c-1],itoa(macro_label->running_number, tmp, 10));
488
488
                strcat(buff, ":\0");
489
489
          }
490
 
      else if(IS_HOR_SPACE(temp[c]) || IS_END(temp[c])) { /* it is a jump to a macro defined label */
 
490
      else if(IS_HOR_SPACE(temp[c]) || IS_END_OR_COMMENT(temp[c]))      { /* it is a jump to a macro defined label */
491
491
        strcpy(buff,pi->macro_line->line);
492
492
        temp = strstr(buff, macro_label->label);
493
493
        i = temp - buff + strlen(macro_label->label);
526
526
    ok = parse_line(pi, buff);
527
527
    if(ok) {
528
528
          if((pi->pass == PASS_2) && pi->list_line && pi->list_on)
529
 
            fprintf(pi->list_file, "         %s", pi->list_line);
 
529
            fprintf(pi->list_file, "         %s\n", pi->list_line);
530
530
          if(pi->error_count >= pi->max_errors) {
531
531
            print_msg(pi, MSGTYPE_MESSAGE, "Maximum error count reached. Exiting...");
532
532
            ok = False;