\n". "
\r\n$sDate: $sName <$sEmail>
\r\n";
$aChangeLog[++$iChangeLog] =
array("sDate" => $sDate,
"sName" => $sName,
"sEmail" => $sEmail,
"cModules" => 0,
"aModules" => array()
);
$iModule = -1;
}
else
{
/* example lines:
* - KERNEL32: o Add rename entry for winspool.drv to odin.ini. (if not present)
* o Check pointers in Read/WriteProcessMemory
* o Add OLE key during installation:
* [HKEY_LOCAL_MACHINE\Software\Microsoft\OLE]
* "EnableDCOM"="Y"
* "EnableRemoteConnect"="N"
*
* - WINSPOOL: o Removed changes. (now generates winspool.dll again)
*/
/* Look for new module */
if ($sTrimmed[0] == '-'
&& ($iColon = strpos($sTrimmed, ":")) > 1
&& strlen($sModule = trim(substr($sTrimmed, 1, $iColon - 1))) > 0
&& strlen($sModule) < 42
)
{
$sTrimmed = ltrim(substr($sTrimmed, $iColon+1));
$sLine = substr($sLine, strpos($sLine, ':')+1);
$aChangeLog[$iChangeLog]["cModules"] = ++$iModule + 1;
$aChangeLog[$iChangeLog]["aModules"][$iModule] =
array("sModule" => $sModule,
"cChanges" => 0,
"aChanges" => array()
);
$iChange = 0;
//echo "$sModule:\r\n";
}
/* Look for start of new point */
if ( $sTrimmed[0] == "ú"
|| ($sTrimmed[0] == "o" && $sTrimmed[1] == " ")
)
{
if ($iChange > 0 ||
isset($aChangeLog[$iChangeLog]["aModules"][$iModule]["aChanges"][$iChange]))
++$iChange;
$aChangeLog[$iChangeLog]["aModules"][$iModule]["cChanges"] = $iChange + 1;
$sTrimmed = ltrim(substr($sTrimmed, 1));
//echo " o ";
}
/* If not empty line, then add it to current change description */
if (strlen($sTrimmed) > 0)
{
if (isset($aChangeLog[$iChangeLog]["aModules"][$iModule]["aChanges"][$iChange]))
$aChangeLog[$iChangeLog]["aModules"][$iModule]["aChanges"][$iChange] .=
" ".$sTrimmed;
else
$aChangeLog[$iChangeLog]["aModules"][$iModule]["aChanges"][$iChange] =
$sTrimmed;
/* check for and*/ $sTrimmed = strtolower($sTrimmed); $iPre = strpos($sTrimmed, "
\n";
if ($fPre && $iEndPre > $iPre)
$fPre = false;
if (!$fPre && $iPre > $iEndPre)
$fPre = true;
/* add newline if inside a */
if ($fPre)
$aChangeLog[$iChangeLog]["aModules"][$iModule]["aChanges"][$iChange] .=
"\n";
}
}
}
$aChangeLog["cEntries"] = $iChangeLog+1;
/* return array */
return $aChangeLog;
}
/**
* Dumps the array - debugging.
* @returns nothing.
* @param $aChangeLog Array returned by ChangeLog_Read.
* @status
* @author knut st. osmundsen (knut.stange.osmundsen@mynd.no)
* @remark
*/
function ChangeLog_Dump($aChangeLog)
{
echo "Dump \r\n";
for ($iChangeLog = 0; $iChangeLog < $aChangeLog["cEntries"]; $iChangeLog++)
{
$aLogEntry = $aChangeLog[$iChangeLog];
echo $aLogEntry["sDate"].": ".$aLogEntry["sName"]." <".$aLogEntry["sEmail"]."> ".
$aLogEntry["cModules"]." modules\r\n";
$aModules = $aLogEntry["aModules"];
for ($iModule = 0; $iModule < $aLogEntry["cModules"]; $iModule++)
{
//$aModule = $aModules[$iModule];
$aModule = $aChangeLog[$iChangeLog]["aModules"][$iModule];
echo " - ".$aModule["sModule"]." ".$aModule["cChanges"]." changes\r\n";
if ($aModule["cChanges"] > 0)
{
for ($iChange = 0; $iChange < $aModule["cChanges"]; $iChange++)
echo " o ".$aModule["aChanges"][$iChange]."\r\n";
}
else
echo " ".$aModule["aChanges"][0]."\r\n";
}
} /* while */
}
/**
* Write the entrie change log to a table.
* @returns nothing.
* @param $aChangeLog Changelog array - output from ChangeLog_Read.
* @sketch
* @status
* @author knut st. osmundsen (knut.stange.osmundsen@mynd.no)
* @remark
*/
function ChangeLog_MakeTable($aChangeLog)
{
echo "\n".
"
".$sModule."\n";
echo "
|