Peter Cooper
/
diags
test code for our MBED board
breakup.c@1:6877bb99aa17, 2011-05-04 (annotated)
- Committer:
- lolpcc
- Date:
- Wed May 04 08:30:52 2011 +0000
- Revision:
- 1:6877bb99aa17
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lolpcc | 1:6877bb99aa17 | 1 | #include "mbed.h" |
lolpcc | 1:6877bb99aa17 | 2 | |
lolpcc | 1:6877bb99aa17 | 3 | /* |
lolpcc | 1:6877bb99aa17 | 4 | int breakup(char *, char *[], char); |
lolpcc | 1:6877bb99aa17 | 5 | void breakup_sub(char *, char *,char,char); |
lolpcc | 1:6877bb99aa17 | 6 | */ |
lolpcc | 1:6877bb99aa17 | 7 | |
lolpcc | 1:6877bb99aa17 | 8 | void breakup_sub(char *line,char *entery_point,char c,char d) |
lolpcc | 1:6877bb99aa17 | 9 | { |
lolpcc | 1:6877bb99aa17 | 10 | char *point,*pt2; |
lolpcc | 1:6877bb99aa17 | 11 | |
lolpcc | 1:6877bb99aa17 | 12 | point = entery_point; |
lolpcc | 1:6877bb99aa17 | 13 | |
lolpcc | 1:6877bb99aa17 | 14 | point++; |
lolpcc | 1:6877bb99aa17 | 15 | pt2 = point; |
lolpcc | 1:6877bb99aa17 | 16 | point --; |
lolpcc | 1:6877bb99aa17 | 17 | while (*pt2!='\0') { |
lolpcc | 1:6877bb99aa17 | 18 | *point = *pt2; |
lolpcc | 1:6877bb99aa17 | 19 | point ++; |
lolpcc | 1:6877bb99aa17 | 20 | pt2 ++; |
lolpcc | 1:6877bb99aa17 | 21 | } |
lolpcc | 1:6877bb99aa17 | 22 | *point = *pt2; |
lolpcc | 1:6877bb99aa17 | 23 | } |
lolpcc | 1:6877bb99aa17 | 24 | |
lolpcc | 1:6877bb99aa17 | 25 | int breakup(char *string,char *p[],char c) |
lolpcc | 1:6877bb99aa17 | 26 | { |
lolpcc | 1:6877bb99aa17 | 27 | char *pt,*pt1; |
lolpcc | 1:6877bb99aa17 | 28 | char cc,ccc; |
lolpcc | 1:6877bb99aa17 | 29 | int cnt = 0; |
lolpcc | 1:6877bb99aa17 | 30 | int number = 0; |
lolpcc | 1:6877bb99aa17 | 31 | int flag = 0; |
lolpcc | 1:6877bb99aa17 | 32 | int last = 0; |
lolpcc | 1:6877bb99aa17 | 33 | int just = 0; |
lolpcc | 1:6877bb99aa17 | 34 | int length = strlen(string); |
lolpcc | 1:6877bb99aa17 | 35 | |
lolpcc | 1:6877bb99aa17 | 36 | pt = string; |
lolpcc | 1:6877bb99aa17 | 37 | p[number] = pt; |
lolpcc | 1:6877bb99aa17 | 38 | number++; |
lolpcc | 1:6877bb99aa17 | 39 | |
lolpcc | 1:6877bb99aa17 | 40 | while (cnt != length + 1) { |
lolpcc | 1:6877bb99aa17 | 41 | cc = *pt; |
lolpcc | 1:6877bb99aa17 | 42 | if (cc == '\0') |
lolpcc | 1:6877bb99aa17 | 43 | return(number); |
lolpcc | 1:6877bb99aa17 | 44 | /* this section of code will need sorting, so we don't have to use a space |
lolpcc | 1:6877bb99aa17 | 45 | char, we should move the ramainder of the buffer down one charactor |
lolpcc | 1:6877bb99aa17 | 46 | */ |
lolpcc | 1:6877bb99aa17 | 47 | if (cc=='\\') { |
lolpcc | 1:6877bb99aa17 | 48 | pt1 = pt; /* save the current pointer */ |
lolpcc | 1:6877bb99aa17 | 49 | pt++; |
lolpcc | 1:6877bb99aa17 | 50 | ccc = *pt; |
lolpcc | 1:6877bb99aa17 | 51 | if (ccc=='"') { |
lolpcc | 1:6877bb99aa17 | 52 | pt--; |
lolpcc | 1:6877bb99aa17 | 53 | breakup_sub(string,pt,cc,ccc); |
lolpcc | 1:6877bb99aa17 | 54 | pt = pt1; |
lolpcc | 1:6877bb99aa17 | 55 | } else { |
lolpcc | 1:6877bb99aa17 | 56 | pt--; |
lolpcc | 1:6877bb99aa17 | 57 | pt = pt1; /* restore the current pointer */ |
lolpcc | 1:6877bb99aa17 | 58 | } |
lolpcc | 1:6877bb99aa17 | 59 | } |
lolpcc | 1:6877bb99aa17 | 60 | if (flag == 0) { |
lolpcc | 1:6877bb99aa17 | 61 | switch (cc) { |
lolpcc | 1:6877bb99aa17 | 62 | case '"' : |
lolpcc | 1:6877bb99aa17 | 63 | flag = 1; |
lolpcc | 1:6877bb99aa17 | 64 | case '\n' : |
lolpcc | 1:6877bb99aa17 | 65 | case '\t' : |
lolpcc | 1:6877bb99aa17 | 66 | case ' ' : |
lolpcc | 1:6877bb99aa17 | 67 | if (just==1) { |
lolpcc | 1:6877bb99aa17 | 68 | /* move the current pointer along */ |
lolpcc | 1:6877bb99aa17 | 69 | pt = pt + 1; |
lolpcc | 1:6877bb99aa17 | 70 | p[number] = pt; |
lolpcc | 1:6877bb99aa17 | 71 | pt = pt - 1; |
lolpcc | 1:6877bb99aa17 | 72 | } else { |
lolpcc | 1:6877bb99aa17 | 73 | /* add the current point to the array */ |
lolpcc | 1:6877bb99aa17 | 74 | just = 1; |
lolpcc | 1:6877bb99aa17 | 75 | *pt = '\0'; |
lolpcc | 1:6877bb99aa17 | 76 | pt++; |
lolpcc | 1:6877bb99aa17 | 77 | p[number] = pt; |
lolpcc | 1:6877bb99aa17 | 78 | pt--; |
lolpcc | 1:6877bb99aa17 | 79 | } |
lolpcc | 1:6877bb99aa17 | 80 | if (flag == 1) { |
lolpcc | 1:6877bb99aa17 | 81 | number ++; |
lolpcc | 1:6877bb99aa17 | 82 | just = 0; |
lolpcc | 1:6877bb99aa17 | 83 | } |
lolpcc | 1:6877bb99aa17 | 84 | break; |
lolpcc | 1:6877bb99aa17 | 85 | default : |
lolpcc | 1:6877bb99aa17 | 86 | if (just == 1) { |
lolpcc | 1:6877bb99aa17 | 87 | just = 0; |
lolpcc | 1:6877bb99aa17 | 88 | number ++; |
lolpcc | 1:6877bb99aa17 | 89 | } |
lolpcc | 1:6877bb99aa17 | 90 | break; |
lolpcc | 1:6877bb99aa17 | 91 | } |
lolpcc | 1:6877bb99aa17 | 92 | if (cc == c) { /* test for the user defined char */ |
lolpcc | 1:6877bb99aa17 | 93 | just = 1; |
lolpcc | 1:6877bb99aa17 | 94 | *pt = '\0'; |
lolpcc | 1:6877bb99aa17 | 95 | pt++; |
lolpcc | 1:6877bb99aa17 | 96 | p[number] = pt; |
lolpcc | 1:6877bb99aa17 | 97 | pt--; |
lolpcc | 1:6877bb99aa17 | 98 | } |
lolpcc | 1:6877bb99aa17 | 99 | } else { |
lolpcc | 1:6877bb99aa17 | 100 | if ((last == 0) & (cc =='"')) { /* close of quoate */ |
lolpcc | 1:6877bb99aa17 | 101 | flag = 0; |
lolpcc | 1:6877bb99aa17 | 102 | just = 1; |
lolpcc | 1:6877bb99aa17 | 103 | *pt = '\0'; |
lolpcc | 1:6877bb99aa17 | 104 | pt++; |
lolpcc | 1:6877bb99aa17 | 105 | p[number] = pt; |
lolpcc | 1:6877bb99aa17 | 106 | pt--; |
lolpcc | 1:6877bb99aa17 | 107 | } else if ((flag == 1) & (last == 1) & (cc!='\\')) |
lolpcc | 1:6877bb99aa17 | 108 | last = 0; |
lolpcc | 1:6877bb99aa17 | 109 | } |
lolpcc | 1:6877bb99aa17 | 110 | pt++; |
lolpcc | 1:6877bb99aa17 | 111 | cnt++; |
lolpcc | 1:6877bb99aa17 | 112 | } |
lolpcc | 1:6877bb99aa17 | 113 | return(-1); |
lolpcc | 1:6877bb99aa17 | 114 | } |