aboutsummaryrefslogtreecommitdiff
path: root/project/src/wszst.c
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2021-02-03 16:42:38 +0100
committerWiimm <wiimm@wiimm.de>2021-02-03 16:42:38 +0100
commit69894f75254cd630e2e4fe1422044c6b7d6adb5f (patch)
tree139b93491a16987905c53c4e10bc8b44034de278 /project/src/wszst.c
parenta3d605bc52ba3e53720d0dee29a470661b35a1c2 (diff)
SZS 2.23a
Diffstat (limited to '')
-rw-r--r--project/src/wszst.c177
1 files changed, 172 insertions, 5 deletions
diff --git a/project/src/wszst.c b/project/src/wszst.c
index b7836d5..8bc93ea 100644
--- a/project/src/wszst.c
+++ b/project/src/wszst.c
@@ -17,7 +17,7 @@
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
- * Copyright (c) 2011-2020 by Dirk Clemens <wiimm@wiimm.de> *
+ * Copyright (c) 2011-2021 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
@@ -976,6 +976,37 @@ enumError cmd_subfile()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command _TESTNORM ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+void PrintNorm ( const szs_norm_t *norm )
+{
+ if ( !norm || !norm->f )
+ return;
+
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void SetupNormByOptions ( szs_norm_t *norm )
+{
+ DASSERT(norm);
+ memset(norm,0,sizeof(*norm));
+ memset(norm->modified,'-',SZI__N);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+enumError cmd_testnorm()
+{
+ if (!first_param)
+ return ERR_OK;
+
+ return ERR_OK;
+}
+
+///////////////////////////////////////////////////////////////////////////////
/////////////// command BRSUB ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[check_brsub_t]]
@@ -1860,7 +1891,10 @@ static void SetupPrintScript ( PrintScript_t *ps )
InitializePrintScript(ps);
ps->varname = script_varname;
+ ps->force_case = opt_case;
ps->create_array = script_array > 0;
+ ps->ena_empty = brief_count < 2 ;
+ ps->ena_comments = brief_count < 1 ;
switch(script_fform)
{
@@ -2000,9 +2034,12 @@ static enumError cmd_analyze()
"used_pos_suggest=\"%s\"\n"
"ktpt2=\"%s %4.2f %4.2f\"\n"
"gobj=\"%s\"\n"
- "special_kmp=\"%s\"\n"
"special_files=\"%s\"\n"
+ "original_files=\"%s\"\n"
+ "modified_files=\"%s\"\n"
+ "special_kmp=\"%s\"\n"
"lex_sections=\"%s\"\n"
+ "lex_features=\"%s\"\n"
"warn=\"%u=%s\"\n"
"ct_attributes=\"%s\"\n"
"name_attributes=\"%.*s\"\n"
@@ -2047,9 +2084,12 @@ static enumError cmd_analyze()
,as.kmp_finish.distance
,as.kmp_finish.dir_delta
,as.gobj_info
- ,CreateSpecialInfoKMP(szs.kmp_special,true,"")
- ,CreateSpecialFileInfo(&szs,true,"")
- ,CreateSectionInfoLEX(szs.have_lex,true,"")
+ ,CreateSpecialFileInfo(&szs,~(1<<HFM_NONE),true,"")
+ ,CreateSpecialFileInfo(&szs,1<<HFM_ORIGINAL,true,"")
+ ,CreateSpecialFileInfo(&szs,1<<HFM_MODIFIED,true,"")
+ ,CreateSpecialInfoKMP(szs.have.kmp,true,"")
+ ,CreateSectionInfoLEX(szs.have.lex_sect,true,"")
+ ,CreateFeatureInfoLEX(szs.have.lex_feat,true,"")
,szs.warn_bits,GetWarnSZSNames(szs.warn_bits,' ')
,as.ct_attrib+1
,name_attrib_len,name_attrib
@@ -2092,6 +2132,125 @@ static enumError cmd_analyze()
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// command features ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static enumError cmd_features()
+{
+ static ccp def_path = "\1P/\1F\1?T";
+ CheckOptDest("-",false);
+ char dest[PATH_MAX];
+ enumError max_err = ERR_OK;
+ if (!strcmp(opt_dest,"-"))
+ fputc('\n',stdout);
+
+ szs_file_t szs;
+ InitializeSZS(&szs);
+
+ analyse_szs_t as;
+ InitializeAnalyseSZS(&as);
+
+ features_szs_t fs;
+ InitializeFeaturesSZS(&fs);
+ const int comments = brief_count > 0 ? -brief_count : long_count;
+
+ File_t fo;
+ InitializeFile(&fo);
+
+ PrintScript_t ps;
+ SetupPrintScript(&ps);
+ if ( ps.fform == PSFF_UNKNOWN && comments >= 0 )
+ ps.fform = PSFF_ASSIGN;
+
+ ParamList_t *param;
+ for ( param = first_param; param; param = param->next )
+ {
+ NORMALIZE_FILENAME_PARAM(param);
+
+ ResetSZS(&szs);
+ enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
+ continue;
+ if ( err > ERR_WARNING )
+ {
+ if ( max_err < err )
+ max_err = err;
+ continue;
+ }
+
+ if (!fo.f)
+ SubstDest(dest,sizeof(dest),param->arg,opt_dest,def_path,
+ GetExtFF(script_fform,0),false);
+
+ if ( verbose > 0 )
+ {
+ fprintf(stdlog,"%sANALYZE %s:%s => %s:%s\n",
+ verbose > 0 ? "\n" : "",
+ GetNameFF(szs.fform_file,szs.fform_arch), szs.fname,
+ GetNameFF(script_fform,0), dest );
+ fflush(stdlog);
+ }
+
+
+ //--- analyse szs
+
+ AnalyseSZS(&as,false,&szs,param->arg);
+ SetupFeaturesSZS(&fs,&as.have,false);
+
+
+ //--- status
+
+ if ( err >= ERR_WARNING )
+ {
+ if ( max_err < err )
+ max_err = err;
+ continue;
+ }
+
+ if (!fo.f)
+ {
+ enumError err = CreateFile(&fo,false,dest,FM_STDIO|FM_OVERWRITE);
+ if (err)
+ {
+ max_err = err;
+ break;
+ }
+ ps.f = fo.f;
+ PrintScriptHeader(&ps);
+ }
+
+
+ //--- name attributes ('dest' can be used now)
+
+ PrintEscapedString(dest,sizeof(dest),param->arg,-1,CHMD_UTF8,'"',0);
+
+
+ //--- print result
+
+ PrintScriptVars(&ps,1,"file=\"%s\"\n",dest);
+ PrintFeaturesSZS( &ps, &fs, false, comments,
+ opt_pmodes, opt_fmodes_include, opt_fmodes_exclude );
+ PutScriptVars(&ps,2,0);
+
+ if (!script_array)
+ {
+ PrintScriptFooter(&ps);
+ ps.f = 0;
+ ResetFile(&fo,0);
+ }
+ }
+
+ PrintScriptFooter(&ps);
+ ResetPrintScript(&ps);
+ ResetFile(&fo,0);
+ ResetFeaturesSZS(&fs);
+ ResetAnalyseSZS(&as);
+ ResetSZS(&szs);
+ return max_err;
+}
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// command distribution ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -4945,6 +5104,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_ALLOW_ALL: allow_all = true; break;
case GO_COMPATIBLE: err += ScanOptCompatible(optarg); break;
case GO_WIDTH: err += ScanOptWidth(optarg); break;
+ case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break;
case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break;
case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break;
case GO_LOGGING: logging++; break;
@@ -5020,6 +5180,8 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_LT_GAME_MODE: err += ScanOptLtGameMode(optarg); break;
case GO_LT_ENGINE: err += ScanOptLtEngine(optarg); break;
case GO_LT_RANDOM: err += ScanOptLtRandom(optarg); break;
+ case GO_LEX_FEATURES: opt_lex_features = true; break;
+ case GO_LEX_RM_FEAT: opt_lex_rm_features = true; break;
case GO_LEX_PURGE: opt_lex_purge = true; break;
case GO_UTF_8: use_utf8 = true; break;
@@ -5078,6 +5240,9 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_VAR: script_varname = optarg; break;
case GO_ARRAY: script_array++; break;
case GO_AVAR: script_array++; script_varname = optarg; break;
+ case GO_CASE: err += ScanOptCase(optarg); break;
+ case GO_PMODES: opt_pmodes++; break;
+ case GO_FMODES: err += ScanOptFModes(optarg); break;
case GO_PT_DIR: err += ScanOptPtDir(optarg); break;
case GO_LINKS: opt_links = true; break;
@@ -5262,6 +5427,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_CODE: err = cmd_code(); break;
case CMD_RECODE: err = cmd_recode(); break;
case CMD_SUBFILE: err = cmd_subfile(); break;
+ case CMD_TESTNORM: err = cmd_testnorm(); break;
case CMD_LIST: err = cmd_list(0); break;
case CMD_LIST_L: err = cmd_list(1); break;
@@ -5283,6 +5449,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_MEMORY_A: set_all(1); err = cmd_memory(); break;
case CMD_SHA1: err = cmd_sha1(); break;
case CMD_ANALYZE: err = cmd_analyze(); break;
+ case CMD_FEATURES: err = cmd_features(); break;
case CMD_DISTRIBUTION: err = cmd_distribution(); break;
case CMD_DIFF: err = cmd_diff(); break;