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