<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>ソース解析</title>
<script type="text/javascript"><!--
var doc = new Array();
var OpenClose = function (val) {
this.openString = "(";
this.closeString = ")";
this.val = val;
this.matchString = "";
this.leftString = "";
this.rightString = "";
this.leftIndex = 0;
this.rightIndex = 0;
this.clear = function () {
this.matchString = "";
this.leftString = "";
this.rightString = "";
this.leftIndex = 0;
this.rightIndex = 0;
}
this.exec = function (val) {
if(typeof(val) != "undefined") this.val = val;
this.clear();
for(this.leftIndex = 0; this.leftIndex < this.val.length; this.leftIndex++) {
if (this.val.substr(this.leftIndex, this.openString.length)==this.openString) {
this.rightIndex = this.leftIndex;
var node = 1;
while(node != 0) { // 括弧の終端探索
this.rightIndex++;
if(this.rightIndex > this.val.length) return false;
if(this.val.substr(this.rightIndex, this.openString.length ) == this.openString ) node++;
if(this.val.substr(this.rightIndex, this.closeString.length) == this.closeString) node--;
}
this.leftString = this.val.substr(0, this.leftIndex);
this.matchString = this.val.substring(this.leftIndex + 1, this.rightIndex);
this.rightString = this.val.substr(this.rightIndex + 1);
// dbg("left:" + this.leftIndex);dbg(this.leftString);
// txtDebug.innerHTML += "match:" + this.matchString + "<p>";
// txtDebug.innerHTML += "right:" + this.rightIndex + "<BR>" + this.rightString + "<p>";
return true;
}
}
}
}
function getText() {
var l = new String(document.getElementById("txtSource").value);
l = l.replace(/\/\*(.*?)\*\//g, ""); // コメント
l = l.replace(/(\/\/.*?)$/g, ""); // コメント(C++)
l = l.replace(/^[\t ]*/gm, "\r");
l = l.replace(/[\t ]*$/gm, "\r"); // ブランク削除
l = l.replace(/[\t ]*\\$/gm, "\\\r"); // \crの前のブランクを消す
l = l.replace(/\r+/g, "\r");
l = l.replace(/\\\r/g, ""); // \cr を消す
// インクルードを消す
l = l.replace(/^#(include|undef)[^\r]*/gm, "");
// #ifマクロの後ろに"{"をつける
l = l.replace(/^(#if.*)$/gm, "\r;\r$1\r{\r");
// #endifマクロを"}"に変換
l = l.replace(/^(#endif.*$)/gm, "\r;\r}\r");
// #elseマクロの前後に{}をつける
l = l.replace(/^#else/gm, "\r}\r;\r\#else\r{\r");
l = l.replace(/#define(.*)$/gm, "");
// if/while/until/switch/for特化
// l = l.replace(/\r(if|while|until|switch|for|do)\s*($openclose)\s*([^\{](?:|if|while|until|switch|for|do)[^\}]*)/g,
// "\r$1$2{\r$3\r}\r");
// 変数宣言を消す
l = l.replace(/^\w+(?:\s+\w+)*(?:(?:\s*\*)?\s+(?:\*\s*)?)+[\w\[\]]+;/gm, "");
// キャストを消す
// l = l.replace(/(?:\*\s*)?\([\w\s\*&]*\)\s*&/g, "");
// 変数宣言+初期化
l = l.replace(/^\w+\s+([\w\[\]]+\s*=\s*[\w\{\}]+\s*[\w\[\]]*\s*;)/gm, "\r$1");
l = l.replace(/(?:\*\s*)?\([\w\s\*&]*\)\s*([\(&a-zA-Z])/g, "$1");
l = l.replace(/^\}[\t ]*([^\r])/gm, "\r}\r$1");
l = l.replace(/[\r\n]/g, "");
// 行末文字で分割
var s = new String();
var ar = l.match(/[^\:\;\{\}]*[\:\;\{\}]/g);
for(i = 0; i < ar.length; i++) {
var n = new String(ar[i]);
n = n.replace(/^\s+/gm, "");
n = n.replace(/\s+$/gm, ""); // ブランク削除
n = n.replace(/^\;$/gm, ""); // 先頭;の削除
if(n.length != 0) s += n;
}
var r = new OpenClose();
r.openString = "{";
r.closeString = "}";
var i = 0;
while(r.exec(s)){
var func = new String(r.leftString);
var str = new String(r.matchString);
s = new String(r.rightString);
// txtDebug.innerHTML += "<p>func="+func+"<p>";
// txtDebug.innerHTML += "<p>str="+str+"<p>";
// txtDebug.innerHTML += "<p>s="+s+"<p>";
var ar = func.match(/(\w+\s*)(\(.*\))/);
if(!ar) continue;
doc[i] = new Object();
doc[i].symbol = ar[ar.length - 2];
doc[i].func = func;
doc[i].str = str;
i++;
}
document.getElementById("selFunction").innerText = "";
for(var i = 0; i < doc.length; i++) {
var e = document.createElement('option');
// value オプションにiを設定
e.setAttribute('value', i);
// OPTION タグ内のテキスト設定
e.appendChild(document.createTextNode(doc[i].symbol));
// SELECT Listへ登録
document.getElementById("selFunction").appendChild(e);
}
// txtDebug.innerHTML += lines.join("<BR>");
//alert(l);
}
function dbg(str) {
document.getElementById("txtDebug").innerHTML += str + '<br>';
}
function getFunction() {
var index = parseInt(document.getElementById("selFunction").value);
if(isNaN(index)) return;
var dat = nest(doc[index].str);
var win = window.open('', '_blank', 'directories=no,location=no,menubar=no,status=no,toolbar=no,scrollbars=yes');
// win.navigator.language = 'ja';
win.document.title = doc[index].symbol + ' 詳細設計書(PAD)';
var tbl = win.document.createElement("TABLE");
var tblBody = win.document.createElement("TBODY");
var row = win.document.createElement("TR");
for(var i = 0; i < 100; i++) {
var cell = win.document.createElement("TD");
var cellText = win.document.createTextNode(i);//"\u00a0");
cell.appendChild(cellText);
cell.width = 10;
cell.style.fontSize = '8pt';
row.appendChild(cell);
}
tblBody.appendChild(row);
var row = win.document.createElement("TR");
var cell = win.document.createElement("TH");
var cellText = win.document.createTextNode(doc[index].func);
cell.appendChild(cellText);
cell.colSpan = 20;
cell.align = 'left';
cell.width = 200;
cell.style.borderWidth = '2px';
cell.style.borderStyle = 'solid';
cell.style.borderColor = 'black';
row.appendChild(cell);
row.style.borderStyle = 'none'
tblBody.appendChild(row);
viewLine(tblBody, 0);
padView(dat, false, 0);
viewLine(tblBody, 0);
var row = win.document.createElement("TR");
var cell = win.document.createElement("TH");
var cellText = win.document.createTextNode('End of ' + doc[index].symbol);
cell.appendChild(cellText);
cell.colSpan = 20;
cell.align = 'left';
cell.width = 200;
cell.style.borderWidth = '2px';
cell.style.borderStyle = 'solid';
cell.style.borderColor = 'black';
row.appendChild(cell);
row.style.borderStyle = 'none'
tblBody.appendChild(row);
tbl.appendChild(tblBody);
tbl.setAttribute('CELLSPACING', 0);
tbl.setAttribute('CELLPADDING', 0);
win.document.body.appendChild(tbl);
// ネスト解析処理
function nest(str) {
var datas = new Array();
while(1) {
var r = new OpenClose();
r.openString = "{";
r.closeString = "}";
if(r.exec(str)) {
str = new String(r.rightString);
addMethod(r.leftString);
var dat = datas.pop();
if(dat != null) {
dat.obj = nest(r.matchString);
datas.push(dat);
}
}
else {
addMethod(str);
break;
}
}
return datas;
function addMethod(str) {
while(1) {
var r = new OpenClose();
r.openString = "(";
r.closeString = ")";
if(r.exec(str)) {
addNomalMethod(r.leftString);
var dat = datas.pop();
if(dat != null) {
dat.pram = new String(r.matchString);
datas.push(dat);
}
str = new String(r.rightString);
}
else {
addNomalMethod(str);
return;
}
}
function addNomalMethod(str) {
var ar = str.match(/[^\:\;\{\}]*[\:\;\{\}]/g);
var s = new String(RegExp.rightContext);
if(ar) {
for(var i = 0; i < ar.length; i++) {
addMain(new String(ar[i]));
}
addMain(s);
return;
}
addMain(str);
return;
function addMain(str) {
if(str.match(/^[\;\:\{\}]?$/)) return;
var dat = new Object();
dat.obj = false;
dat.parm = false;
dat.method = str;
datas.push(dat);
}
}
}
}
function padView(dat, flag, cel, row) {
for(var i = 0; i < dat.length; i++) {
dbg(dat[i].method + ":" + dat[i].pram);
if(i != 0) viewLine(tblBody, cel);
if(!flag) row = win.document.createElement("TR");
else {
if(row.rowSpan) row.rowSpan += 2;
else row.rowSpan = 2;
}
addLeft(row, i==0 ? 0 : cel, (i == 0 && flag))
// 本体
var cell = win.document.createElement("TD");
var s = new String(dat[i].method);
if(dat[i].pram) s += '(' + dat[i].pram + ')';
var cellText = win.document.createTextNode(i+":"+s);
cell.appendChild(cellText);
cell.align = 'left';
cell.vAlign = 'top';
cell.width = 100;
cell.colSpan = 10;
cell.style.borderWidth = '1px';
cell.style.borderStyle = 'solid';
cell.style.borderColor = 'black';
cell.style.fontSize = '9pt';
row.appendChild(cell);
if(dat[i].obj) padView(dat[i].obj, true, cel+1, row);
// dbg("row=" + row.rowSpan + " : cell="+cel);
row.style.borderStyle = 'none'
tblBody.appendChild(row);
flag = false;
}
}
function viewLine(base, cel) {
var row = win.document.createElement("TR");
addLeft(row, cel);
var cell = win.document.createElement("td");
var cellText = win.document.createTextNode("\u00a0");
cell.appendChild(cellText);
cell.style.borderLeftWidth = '1px';
cell.style.borderLeftStyle = 'solid';
cell.style.borderLeftColor = 'black';
cell.style.fontSize = '8pt';
row.appendChild(cell);
row.style.borderStyle = 'none'
base.appendChild(row);
}
function addLeft(row, cel, flag) {
var cell = win.document.createElement("TD");
var cellText = win.document.createTextNode(cel);//"\u00a0");
cell.appendChild(cellText);
cell.width = cel*(100 + 10)+1;
cell.colSpan = cel*(10+1)+1;
cell.style.fontSize = '8pt';
if(flag) { // 上位からの線を引く
cell.style.borderTopWidth = '1px';
cell.style.borderTopStyle = 'solid';
cell.style.borderTopColor = 'black';
}
row.appendChild(cell);
}
}
//--></script>
</head>
<body>
<textarea cols=80 rows=5 id="txtSource">
void luc0_blcdchg(
UCHAR mod_id , /* コール元制御ID 700V10C000616*/
UCHAR fact_id /* コール元制御内ID 700V10C000616*/
)
{ /* */
UCHAR shlt_flg; /* 退避情報フラグ */
USHORT lun; /* 600V00C000126 r008 */
UCHAR oth_ctl; /* 他コントローラ番号 r008 */
UCHAR trc_msg[3]; /* LU切り替えトレースメッセージ r002 */
USHORT lu_count; /* 定義LUループカウンタ r307 */
UCHAR own_inf; /* 自CTL、自コア情報フラグ */
/* DF800対応 */
#if defined (DF_HIGH)
/* 800V30C007801 */
char trc_ret; /* コントローラ間通信リターン値 */
#endif /* 800V30C007801 */
/* */
LUC_LMSET; /* 切り替え情報をLMに設定 */
COM4_CP2_CL1(&inmt_calc.luc_chgadr->shlt_flg,&shlt_flg);
/* 800V31C023504 */
/* 退避情報フラグ取得 */
#ifdef TRACEON
luc0_blstrc(shlt_flg,mod_id,fact_id);
/* 閉塞LU切り替え開始トレース */
/* 700V10C000616 */
#endif
if(shlt_flg == C_OFF){ /* 退避情報フラグはOFF? */
COM4_CP2_LCN(&luc0_luinf.lu_ctl[0],
&inmt_calc.luc_chgadr->lu_ctl[0],
C_CONST_LU_SYSTEMMAX);
/* 800V31C023504 */
/* LU担当コントローラ情報退避 */
/* r202 */
COM4_CP2_LC4(&luc0_luinf.dir_ctl[0],
&inmt_calc.luc_chgadr->dir_ctl[0]);
/* 800V31C023504 */
/* Dir担当コントローラ情報退避 */
} /* DF800対応 */
COM4_GET_DIR((inmt_ctltbl.ctlno^OTH_CTL),luc0_luinf.chg_dir);
/* LU切替対象Dir設定 r008 */
if(rcfr_systbl.ludef != NO_LUN){ /* LU定義あり r008 */
if(luc0_luinf.chg_dir == C_LUC_DIR0){
/* DIR0切り替え r008 */
luc0_luinf.chg_dir = C_LUC_NODIR;
/* 切替対象DIRクリア r008 */
for(lun=0,lu_count=0;lu_count<rcfr_systbl.ludef;lun++){
/* LUN定義数分 r307 */
if(rcfr_lusttbl.lust[lun] != C_RCF_LU_UNDEF){
/* LU定義済み? r307 */
lu_count++; /* LU定義カウントアップ r307 */
if(luc0_luinf.lu_dir[lun] == C_LUC_DIR0){
/* LU管理Dir情報にDIR0? r008 */
luc0_luinf.chg_dir = C_LUC_DIR0;
/* 切替対象DIRにDIR0 r008 */
break; /* r008 */
} /* r008 */
} /* r307 */
} /* r307 */
} /* r008 */
else if(luc0_luinf.chg_dir == C_LUC_DIR1){
/* DIR1切り替え r008 */
luc0_luinf.chg_dir = C_LUC_NODIR;
/* 切替対象DIRクリア r008 */
for(lun=0,lu_count=0;lu_count<rcfr_systbl.ludef;lun++){
/* LUN定義数分 r307 */
if(rcfr_lusttbl.lust[lun] != C_RCF_LU_UNDEF){
/* LU定義済み? r307 */
lu_count++; /* LU定義カウントアップ r307 */
if(luc0_luinf.lu_dir[lun] == C_LUC_DIR1){
/* LU管理Dir情報にDIR1? r008 */
luc0_luinf.chg_dir = C_LUC_DIR1;
/* 切替対象DIRにDIR1 r008 */
break; /* r008 */
} /* r008 */
} /* r307 */
} /* r307 */
} /* r008 */
else if(luc0_luinf.chg_dir == C_LUC_2DIR){
/* DIR0,1切り替え r008 */
luc0_luinf.chg_dir = inmt_ctltbl.ctlno;
/* 切替対象DIRに自コントローラ番号 */
/* r008 */
oth_ctl = (UCHAR)(inmt_ctltbl.ctlno^OTH_CTL);
/* 他コントローラ番号 r008 */
for(lun=0,lu_count=0;lu_count<rcfr_systbl.ludef;lun++){
/* LUN定義数分 r307 */
if(rcfr_lusttbl.lust[lun] != C_RCF_LU_UNDEF){
/* LU定義済み? r307 */
lu_count++; /* LU定義カウントアップ r307 */
if(luc0_luinf.lu_dir[lun] == oth_ctl){
/* LU管理Dir情報に他コントローラ? */
/* r008 */
luc0_luinf.chg_dir = C_LUC_2DIR;
/* 切替対象DIRにDIR0 r008 */
break; /* r008 */
} /* r008 */
} /* r307 */
} /* r307 */
} /* r008 */
else /* 700V10C000616 QAC対策 */
{ /* 上記以外の場合 */
; /* NOP */
} /* 700V10C000616 */
if(luc0_luinf.chg_dir != C_LUC_NODIR){
/* LU切替有り? r008 */
LUC_OWN_INF(own_inf); /* 自CTL、自コア情報取得 */
/* DF800対応 */
COM4_CP2_LC1(&own_inf,
&inmt_calc.luc_mngtbladr->exeinf);
/* 800V31C023504 */
/* LU切替関数情報設定 r008 */
/* DF800対応 */
hscc_moveque_start(C_HS_CMDMV_MODE_CTL,
(UCHAR)(inmt_ctltbl.ctlno^OTH_CTL),
0,
0);
/* コマンド以降開始 DF800対応 */
/* 800V10C079001 */
if(luc0_luinf.chg_dir == C_LUC_2DIR){
/* r008 */
luc0_luinf.dir_ctl[0] = inmt_ctltbl.ctlno;
/* Dir担当CTL情報設定(ローカル) */
/* r008 */
luc0_luinf.dir_ctl[1] = inmt_ctltbl.ctlno;
/* Dir担当CTL情報設定(ローカル) */
/* r008 */
for(lun=0,lu_count=0;lu_count<rcfr_systbl.ludef;lun++){
/* LUN定義数分 r307 */
if(rcfr_lusttbl.lust[lun] != C_RCF_LU_UNDEF){
/* LU定義済み? r307 */
lu_count++; /* LU定義カウントアップ r307 */
luc0_luinf.lu_ctl[lun] = inmt_ctltbl.ctlno;
/* LU担当CTL情報設定(ローカル) */
} /* r307 */
} /* r307 */
} /* r008 */
else{ /* r008 */
luc0_luinf.dir_ctl[luc0_luinf.chg_dir]
= inmt_ctltbl.ctlno;
/* Dir担当CTL情報設定(ローカル) */
/* r008 */
for(lun=0,lu_count=0;lu_count<rcfr_systbl.ludef;lun++){
/* LUN定義数分 r307 */
if(rcfr_lusttbl.lust[lun] != C_RCF_LU_UNDEF){
/* LU定義済み? r307 */
lu_count++; /* LU定義カウントアップ r307 */
if(luc0_luinf.lu_dir[lun]
== luc0_luinf.chg_dir){
/* 切り替え対象のLUN? r008 */
luc0_luinf.lu_ctl[lun] = inmt_ctltbl.ctlno;
/* LU担当CTL情報設定(ローカル) */
} /* r008 */
} /* r307 */
} /* r307 */
} /* r008 */
COM4_CP2_LC4(&luc0_luinf.dir_ctl[0],
&inmt_calc.luc_mngtbladr->dir_ctl[0]);
/* 800V31C023504 */
/* Dir担当CTL情報設定 r008 */
/* DF800対応 */
COM4_CP2_LCN(&luc0_luinf.lu_ctl[0],
&inmt_calc.luc_mngtbladr->lu_ctl[0],C_CONST_LU_SYSTEMMAX);
/* 800V31C023504 */
/* LU担当CTL情報設定 r008 */
/* r202 */
#if defined (DF_HIGH)
/* 800V30C007801 */
LUC_CTL_TRNS(C_PRO_LUC_RMRNRQ,0,C_PRO_LUC_NOTEXE,0,
C_PRO_SEND_ALL_CORE,trc_ret);
/* ローカルメモリ更新要求 */
/* 800V30C007801 */
if(trc_ret != C_OK)
{
} /* remark対応 */
/* 800V30C007801 */
#endif /* 800V30C007801 */
luc0_luinf.cache_inf = C_ON;
/* キャッシュ切り替え実行情報ON */
rchs_luchg(C_RCH_MD_LC_LUCHG);
/* キャッシュ切り替え処理 */
/* 削除 r004 */
scp0_dirchg_rep(luc0_luinf.chg_dir);
/* Dir切り替え終了報告 */
/* DF800対応 */
/* 800V10C039908 */
/* DF800対応 */
memset(&luc0_dirctmpbmp,0,sizeof(luc0_dirctmpbmp));
/**** 700V30C037436 **************************************/
rcfa_tcabmpclr_luc(C_RCF_512DEL_DIR,
C_ON,
C_CONST_MP0,
luc0_luinf.chg_dir,
&luc0_dirctmpbmp[0]);
/* 構成制御TCA差分ビットマップクリア */
/* 関数コール */
/* 通信発行フラグ:ON */
/************************************** 700V30C037436 ****/
/**** 700V35C007003 **************************************/
rvmm_dirchg_init(C_RVM_LASTSBCHG_DIRCHG,
&luc0_dirctmpbmp[0]);
/* RVR管理・関数コール */
/************************************** 700V35C007003 ****/
/* 800V10C039908 */
hscc_moveque_end(); /* コマンド移行完了 DF800対応 */
COM4_CP2_VC1(C_LUC_NOCTL,
&inmt_calc.luc_mngtbladr->exeinf);
/* 800V31C023504 */
/* LU切り替え関数情報設定 */
luc0_luinf.cache_inf = C_OFF;
/* キャッシュ切り替え実行情報OFF */
} /* r008 */
} /* r008 */
trc_msg[0] = 'B'; /* LU切り替えトレースメッセージ r002 */
trc_msg[1] = 'L'; /* LU切り替えトレースメッセージ r002 */
trc_msg[2] = 'C'; /* LU切り替えトレースメッセージ r002 */
luc0_dirfnc_trc(C_RCH_MD_LC_LUCHG, trc_msg, mod_id, fact_id);
/* LU切替トレース 700V10C000616 */
#ifdef TRACEON
luc0_bletrc(); /* 閉塞LU切り替え終了トレース */
#endif
} /* */
</textarea><br>
<input type="button" name="btnSubmit" value="解析" onClick="getText();"><br>
<select id="selFunction"></select>
<input type="button" name="btnSubmit" value="表示" onClick="getFunction();"><br>
<br>
<div align="left" id="txtSS">
</div>
<div align="left" id="txtDebug">
</div>
</body>
</html>
最終更新:2009年07月10日 20:02