END_TEST START_TEST(test_strCountChar) { fail_unless(strCountChar("foobarfoo", 'f') == 2, NULL); fail_unless(strCountChar("foobarfoo", 'b') == 1, NULL); fail_unless(strCountChar("ff", 'f') == 2, NULL); fail_unless(strCountChar("f", 'f') == 1, NULL); fail_unless(strCountChar("f", 'b') == 0, NULL); }
int AsmCodeSize(AsmCode *code) { // 計算指令的大小 Array *tokens = code->tokens; char *arg0 = AsmCodeArg(code, 0); switch (code->opCode) { // 根據運算碼 op case OP_RESW : // 如果是RESW return 4 * atoi(arg0); // 大小為 4*保留量 case OP_RESB : // 如果是RESB return atoi(arg0); // 大小為 1*保留量 case OP_WORD : // 如果是WORD return 4 * (strCountChar(arg0, ",")+1); // 大小為 4*參數個數 case OP_BYTE : { // 如果是BYTE int i, si, size=0; for (i=code->argStart; i<tokens->count; i++) { char *item = tokens->item[i]; if (item[0] == '"') for (si=1; item[si] != '"'; si++) size += 1; else size += 1; } return size; } case OP_NULL : // 如果只是標記 return 0; // 大小為 0 default : // 其他情形 (指令) return 4; // 大小為 4 } }