⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sec-test.cpp

📁 linux下的任天堂模拟器代码。供大家参考。
💻 CPP
字号:
/*Copyright (C) 2005-2007 Nach, grinvader ( http://www.zsnes.com )This program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseversion 2 as published by the Free Software Foundation.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*//*This is part of a toolkit used to assist in ZSNES developmentThis program tells us is a variable is declared in the wrong section.Or if code is not in an executable section.*/#include <iostream>#include <fstream>#include "strutil.h"using namespace std;#include "fileutil.h"#define LINE_LENGTH 500bool contains_resx(const char *str){  return(!strncmp(str, "resd ", strlen("resd ")) ||         !strncmp(str, "resw ", strlen("resw ")) ||         !strncmp(str, "resb ", strlen("resb ")) ||         strstr(str, " resd ") ||         strstr(str, " resw ") ||         strstr(str, " resb ") ||         strstr(str, ",resd ") ||         strstr(str, ",resw ") ||         strstr(str, ",resb "));}bool contains_dx(const char *str){  return(!strncmp(str, "dd ", strlen("dd ")) ||         !strncmp(str, "dw ", strlen("dw ")) ||         !strncmp(str, "db ", strlen("db ")) ||         strstr(str, " dd ") ||         strstr(str, " dw ") ||         strstr(str, " db ") ||         strstr(str, ",dd ") ||         strstr(str, ",dw ") ||         strstr(str, ",db "));}bool label(const char *str){  return(!strchr(str, ' ') && !strchr(str, '\t') && (str[strlen(str)-1] == ':'));}void handle_file(const char *filename){  enum sections { sec_unknown, sec_bss, sec_data, sec_text, sec_macro };  ifstream file(filename, ios::in);  if (file)  {    char buffer[LINE_LENGTH];    sections cur_section = sec_unknown, prev_section = sec_unknown;    for (size_t i = 1; file.getline(buffer, LINE_LENGTH); i++)    {      char *line = buffer;      char *comment_p = strchr(line, ';');      if (comment_p) { *comment_p = 0; }      if (all_whitespace(line)) { continue; }      for (char *p = line+strlen(line)-1; isspace(*p); p--) { *p = 0; }      while (isspace(*line)) { line++; }      if (!strcasecmp(line, "SECTION .BSS"))      {        prev_section = cur_section;        cur_section = sec_bss;        continue;      }      if (!strcasecmp(line, "SECTION .DATA"))      {        prev_section = cur_section;        cur_section = sec_data;        continue;      }      if (!strcasecmp(line, "SECTION .text"))      {        prev_section = cur_section;        cur_section = sec_text;        continue;      }      if (!strncmp(line, "%macro", strlen("%macro")) ||          !strncmp(line, "%imacro", strlen("%imacro")))      {        prev_section = cur_section;        cur_section = sec_macro;        continue;      }      if (!strncmp(line, "%endmacro", strlen("%endmacro")))      {        cur_section = prev_section;        continue;      }      if ((cur_section != sec_bss) && contains_resx(line))      {        cout << filename << ": line " << i << ": Error, resx in non BSS section. \"" << line << "\"" << endl;      }      if ((cur_section != sec_data) && contains_dx(line))      {        cout << filename << ": line " << i << ": Error, dx in non DATA section. \"" << line << "\"" << endl;      }      if ((cur_section != sec_text) && (cur_section != sec_macro))      {        if (!contains_resx(line) && !contains_dx(line) && !label(line) && !strstr(line, "RMREGS") &&            !strstr(line, "NEWSYM") && !strstr(line, "EXTSYM") && !strstr(line, " equ ") &&            (*line != '%') && strncasecmp(line, "ALIGN", strlen("ALIGN")) &&            strncasecmp(line, "bits ", strlen("bits ")))        {          cout << filename << ": line " << i << ": Error, code in non TEXT section. \"" << line << "\"" << endl;        }      }    }  }  else  {    cout << "Error opening: " << filename << endl;  }}void section_test(const char *filename, struct stat& stat_buffer){  if (is_asm_file(filename))  {    handle_file(filename);  }}int main(){  parse_dir(".", section_test);  return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -