int main() { /* strlen */ printf("size = %d\n", my_strlen("lolilol\n")); /* strchr */ char *ptr = my_strchr("CouCou", 'o'); if (ptr) printf("ptr = %s\n", ptr); else puts("NULL ptr"); ptr = my_strchr("Coucou", 'u'); if (ptr) printf("ptr = %s\n", ptr); else puts("NULL ptr"); ptr = my_strchr("Coucou", 'z'); if (ptr) printf("ptr = %s\n", ptr); else puts("NULL ptr"); ptr = my_strchr("Coucou", '\0'); if (ptr) printf("ptr = %s\n", ptr); else puts("NULL ptr"); return (0); }
/** Run the terminal */ void term_Run() { char args[TERM_BUFSIZE]; const TERM_CMD *pCurCmd = NULL; int lastIdx = 0; while (1) { int currentIdx = TERM_BUFSIZE - TERM_USART_CNDTR; if (0 == TERM_USART_CNDTR) ResetDMA(); while (lastIdx < currentIdx) //echo usart_send_blocking(TERM_USART, inBuf[lastIdx++]); if (currentIdx > 0) { if (inBuf[currentIdx - 1] == '\n' || inBuf[currentIdx - 1] == '\r') { inBuf[currentIdx] = 0; lastIdx = 0; char *space = (char*)my_strchr(inBuf, ' '); if (0 == *space) //No args after command, look for end of line { space = (char*)my_strchr(inBuf, '\n'); args[0] = 0; } else //There are arguments, copy everything behind the space { my_strcpy(args, space + 1); } if (0 == *space) //No \n found? try \r space = (char*)my_strchr(inBuf, '\r'); *space = 0; pCurCmd = CmdLookup(inBuf); ResetDMA(); if (NULL != pCurCmd) { pCurCmd->CmdFunc(args); } else if (currentIdx > 1) { term_send(TERM_USART, "Unknown command sequence\r\n"); } } else if (inBuf[0] == '!' && NULL != pCurCmd) { ResetDMA(); lastIdx = 0; pCurCmd->CmdFunc(args); } } } /* while(1) */ } /* term_Run */
int main(int argc, char * * argv) { printf("Welcome to PA02.\n" "\n" "You are encouraged to edit this file in order to test\n" "the behavior of the functions you write in answer02.c\n" "\n" "This file will not be marked, and should not be\n" "submitted.\n" "\n" "Don't forget to post questions on blackboard, and ask\n" "the TAs and your classmates for help.\n" "\n"); const char * s1 = "Hello World!"; const char * s2 = ""; const char * s3 = "foo"; // -- my_strlen, should be: 12, 0, and 3 printf("my_strlen(\"%s\") = %d\n", s1, (int) my_strlen(s1)); printf("my_strlen(\"%s\") = %d\n", s2, (int) my_strlen(s2)); printf("my_strlen(\"%s\") = %d\n", s3, (int) my_strlen(s3)); // -- my_countchar, should be: 3, 0, and 2 printf("my_countchar(\"%s\", 'l') = %d\n", s1, (int) my_countchar(s1, 'l')); printf("my_countchar(\"%s\", 'o') = %d\n", s2, (int) my_countchar(s2, 'o')); printf("my_countchar(\"%s\", 'o') = %d\n", s3, (int) my_countchar(s3, 'o')); // -- my_strchr, should be: "llo World!", "(null)", and "" printf("my_strchr(\"%s\", 'l') = %s\n", s1, my_strchr(s1, 'l')); printf("my_strchr(\"%s\", 'o') = %s\n", s2, my_strchr(s2, 'o')); printf("my_strchr(\"%s\", '\\0') = %s\n", s3, my_strchr(s3, '\0')); // -- my_strstr, should be: "World!", "Hello World!", "(null)" printf("my_strstr(\"%s\", \"World\") = %s\n", s1, my_strstr(s1, "World")); printf("my_strstr(\"%s\", \"\") = %s\n", s1, my_strstr(s1, "")); printf("my_strstr(\"%s\", \"hello\") = %s\n", s1, my_strstr(s1, "hello")); // -- my_strcpy. For this function you need a buffer where you // copy the string to. char buffer[BUFFER_LEN]; my_strcpy(buffer, s1); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s1, buffer); my_strcpy(buffer, s2); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s2, buffer); my_strcpy(buffer, s3); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s3, buffer); // -- my_strcat. You will have to do this yourself... just // look at my_strcpy for an example, and go from there. // -- my_isspace. You will have to do this for yourself. // -- my_atoi. You will have to do this for yourself. return EXIT_SUCCESS; }
int toto() { char toto[] = "Coucou Ca Va ?"; char test[20]; char dest[7]; printf("sa marche ? toto fait %d char\n", my_strlen("toto")); my_memcpy(dest, toto, 14); dest[14] = 0; printf("dest = [%s]\n", dest); printf("strchr = [%s]\n", my_strchr(toto, 'a')); printf("strcmp toto, dest = %d\n", my_strcmp(toto + 1, dest)); dest[3] = 'a'; printf("strncmp toto, dest = %d\n", my_strncmp(toto, dest, 3)); my_bzero(toto, 5); printf("bzero = [%s]\n", toto + 5); printf("strcasecmp = %d\n", strcasecmp("SALUT", "123456")); my_write(1, "test\n", 5); printf("rindex my toto with the char 'a' : [%s]\n", my_rindex("caca coco coucou", 'i')); test[14] = 0; printf("apres le memset = [%s]\n", my_memset(test, 'A', 14)); strcpy(dest, "Coucou"); printf("memmove result = [%s]\n", memmove(dest, dest + 1, 20)); printf("dest = [%s]\n", dest); }
int main (int argc, char *argv[]) { char line [80]; char *first_ptr; char *last_ptr; fgets (line, sizeof (line), stdin); line [strlen (line) - 1] = '\0'; last_ptr = line; first_ptr = my_strchr (line, '/'); if (first_ptr == NULL) { fprintf (stderr, "Error: Unable to find slash in %s\n", line); exit (8); } *first_ptr = '\0'; ++first_ptr; printf ("First:%s Last:%s\n", first_ptr, last_ptr); return 0; }
int my_setenv(char ***env, char *variable, char *value) { char **tmp_var; int i; i = 0; tmp_var = *env; if (variable == NULL || value == NULL) return (my_putstr_error("usage: setenv VARIABLE VALUE\n")); if (variable == NULL || my_strlen(variable) == 0 || my_strchr(variable, '=') != NULL) return (my_putstr_error("error : variable NULL or '=' in name\n")); if ((variable = add_egale(variable)) == NULL) return (-1); while (tmp_var && tmp_var[i] && my_strncmp(variable, tmp_var[i], my_strlen(variable)) != 0) i = i + 1; if (tmp_var == NULL || tmp_var[i] == NULL) { if ((push_env(env, variable, value)) == -1) return (-1); } else if ((mod_env(&tmp_var[i], value)) == -1) return (-1); return (0); }
/* * Hook function for human corpses */ bool monster_hook_human(int r_idx) { monster_race *r_ptr = &r_info[r_idx]; if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE; if (my_strchr("pht", r_ptr->d_char)) return TRUE; return FALSE; }
int my_ident_flag(const char *str, va_list ap, int *count, int fd) { char tab[14] = "bcdinopsSuxX%"; if (my_strchr(str[count[0]], tab) == -1) { my_putchar('%', fd); my_putchar(str[count[0]], fd); return (1); } else if (my_strchr(str[count[0]], tab) == 12) { my_putchar('%', fd); return (0); } else if (my_strchr(str[count[0]], tab) == 4) return (ptr_tab[my_strchr(str[count[0]], tab)] (ap, count[0] + count - 1)); else return (ptr_tab[my_strchr(str[count[0]], tab)](ap, fd)); }
int ColonsToInts( const char * str, int32_t * vals, int max_quantity ) { int i; for( i = 0; i < max_quantity; i++ ) { const char * colon = my_strchr( str, ':' ); vals[i] = my_atoi( str ); if( !colon ) break; str = colon+1; } return i+1; }
int main(int argc, char **argv) { char buf[80]; char *first_ptr; char *last_ptr; fgets(buf, sizeof(buf), stdin); if(first_ptr = my_strchr(buf, ' ')) { first_ptr++; last_ptr = }
const char *my_strstr(const char *haystack, const char *needle) { const char *tmp; if (haystack == NULL || needle == NULL) return (NULL); tmp = haystack; while ((tmp = my_strchr(tmp, *needle))) { if (my_strncmp(tmp, needle, my_strlen(needle)) == 0) return (tmp); tmp = tmp + sizeof(char); } return (NULL); }
int main(void) { char s1[128], s2[128]; printf("test strlen, input s1 is: "); gets(s1); printf("--> len is %d\n", my_strlen(s1)); printf("test strcpy, input s2 is: "); gets(s2); my_strcpy(s1, s2); printf("--> s1 is %s\n", s1); printf("test strcat, input s1 is: "); gets(s1); printf("input s2 is: "); gets(s2); my_strcat(s1, s2); printf("--> s1 is %s\n", s1); int ret; printf("test strcmp, input s1 is: "); gets(s1); printf("input s2 is: "); gets(s2); ret = my_strcmp(s1, s2); if(ret == 0) printf("%s = %s\n", s1, s2); else if(ret > 0) printf("%s > %s\n", s1, s2); else printf("%s < %s\n", s1, s2); int ch; char *index; printf("test strchr, input s1 is: "); gets(s1); printf("input ch:"); ch = getchar(); index = my_strchr(s1, ch); if(NULL != index) printf("found %c at %p\n", ch, index); else printf("no fount!\n"); return 0; }
int main(void) { printf("String: "); char* str = GetString(); printf("Character: "); char c = GetChar(); printf("Looking for substring...\n"); char* result = my_strchr(str, c); if (result ==NULL) { printf("Couldn't find %c.\n", c); } else { printf("Substing: %s \n", result); } }
static char *my_cd_realpath(char *path, char **env) { char *tmp; tmp = NULL; if (my_strcmp(path, "-") == 0 || my_strcmp(path, "--") == 0) tmp = my_cd_back(path, env); else if (my_strcmp(path, "~") == 0) tmp = my_strdup(my_getenv(env, "HOME")); else if (my_strichr(path, '~') == 0 && my_strichr(path, '/') == 1) tmp = my_strjoin(my_getenv(env, "HOME"), my_strchr(path, '/')); else if (my_strichr(path, '/') == 0) tmp = my_strdup(path); else { tmp = my_strjoin(my_getenv(env, "PWD"), "/"); tmp = my_strfjoin(tmp, my_strdup(path)); } if (tmp != NULL) tmp = my_realpath(tmp); return (tmp); }
/* * Creates a description of the item "o_ptr", and stores it in "out_val". * * One can choose the "verbosity" of the description, including whether * or not the "number" of items should be described, and how much detail * should be used when describing the item. * * The given "buf" must be MAX_NLEN chars long to hold the longest possible * description, which can get pretty long, including incriptions, such as: * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)". * Note that the inscription will be clipped to keep the total description * under MAX_NLEN-1 chars (plus a terminator). * * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient, * portable, versions of some common "sprintf()" commands. * * Note that all ego-items (when known) append an "Ego-Item Name", unless * the item is also an artifact, which should NEVER happen. * * Note that all artifacts (when known) append an "Artifact Name", so we * have special processing for "Specials" (artifact Lites, Rings, Amulets). * The "Specials" never use "modifiers" if they are "known", since they * have special "descriptions", such as "The Necklace of the Dwarves". * * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone), * plus the artifact name, just like any other artifact, if known. * * Special Ring's and Amulet's, if not "aware", use the same code as normal * rings and amulets, and if "aware", use the "k_info" base-name (Ring or * Amulet or Necklace). They will NEVER "append" the "k_info" name. But, * they will append the artifact name, just like any artifact, if known. * * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware. * * Mode: * OD_NAME_ONLY : The Cloak of Death * OD_NAME_AND_ENCHANT : The Cloak of Death [1,+3] * OD_OMIT_INSCRIPTION : The Cloak of Death [1,+3] (+2 to Stealth) * 0 : The Cloak of Death [1,+3] (+2 to Stealth) {nifty} * * OD_OMIT_PREFIX : Forbidden numeric prefix * OD_NO_PLURAL : Forbidden use of plural * OD_STORE : Assume to be aware and known * OD_NO_FLAVOR : Allow to hidden flavor * OD_FORCE_FLAVOR : Get un-shuffled flavor name */ void object_desc(char *buf, const object_type *o_ptr, u32b mode) { /* Extract object kind name */ cptr kindname = get_object_name(o_ptr); /* Extract default "base" string */ cptr basenm = kindname; /* Assume no "modifier" string */ cptr modstr = ""; int power; bool aware = FALSE; bool known = FALSE; bool flavor = TRUE; bool show_weapon = FALSE; bool show_armour = FALSE; cptr s, s0; char *t; char p1 = '(', p2 = ')'; char b1 = '[', b2 = ']'; char c1 = '{', c2 = '}'; char tmp_val[MAX_NLEN+160]; char tmp_val2[MAX_NLEN+10]; char fake_insc_buf[30]; u32b f1, f2, f3; bool fullname = FALSE; object_type *bow_ptr; object_kind *k_ptr = &k_info[o_ptr->k_idx]; object_kind *flavor_k_ptr = &k_info[k_ptr->flavor]; /* Extract some flags */ object_flags(o_ptr, &f1, &f2, &f3); /* See if the object is "aware" */ if (object_aware_p(o_ptr)) aware = TRUE; /* See if the object is "known" */ if (object_known_p(o_ptr)) known = TRUE; /* Allow flavors to be hidden when aware */ if (aware && ((mode & OD_NO_FLAVOR) || plain_descriptions)) flavor = FALSE; /* Object is in the inventory of a store or spoiler */ if ((mode & OD_STORE) || (o_ptr->ident & IDENT_STORE)) { /* Don't show flavors */ flavor = FALSE; /* Pretend known and aware */ aware = TRUE; known = TRUE; } /* Force to be flavor name only */ if (mode & OD_FORCE_FLAVOR) { aware = FALSE; flavor = TRUE; known = FALSE; /* Cancel shuffling */ flavor_k_ptr = k_ptr; } /* Analyze the object */ switch (o_ptr->tval) { /* Some objects are easy to describe */ case TV_SKELETON: case TV_BOTTLE: case TV_JUNK: case TV_SPIKE: case TV_FLASK: case TV_CHEST: case TV_FOOD: { break; } /* Figurines/Statues */ case TV_FIGURINE: case TV_STATUE: { monster_race *r_ptr = &r_info[o_ptr->pval]; #ifdef JP modstr = r_name + r_ptr->name; #else cptr t = r_name + r_ptr->name; if (!(r_ptr->flags1 & RF1_UNIQUE)) { sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t); modstr = tmp_val2; } else { modstr = t; } #endif break; } /* Corpses */ case TV_CORPSE: { monster_race *r_ptr = &r_info[o_ptr->pval]; modstr = r_name + r_ptr->name; #ifdef JP basenm = "#%"; #else if (r_ptr->flags1 & RF1_UNIQUE) basenm = "& % of #"; else basenm = "& # %"; #endif break; } /* Missiles/ Bows/ Weapons */ case TV_SHOT: case TV_BOLT: case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM: case TV_SWORD: case TV_DIGGING: { show_weapon = TRUE; break; } /* Armour */ case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_CROWN: case TV_HELM: case TV_SHIELD: case TV_SOFT_ARMOR: case TV_HARD_ARMOR: case TV_DRAG_ARMOR: { show_armour = TRUE; break; } /* Lites (including a few "Specials") */ case TV_LITE: { break; } /* Amulets (including a few "Specials") */ case TV_AMULET: { /* Known artifacts */ if (aware) { if (artifact_p(o_ptr)) break; if (k_ptr->gen_flags & TRG_INSTA_ART) break; } /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%のアミュレット"; else if (aware) basenm = "%の#アミュレット"; else basenm = "#アミュレット"; #else if (!flavor) basenm = "& Amulet~ of %"; else if (aware) basenm = "& # Amulet~ of %"; else basenm = "& # Amulet~"; #endif break; } /* Rings (including a few "Specials") */ case TV_RING: { /* Known artifacts */ if (aware) { if (artifact_p(o_ptr)) break; if (k_ptr->gen_flags & TRG_INSTA_ART) break; } /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%の指輪"; else if (aware) basenm = "%の#指輪"; else basenm = "#指輪"; #else if (!flavor) basenm = "& Ring~ of %"; else if (aware) basenm = "& # Ring~ of %"; else basenm = "& # Ring~"; #endif if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE; break; } case TV_STAFF: { /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%のスタッフ"; else if (aware) basenm = "%の#スタッフ"; else basenm = "#スタッフ"; #else if (!flavor) basenm = "& Staff~ of %"; else if (aware) basenm = "& # Staff~ of %"; else basenm = "& # Staff~"; #endif break; } case TV_WAND: { /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%のワンド"; else if (aware) basenm = "%の#ワンド"; else basenm = "#ワンド"; #else if (!flavor) basenm = "& Wand~ of %"; else if (aware) basenm = "& # Wand~ of %"; else basenm = "& # Wand~"; #endif break; } case TV_ROD: { /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%のロッド"; else if (aware) basenm = "%の#ロッド"; else basenm = "#ロッド"; #else if (!flavor) basenm = "& Rod~ of %"; else if (aware) basenm = "& # Rod~ of %"; else basenm = "& # Rod~"; #endif break; } case TV_SCROLL: { /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%の巻物"; else if (aware) basenm = "\"#\"と書かれた%の巻物"; else basenm = "\"#\"と書かれた巻物"; #else if (!flavor) basenm = "& Scroll~ of %"; else if (aware) basenm = "& Scroll~ titled \"#\" of %"; else basenm = "& Scroll~ titled \"#\""; #endif break; } case TV_POTION: { /* Color the object */ modstr = k_name + flavor_k_ptr->flavor_name; #ifdef JP if (!flavor) basenm = "%の薬"; else if (aware) basenm = "%の#薬"; else basenm = "#薬"; #else if (!flavor) basenm = "& Potion~ of %"; else if (aware) basenm = "& # Potion~ of %"; else basenm = "& # Potion~"; #endif break; } /* Magic Books */ case TV_LIFE_BOOK: { #ifdef JP basenm = "生命の魔法書%"; #else if (mp_ptr->spell_type == ST_PRAYER) basenm = "& Book~ of Life Magic %"; else basenm = "& Life Spellbook~ %"; #endif break; } case TV_SORCERY_BOOK: { #ifdef JP basenm = "仙術の魔法書%"; #else if (mp_ptr->spell_type == ST_PRAYER) basenm = "& Book~ of Sorcery %"; else basenm = "& Sorcery Spellbook~ %"; #endif break; } /* Hack -- Gold/Gems */ case TV_GOLD: { strcpy(buf, basenm); return; } /* Used in the "inventory" routine */ default: { #ifdef JP strcpy(buf, "(なし)"); #else strcpy(buf, "(nothing)"); #endif return; } } /* Use full name from a_info */ if (known && o_ptr->name1) { artifact_type *a_ptr = &a_info[o_ptr->name1]; if (prefix(a_name + a_ptr->name, "$")) { basenm = a_name + a_info[o_ptr->name1].name + 1; fullname = TRUE; } } /* Start dumping the result */ t = tmp_val; #ifdef JP if (basenm[0] == '&') s = basenm + 2; else s = basenm; /* No prefix */ if (mode & OD_OMIT_PREFIX) { /* Nothing */ } else if (o_ptr->number > 1) { t = object_desc_kosuu(t, o_ptr); t = object_desc_str(t, "の "); } /* 英語の場合アーティファクトは The が付くので分かるが * 日本語では分からないのでマークをつける */ if (known) { if (artifact_p(o_ptr)) t = object_desc_str(t, "★"); else if (o_ptr->art_name) t = object_desc_str(t, "☆"); } #else /* The object "expects" a "number" */ if (basenm[0] == '&') { /* Skip the ampersand (and space) */ s = basenm + 2; /* No prefix */ if (mode & OD_OMIT_PREFIX) { /* Nothing */ } /* Hack -- None left */ else if (o_ptr->number <= 0) { t = object_desc_str(t, "no more "); } /* Extract the number */ else if (o_ptr->number > 1) { t = object_desc_num(t, o_ptr->number); t = object_desc_chr(t, ' '); } /* Hack -- The only one of its kind */ else if ((known && (artifact_p(o_ptr) || o_ptr->art_name)) || ((o_ptr->tval == TV_CORPSE) && (r_info[o_ptr->pval].flags1 & RF1_UNIQUE))) { t = object_desc_str(t, "The "); } /* A single one */ else { bool vowel; switch (*s) { case '#': vowel = is_a_vowel(modstr[0]); break; case '%': vowel = is_a_vowel(*kindname); break; default: vowel = is_a_vowel(*s); break; } if (vowel) { /* A single one, with a vowel */ t = object_desc_str(t, "an "); } else { /* A single one, without a vowel */ t = object_desc_str(t, "a "); } } } /* Hack -- objects that "never" take an article */ else { /* No ampersand */ s = basenm; /* No pref */ if (mode & OD_OMIT_PREFIX) { /* Nothing */ } /* Hack -- all gone */ else if (o_ptr->number <= 0) { t = object_desc_str(t, "no more "); } /* Prefix a number if required */ else if (o_ptr->number > 1) { t = object_desc_num(t, o_ptr->number); t = object_desc_chr(t, ' '); } /* Hack -- The only one of its kind */ else if (known && (artifact_p(o_ptr) || o_ptr->art_name)) { t = object_desc_str(t, "The "); } /* Hack -- single items get no prefix */ else { /* Nothing */ } } #endif /* Paranoia -- skip illegal tildes */ /* while (*s == '~') s++; */ #ifdef JP /* 伝説のアイテム、名のあるアイテムの名前を付加する */ if (known) { /* ランダム・アーティファクト */ if (o_ptr->art_name) { cptr temp = quark_str(o_ptr->art_name); /* '『' から始まらない伝説のアイテムの名前は最初に付加する */ /* 英語版のセーブファイルから来た 'of XXX' は,「XXXの」と表示する */ if (strncmp(temp, "of ", 3) == 0) { t = object_desc_str(t, &temp[3]); t = object_desc_str(t, "の"); } else if ((strncmp(temp, "『", 2) != 0) && (temp[0] != '\'')) t = object_desc_str(t, temp); } /* 伝説のアイテム */ else if (o_ptr->name1 && !fullname) { artifact_type *a_ptr = &a_info[o_ptr->name1]; /* '『' から始まらない伝説のアイテムの名前は最初に付加する */ if (strncmp(a_name + a_ptr->name, "『", 2) != 0) { t = object_desc_str(t, a_name + a_ptr->name); } } /* 名のあるアイテム */ else if (o_ptr->name2) { ego_item_type *e_ptr = &e_info[o_ptr->name2]; t = object_desc_str(t, e_name + e_ptr->name); } } #endif /* Copy the string */ for (s0 = NULL; *s || s0; ) { /* The end of the flavour/kind string. */ if (!*s) { s = s0 + 1; s0 = NULL; } /* Begin to append the modifier (flavor) */ else if ((*s == '#') && !s0) { s0 = s; s = modstr; /* Paranoia -- Never append multiple modstrs */ modstr = ""; } /* Begin to append the kind name */ else if ((*s == '%') && !s0) { s0 = s; s = kindname; /* Paranoia -- Never append multiple kindnames */ kindname = ""; } #ifndef JP /* Pluralizer */ else if (*s == '~') { /* Add a plural if needed */ if (!(mode & OD_NO_PLURAL) && (o_ptr->number != 1)) { char k = t[-1]; /* XXX XXX XXX Mega-Hack */ /* Hack -- "Cutlass-es" and "Torch-es" */ if ((k == 's') || (k == 'h')) *t++ = 'e'; /* Add an 's' */ *t++ = 's'; } s++; } #endif /* Normal */ else { /* Copy */ *t++ = *s++; } } /* Terminate */ *t = '\0'; #ifdef JP /* '『'から始まる伝説のアイテムの名前は最後に付加する */ if (known) { /* ランダムアーティファクトの名前はセーブファイルに記録 されるので、英語版の名前もそれらしく変換する */ if (o_ptr->art_name) { char temp[256]; int itemp; strcpy(temp, quark_str(o_ptr->art_name)); /* MEGA HACK by ita */ if (strncmp(temp, "『", 2) == 0) t = object_desc_str(t, temp); else if (temp[0] == '\'') { itemp = strlen(temp); temp[itemp - 1] = 0; t = object_desc_str(t, "『"); t = object_desc_str(t, &temp[1]); t = object_desc_str(t, "』"); } } else if (o_ptr->name1) { artifact_type *a_ptr = &a_info[o_ptr->name1]; if (strncmp(a_name + a_ptr->name, "『", 2) == 0) { t = object_desc_str(t, a_name + a_ptr->name); } } else if (o_ptr->ego_name) { t = object_desc_str(t, quark_str(o_ptr->ego_name)); } else if (o_ptr->inscription) { cptr str = quark_str(o_ptr->inscription); while(*str) { if (iskanji(*str)) { str += 2; continue; } if (*str == '#') break; str++; } if (*str) { /* Find the '#' */ cptr str = my_strchr(quark_str(o_ptr->inscription), '#'); /* Add the false name */ t = object_desc_str(t,"『"); t = object_desc_str(t, &str[1]); t = object_desc_str(t,"』"); } } } #else /* Hack -- Append "Artifact" or "Special" names */ if (known && !fullname) { /* Is it a new random artifact ? */ if (o_ptr->art_name) { t = object_desc_chr(t, ' '); t = object_desc_str(t, quark_str(o_ptr->art_name)); } /* Grab any artifact name */ else if (o_ptr->name1) { artifact_type *a_ptr = &a_info[o_ptr->name1]; t = object_desc_chr(t, ' '); t = object_desc_str(t, a_name + a_ptr->name); } /* Grab any ego-item name */ else { if (o_ptr->name2) { ego_item_type *e_ptr = &e_info[o_ptr->name2]; t = object_desc_chr(t, ' '); t = object_desc_str(t, e_name + e_ptr->name); } if (o_ptr->ego_name) { t = object_desc_chr(t, ' '); t = object_desc_str(t, quark_str(o_ptr->ego_name)); } else if (o_ptr->inscription && my_strchr(quark_str(o_ptr->inscription), '#')) { /* Find the '#' */ cptr str = my_strchr(quark_str(o_ptr->inscription), '#'); /* Add the false name */ t = object_desc_chr(t, ' '); t = object_desc_str(t, &str[1]); } } } #endif /* No more details wanted */ if (mode & OD_NAME_ONLY) goto object_desc_done; /* Hack -- Chests must be described in detail */ if (o_ptr->tval == TV_CHEST) { /* Not searched yet */ if (!known) { /* Nothing */ } /* May be "empty" */ else if (!o_ptr->pval) { #ifdef JP t = object_desc_str(t, "(空)"); #else t = object_desc_str(t, " (empty)"); #endif } /* May be "disarmed" */ else if (o_ptr->pval < 0) { if (chest_traps[0 - o_ptr->pval]) { #ifdef JP t = object_desc_str(t, "(解除済)"); #else t = object_desc_str(t, " (disarmed)"); #endif } else { #ifdef JP t = object_desc_str(t, "(非施錠)"); #else t = object_desc_str(t, " (unlocked)"); #endif } } /* Describe the traps, if any */ else { /* Describe the traps */ switch (chest_traps[o_ptr->pval]) { case 0: { #ifdef JP t = object_desc_str(t, "(施錠)"); #else t = object_desc_str(t, " (Locked)"); #endif break; } case CHEST_LOSE_STR: { #ifdef JP t = object_desc_str(t, "(毒針)"); #else t = object_desc_str(t, " (Poison Needle)"); #endif break; } case CHEST_LOSE_CON: { #ifdef JP t = object_desc_str(t, "(毒針)"); #else t = object_desc_str(t, " (Poison Needle)"); #endif break; } case CHEST_POISON: { #ifdef JP t = object_desc_str(t, "(ガス・トラップ)"); #else t = object_desc_str(t, " (Gas Trap)"); #endif break; } case CHEST_PARALYZE: { #ifdef JP t = object_desc_str(t, "(ガス・トラップ)"); #else t = object_desc_str(t, " (Gas Trap)"); #endif break; } case CHEST_EXPLODE: { #ifdef JP t = object_desc_str(t, "(爆発装置)"); #else t = object_desc_str(t, " (Explosion Device)"); #endif break; } case CHEST_SUMMON: { #ifdef JP t = object_desc_str(t, "(召喚のルーン)"); #else t = object_desc_str(t, " (Summoning Runes)"); #endif break; } default: { #ifdef JP t = object_desc_str(t, "(マルチ・トラップ)"); #else t = object_desc_str(t, " (Multiple Traps)"); #endif break; } } } } /* Display the item like a weapon */ if (f3 & TR3_SHOW_MODS) show_weapon = TRUE; /* Display the item like a weapon */ if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE; /* Display the item like armour */ if (o_ptr->ac) show_armour = TRUE; /* Dump base weapon info */ switch (o_ptr->tval) { /* Missiles and Weapons */ case TV_SHOT: case TV_BOLT: case TV_ARROW: case TV_HAFTED: case TV_POLEARM: case TV_SWORD: case TV_DIGGING: /* Append a "damage" string */ t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); t = object_desc_num(t, o_ptr->dd); t = object_desc_chr(t, 'd'); t = object_desc_num(t, o_ptr->ds); t = object_desc_chr(t, p2); /* All done */ break; /* Bows get a special "damage string" */ case TV_BOW: /* Mega-Hack -- Extract the "base power" */ power = bow_tmul(o_ptr->sval); /* Apply the "Extra Might" flag */ if (f3 & TR3_XTRA_MIGHT) power++; /* Append a special "damage" string */ t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); t = object_desc_chr(t, 'x'); t = object_desc_num(t, power); t = object_desc_chr(t, p2); /* All done */ break; } /* Add the weapon bonuses */ if (known) { /* Show the tohit/todam on request */ if (show_weapon) { t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); t = object_desc_int(t, o_ptr->to_h); t = object_desc_chr(t, ','); t = object_desc_int(t, o_ptr->to_d); t = object_desc_chr(t, p2); } /* Show the tohit if needed */ else if (o_ptr->to_h) { t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); t = object_desc_int(t, o_ptr->to_h); t = object_desc_chr(t, p2); } /* Show the todam if needed */ else if (o_ptr->to_d) { t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); t = object_desc_int(t, o_ptr->to_d); t = object_desc_chr(t, p2); } } bow_ptr = &inventory[INVEN_BOW]; /* If have a firing weapon + ammo matches bow */ if (bow_ptr->k_idx && (o_ptr->tval == p_ptr->tval_ammo)) { int avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2; int tmul = bow_tmul(bow_ptr->sval); s16b energy_fire = bow_energy(bow_ptr->sval); /* See if the bow is "known" - then set damage bonus */ if (object_known_p(bow_ptr)) avgdam += (bow_ptr->to_d * 10); /* Effect of ammo */ if (known) avgdam += (o_ptr->to_d * 10); /* Get extra "power" from "extra might" */ if (p_ptr->xtra_might) tmul++; tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128); /* Launcher multiplier */ avgdam *= tmul; avgdam /= (100 * 10); if (avgdam < 0) avgdam = 0; /* Display (shot damage/ avg damage) */ t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); t = object_desc_num(t, avgdam); t = object_desc_chr(t, '/'); if (p_ptr->num_fire == 0) { t = object_desc_chr(t, '0'); } else { /* Calc effects of energy */ avgdam *= (p_ptr->num_fire * 100); avgdam /= energy_fire * 100; t = object_desc_num(t, avgdam); } t = object_desc_chr(t, p2); } /* Add the armor bonuses */ if (known) { /* Show the armor class info */ if (show_armour) { t = object_desc_chr(t, ' '); t = object_desc_chr(t, b1); t = object_desc_num(t, o_ptr->ac); t = object_desc_chr(t, ','); t = object_desc_int(t, o_ptr->to_a); t = object_desc_chr(t, b2); } /* No base armor, but does increase armor */ else if (o_ptr->to_a) { t = object_desc_chr(t, ' '); t = object_desc_chr(t, b1); t = object_desc_int(t, o_ptr->to_a); t = object_desc_chr(t, b2); } } /* Hack -- always show base armor */ else if (show_armour) { t = object_desc_chr(t, ' '); t = object_desc_chr(t, b1); t = object_desc_num(t, o_ptr->ac); t = object_desc_chr(t, b2); } /* No more details wanted */ if (mode & OD_NAME_AND_ENCHANT) goto object_desc_done; if (known) /* Known item only */ { /* * Hack -- Wands and Staffs have charges. Make certain how many charges * a stack of staffs really has is clear. -LM- */ if (((o_ptr->tval == TV_STAFF) || (o_ptr->tval == TV_WAND))) { /* Dump " (N charges)" */ t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); /* Clear explaination for staffs. */ if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1)) { t = object_desc_num(t, o_ptr->number); t = object_desc_str(t, "x "); } t = object_desc_num(t, o_ptr->pval); #ifdef JP t = object_desc_str(t, "回分"); #else t = object_desc_str(t, " charge"); if (o_ptr->pval != 1) t = object_desc_chr(t, 's'); #endif t = object_desc_chr(t, p2); } /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may * be in any state of charge or discharge, this now includes a number. -LM- */ else if (o_ptr->tval == TV_ROD) { /* Hack -- Dump " (# charging)" if relevant */ if (o_ptr->timeout) { /* Stacks of rods display an exact count of charging rods. */ if (o_ptr->number > 1) { /* Paranoia. */ if (k_ptr->pval == 0) k_ptr->pval = 1; /* Find out how many rods are charging, by dividing * current timeout by each rod's maximum timeout. * Ensure that any remainder is rounded up. Display * very discharged stacks as merely fully discharged. */ power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval; if (power > o_ptr->number) power = o_ptr->number; /* Display prettily. */ t = object_desc_str(t, " ("); t = object_desc_num(t, power); #ifdef JP t = object_desc_str(t, "本 充填中)"); #else t = object_desc_str(t, " charging)"); #endif } /* "one Rod of Perception (1 charging)" would look tacky. */ else { #ifdef JP t = object_desc_str(t, "(充填中)"); #else t = object_desc_str(t, " (charging)"); #endif } } } /* Dump "pval" flags for wearable items */ if (f1 & TR1_PVAL_MASK) { /* Start the display */ t = object_desc_chr(t, ' '); t = object_desc_chr(t, p1); /* Dump the "pval" itself */ t = object_desc_int(t, o_ptr->pval); /* Do not display the "pval" flags */ if (f3 & TR3_HIDE_TYPE) { /* Nothing */ } /* Speed */ else if (f1 & TR1_SPEED) { /* Dump " to speed" */ #ifdef JP t = object_desc_str(t, "加速"); #else t = object_desc_str(t, " to speed"); #endif } /* Attack speed */ else if (f1 & TR1_BLOWS) { /* Add " attack" */ #ifdef JP t = object_desc_str(t, "攻撃"); #else t = object_desc_str(t, " attack"); /* Add "attacks" */ if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's'); #endif } /* Stealth */ else if (f1 & TR1_STEALTH) { /* Dump " to stealth" */ #ifdef JP t = object_desc_str(t, "隠密"); #else t = object_desc_str(t, " to stealth"); #endif } /* Search */ else if (f1 & TR1_SEARCH) { /* Dump " to searching" */ #ifdef JP t = object_desc_str(t, "探索"); #else t = object_desc_str(t, " to searching"); #endif } /* Infravision */ else if (f1 & TR1_INFRA) { /* Dump " to infravision" */ #ifdef JP t = object_desc_str(t, "赤外線視力"); #else t = object_desc_str(t, " to infravision"); #endif } /* Finish the display */ t = object_desc_chr(t, p2); } /* Hack -- Process Lanterns/Torches */ if ((o_ptr->tval == TV_LITE) && ((o_ptr->sval == SV_LITE_TORCH) || (o_ptr->sval == SV_LITE_LANTERN))) { /* Hack -- Turns of light for normal lites */ #ifdef JP t = object_desc_chr(t, '('); #else t = object_desc_str(t, " (with "); #endif t = object_desc_num(t, o_ptr->xtra3); #ifdef JP t = object_desc_str(t, "ターンの寿命)"); #else t = object_desc_str(t, " turns of light)"); #endif } /* Indicate charging objects, but not rods. */ if (o_ptr->timeout && (o_ptr->tval != TV_ROD)) { /* Hack -- Dump " (charging)" if relevant */ #ifdef JP t = object_desc_str(t, "(充填中)"); #else t = object_desc_str(t, " (charging)"); #endif } } /* No more details wanted */ if (mode & OD_OMIT_INSCRIPTION) goto object_desc_done; /* Prepare real inscriptions in a buffer */ tmp_val2[0] = '\0'; /* Auto abbreviation inscribe */ if ((abbrev_extra || abbrev_all) && (o_ptr->ident & IDENT_MENTAL)) { if (!o_ptr->inscription || !my_strchr(quark_str(o_ptr->inscription), '%')) { bool kanji, all; #ifdef JP kanji = TRUE; #else kanji = FALSE; #endif all = abbrev_all; get_ability_abbreviation(tmp_val2, o_ptr, kanji, all, FALSE); } } /* Use the standard inscription if available */ if (o_ptr->inscription) { char buff[1024]; if (tmp_val2[0]) strcat(tmp_val2, ", "); /* Get inscription and convert {%} */ get_inscription(buff, o_ptr); /* strcat with correct treating of kanji */ my_strcat(tmp_val2, buff, sizeof(tmp_val2)); } /* No fake inscription yet */ fake_insc_buf[0] = '\0'; /* Use the game-generated "feeling" otherwise, if available */ if (o_ptr->feeling) { strcpy(fake_insc_buf, game_inscriptions[o_ptr->feeling]); } /* Note "cursed" if the item is known to be cursed */ else if (cursed_p(o_ptr) && (known || (o_ptr->ident & IDENT_SENSE))) { #ifdef JP strcpy(fake_insc_buf, "呪われている"); #else strcpy(fake_insc_buf, "cursed"); #endif } /* Note "unidentified" if the item is unidentified */ else if (((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET) || (o_ptr->tval == TV_LITE) || (o_ptr->tval == TV_FIGURINE)) && aware && !known && !(o_ptr->ident & IDENT_SENSE)) { #ifdef JP strcpy(fake_insc_buf, "未鑑定"); #else strcpy(fake_insc_buf, "unidentified"); #endif } /* Mega-Hack -- note empty wands/staffs */ else if (!known && (o_ptr->ident & IDENT_EMPTY)) { #ifdef JP strcpy(fake_insc_buf, "空"); #else strcpy(fake_insc_buf, "empty"); #endif } /* Note "tried" if the object has been tested unsuccessfully */ else if (!aware && object_tried_p(o_ptr)) { #ifdef JP strcpy(fake_insc_buf, "未判明"); #else strcpy(fake_insc_buf, "tried"); #endif } /* Note the discount, if any */ if (o_ptr->discount) { /* Hidden by real inscription unless in a store */ if (!tmp_val2[0] || (o_ptr->ident & IDENT_STORE)) { char discount_num_buf[4]; /* Append to other fake inscriptions if any */ if (fake_insc_buf[0]) strcat(fake_insc_buf, ", "); (void)object_desc_num(discount_num_buf, o_ptr->discount); strcat(fake_insc_buf, discount_num_buf); #ifdef JP strcat(fake_insc_buf, "%引き"); #else strcat(fake_insc_buf, "% off"); #endif } } /* Append the inscription, if any */ if (fake_insc_buf[0] || tmp_val2[0]) { /* Append the inscription */ t = object_desc_chr(t, ' '); t = object_desc_chr(t, c1); /* Append fake inscriptions */ if (fake_insc_buf[0]) { t = object_desc_str(t, fake_insc_buf); } /* Append a separater */ if (fake_insc_buf[0] && tmp_val2[0]) { t = object_desc_chr(t, ','); t = object_desc_chr(t, ' '); } /* Append real inscriptions */ if (tmp_val2[0]) { t = object_desc_str(t, tmp_val2); } t = object_desc_chr(t, c2); } object_desc_done: my_strcpy(buf, tmp_val, MAX_NLEN); }
int main() { char *tmp=my_strchr("dcfcccas",'c'); printf("%s",tmp); return 0; }
int main(int argc, char * * argv) { printf("Welcome to PA02.\n" "\n" "You are encouraged to edit this file in order to test\n" "the behavior of the functions you write in answer02.c\n" "\n" "This file will not be marked, and should not be\n" "submitted.\n" "\n" "Don't forget to post questions on blackboard, and ask\n" "the TAs and your classmates for help.\n" "\n"); const char * s1 = "Hello World!"; const char * s2 = ""; const char * s3 = "foo"; // -- my_strlen, should be: 12, 0, and 3 printf("my_strlen(\"%s\") = %d\n", s1, (int) my_strlen(s1)); printf("my_strlen(\"%s\") = %d\n", s2, (int) my_strlen(s2)); printf("my_strlen(\"%s\") = %d\n", s3, (int) my_strlen(s3)); // -- my_countchar, should be: 3, 0, and 2 printf("my_countchar(\"%s\", 'l') = %d\n", s1, (int) my_countchar(s1, 'l')); printf("my_countchar(\"%s\", 'o') = %d\n", s2, (int) my_countchar(s2, 'o')); printf("my_countchar(\"%s\", 'o') = %d\n", s3, (int) my_countchar(s3, 'o')); // -- my_strchr, should be: "llo World!", "(null)", and "" printf("my_strchr(\"%s\", 'l') = %s\n", s1, my_strchr(s1, 'l')); printf("my_strchr(\"%s\", 'o') = %s\n", s2, my_strchr(s2, 'o')); printf("my_strchr(\"%s\", '\\0') = %s\n", s3, my_strchr(s3, '\0')); // -- my_strrchr, should be: "lo World!", "(null)", and "" printf("my_strrchr(\"%s\", 'o') = %s\n", s1, my_strrchr(s1, 'o')); printf("my_strrchr(\"%s\", 'z') = %s\n", s1, my_strrchr(s1, 'z')); printf("my_strrchr(\"%s\", '\\0') = %s\n", s1, my_strrchr(s1, '\0')); // -- my_strstr, should be: "World!", "Hello World!", "(null)" printf("my_strstr(\"%s\", \"World\") = %s\n", s1, my_strstr(s1, "World")); printf("my_strstr(\"%s\", \"\") = %s\n", s1, my_strstr(s1, "")); printf("my_strstr(\"%s\", \"hello\") = %s\n", s1, my_strstr(s1, "hello")); // -- my_strcpy. For this function you need a buffer where you // copy the string to. char buffer[BUFFER_LEN]; my_strcpy(buffer, s1); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s1, buffer); my_strcpy(buffer, s2); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s2, buffer); my_strcpy(buffer, s3); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s3, buffer); // -- my_strcat. You will have to do this yourself... just // look at my_strcpy for an example, and go from there. my_strcpy(buffer, "Hello "); printf("%s\n", my_strcat(buffer, "Zippy!")); // prints "Hello Zippy!" my_strcpy(buffer, ""); printf("%s\n", my_strcat(buffer, "Hello!")); // prints ("Hello!") // -- my_isspace. You will have to do this for yourself. printf("my_isspace('\\n') = %d\n", my_isspace(' ')); printf("my_isspace('\\f') = %d\n", my_isspace('\f')); printf("my_isspace('\\r') = %d\n", my_isspace('\r')); printf("my_isspace('\\t') = %d\n", my_isspace('\t')); printf("my_isspace('n') = %d\n", my_isspace('l')); // -- my_atoi. You will have to do this for yourself. printf("my_atoi(\"0\") = %d\n", my_atoi("0")); // 0 printf("my_atoi(\"-12\") = %d\n", my_atoi("-12")); // -12 printf("my_atoi(\"15th of March would be the ides.\") = %d\n", my_atoi("15th of March would be the ides.")); // 15 printf("my_atoi(\"4 months to Summer.\") = %d\n", my_atoi("4 months to Summer.")); // 4 printf("my_atoi(\"\\n\\f\\t\\v\\r 6 white space characters handled correctly.\") = %d\n", my_atoi("\n\f\t\v\r 6 white space characters handled correctly.")); // 6 printf("my_atoi(\"garbage should yield 0\") = %d\n", my_atoi("garbage should yield 0")); // 0 return EXIT_SUCCESS; }
/* * Handle a "-d<what>=<path>" option * * The "<what>" can be any string starting with the same letter as the * name of a subdirectory of the "lib" folder (i.e. "i" or "info"). * * The "<path>" can be any legal path for the given system, and should * not end in any special path separator (i.e. "/tmp" or "~/.ang-info"). */ static void change_path(cptr info) { cptr s; /* Find equal sign */ s = my_strchr(info, '='); /* Verify equal sign */ if (!s) quit_fmt("Try '-d<what>=<path>' not '-d%s'", info); /* Analyze */ switch (tolower(info[0])) { case 'a': { string_free(ANGBAND_DIR_APEX); ANGBAND_DIR_APEX = string_make(s+1); break; } case 'f': { string_free(ANGBAND_DIR_FILE); ANGBAND_DIR_FILE = string_make(s+1); break; } case 'h': { string_free(ANGBAND_DIR_HELP); ANGBAND_DIR_HELP = string_make(s+1); break; } case 'i': { string_free(ANGBAND_DIR_INFO); ANGBAND_DIR_INFO = string_make(s+1); break; } case 'u': { string_free(ANGBAND_DIR_USER); ANGBAND_DIR_USER = string_make(s+1); break; } case 'x': { string_free(ANGBAND_DIR_XTRA); ANGBAND_DIR_XTRA = string_make(s+1); break; } #ifdef VERIFY_SAVEFILE case 'b': case 'd': case 'e': case 's': { quit_fmt("Restricted option '-d%s'", info); } #else /* VERIFY_SAVEFILE */ case 'b': { string_free(ANGBAND_DIR_BONE); ANGBAND_DIR_BONE = string_make(s+1); break; } case 'd': { string_free(ANGBAND_DIR_DATA); ANGBAND_DIR_DATA = string_make(s+1); break; } case 'e': { string_free(ANGBAND_DIR_EDIT); ANGBAND_DIR_EDIT = string_make(s+1); break; } case 's': { string_free(ANGBAND_DIR_SAVE); ANGBAND_DIR_SAVE = string_make(s+1); break; } case 'z': { string_free(ANGBAND_DIR_SCRIPT); ANGBAND_DIR_SCRIPT = string_make(s+1); break; } #endif /* VERIFY_SAVEFILE */ default: { quit_fmt("Bad semantics in '-d%s'", info); } } }
int main(int argc, char * * argv) { printf("Welcome to PA02.\n" "\n" "You are encouraged to edit this file in order to test\n" "the behavior of the functions you write in answer02.c\n" "\n" "This file will not be marked, and should not be\n" "submitted.\n" "\n" "Don't forget to post questions on blackboard, and ask\n" "the TAs and your classmates for help.\n" "\n"); const char * s1 = "Hello World!"; const char * s2 = ""; const char * s3 = "foo"; // -- my_strlen, should be: 12, 0, and 3 printf("my_strlen(\"%s\") = %d\n", s1, (int) my_strlen(s1)); printf("my_strlen(\"%s\") = %d\n", s2, (int) my_strlen(s2)); printf("my_strlen(\"%s\") = %d\n", s3, (int) my_strlen(s3)); printf("\n"); // -- my_countchar, should be: 3, 0, and 2 printf("my_countchar(\"%s\", 'l') = %d\n", s1, (int) my_countchar(s1, 'l')); printf("my_countchar(\"%s\", 'o') = %d\n", s2, (int) my_countchar(s2, 'o')); printf("my_countchar(\"%s\", 'o') = %d\n", s3, (int) my_countchar(s3, 'o')); printf("\n"); // -- my_strchr, should be: "llo World!", "(null)", and "" printf("my_strchr(\"%s\", 'l') = %s\n", s1, my_strchr(s1, 'l')); printf("my_strchr(\"%s\", 'o') = %s\n", s2, my_strchr(s2, 'o')); printf("my_strchr(\"%s\", '\\0') = %s\n", s3, my_strchr(s3, '\0')); printf("\n"); // -- my_strrchr, should be: "ld!", "(null)", and "" printf("my_strrchr(\"%s\", 'l') = %s\n", s1, my_strrchr(s1, 'l')); printf("my_strrchr(\"%s\", 'o') = %s\n", s2, my_strrchr(s2, 'o')); printf("my_strrchr(\"%s\", '\\0') = %s\n", s3, my_strrchr(s3, '\0')); printf("my_strrchr(\"\", '\\0') = %s\n", my_strrchr("", '\0')); printf("my_strrchr(\"Find First 'F' from right\", 'F') = %s\n", my_strrchr("Find First 'F' from right", 'F')); printf("my_strrchr(\"Find first char\", 'F') = %s\n", my_strrchr("Find first char", 'F')); printf("my_strrchr(\"!Find last char!\", '!') = %s\n", my_strrchr("!Find last char!", '!')); printf("\n"); // -- my_strstr, should be: "World!", "Hello World!", "(null)" printf("my_strstr(\"%s\", \"World\") = %s\n", s1, my_strstr(s1, "World")); printf("my_strstr(\"%s\", \"\") = %s\n", s1, my_strstr(s1, "")); printf("my_strstr(\"%s\", \"hello\") = %s\n", s1, my_strstr(s1, "hello")); printf("\n"); // -- my_strcpy. For this function you need a buffer where you // copy the string to. char buffer[BUFFER_LEN]; my_strcpy(buffer, s1); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s1, buffer); my_strcpy(buffer, s2); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s2, buffer); my_strcpy(buffer, s3); printf("my_strcpy(buffer, \"%s\"), buffer = \"%s\"\n", s3, buffer); printf("\n"); // -- my_strcat. You will have to do this yourself... just // look at my_strcpy for an example, and go from there. char dest[BUFFER_LEN]; char src[BUFFER_LEN]; my_strcpy(dest, "Hello "); my_strcpy(src, "Zippy!"); printf("my_strcat(\"Hello \", \"%s\") = \"%s\"\n", src, my_strcat(dest, src)); my_strcpy(dest, ""); my_strcpy(src, "Hi!"); printf("my_strcat(\"\", \"%s\") = \"%s\"\n", src, my_strcat(dest, src)); printf("\n"); // -- my_isspace. You will have to do this for yourself. printf("my_isspace(' ') = %d\n", my_isspace(' ')); printf("my_isspace('\\t') = %d\n", my_isspace('\t')); printf("my_isspace('\\v') = %d\n", my_isspace('\v')); printf("my_isspace('\\f') = %d\n", my_isspace('\f')); printf("my_isspace('\\n') = %d\n", my_isspace('\n')); printf("my_isspace('\\r') = %d\n", my_isspace('\r')); printf("\n"); // -- my_atoi. You will have to do this for yourself. printf("my_atoi(\"%s\") = %d\n", s1, my_atoi(s1)); printf("my_atoi(\"32 students got an F\") = %d\n", my_atoi("32 students got an F")); printf("my_atoi(\"\\n\\t\\v -273\") = %d\n", my_atoi("\n\t\v -273")); printf("\n"); return EXIT_SUCCESS; }
extern Boolean_t f_CompoundStatement( char *types, char *names ) { int retval; /* printf( "Compund Statement: (%s) (%s)\n", types, names ); */ if( SymtabVariable == 0 ) { SymtabVariable = SymtabCreate((void (*)(void*)) f_TypeDestroy ); } if( SymtabClass == 0 ) { SymtabClass = SymtabCreate((void (*)(void*)) f_ClassDestroy ); } if( types && names ) { /* feldolgozzuk a fuggveny argumentum listat */ char *my_types, *types_beg, *types_end; char *my_names, *names_beg, *names_end; int iBreak; my_types = SN_StrDup( types ); my_names = SN_StrDup( names ); types_beg = my_types; names_beg = my_names; iBreak = False; while( ! iBreak ) { if(( types_end = my_strchr( types_beg, ',' ))) { *types_end = 0; } else { iBreak = True; } if(( names_end = my_strchr( names_beg, ',' ))) { *names_end = 0; } else { iBreak = True; } if( *names_beg && types_beg[0] != '.' ) { Type_t Type; Type = f_TypeFromString( types_beg ); if( Type == 0 ) { /* 24.02.97 rigo */ /* int DEFUN(_IO_fflush, (fp), register _IO_FILE *fp ){} eseten elofordul */ /* f_InternalError( 61 ); */ Type = f_TypeCreateInt(); } if( Type->Declarator == 0 ) { Type->Declarator = f_DeclaratorCreate(); Type->Declarator->Name = f_NameCreate( names_beg ); } else { if( Type->Declarator->Name ) { f_InternalError( 62 ); } else { Type->Declarator->Name = f_NameCreate( names_beg ); } } /* felodjuk az esetleges typedef-eket */ Type = f_TypeBasic( Type, start_lineno_g - 1 ); if( SymtabInsert( SymtabVariable , Type->Declarator->Name->pcName , (void *) Type , niveauComp )) { #ifdef SYMTAB_TRACE char acType[10000]; /* old: 1000 */ f_TypeToString( Type, acType, 1 ); printf( "argument type: %s ----- name: %s\n" , acType , Type->Declarator->Name->pcName ); #endif } else { f_TypeDestroy( Type ); } } if( ! iBreak ) { types_beg = types_end + 1; names_beg = names_end + 1; } } ckfree( my_names ); ckfree( my_types ); } retval = compound_statement(); #ifdef SYMTAB_TRACE printf( "vor Clear\n" ); SymtabPrint( SymtabVariable, 0 ); #endif SymtabClear( SymtabVariable ); SymtabClear( SymtabClass ); #ifdef SYMTAB_TRACE printf( "after Clear\n" ); SymtabPrint( SymtabVariable, 0 ); #endif return retval; }
Void CRipZwei2Text::RipScripTable(vector<string> &vec, char *pLine) { u32 i = 0; char *pStart, *pEnd; static TFilter Filter[] = { { "set_chr(", 1 }, { "MES(", 1 }, { "MES_pos(", 1 }, { "chr_rename(", 1 }, { "menuTXT(", 1 }, { "menuEVENT", 5 }, }; for (i = 0; i != countof(Filter); ++i) { if (!strncmp(pLine, Filter[i].szStartWord, strlen(Filter[i].szStartWord))) break; } if (i == countof(Filter)) return; pStart = pLine; for (u32 j = 0; j != Filter[i].u32StartCount; ++j) { pStart = my_strchr(pStart, '"'); if (pStart == NULL) return; ++pStart; } if (pStart[0] == '"') return; if (i) { pEnd = my_strchr(pStart, '"'); if (pEnd == NULL) return; } else { uchar ch; while (1) { ch = *pStart++; if (ch == 0 || ch == '"') return; else if (ch == '[') break; else if (ch > 0x80) ++pStart; } while (1) { ch = *pStart++; if (ch < '0' || ch > '9') break; else if (ch == 0 || ch == ']') return; else if (ch > 0x80) ++pStart; } pEnd = my_strchr(--pStart, ']'); if (pEnd == NULL) return; } vec.push_back(string(pStart, pEnd)); }