New layout

This commit is contained in:
rmc 2023-12-07 15:13:38 -05:00
parent 55c494b460
commit c6adcd0e9c
No known key found for this signature in database
GPG Key ID: 5633EC10309D77D1
28 changed files with 636 additions and 534 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*.DS_[Ss]tore
*._*
.jekyll-metadata
.jekyll-cache
_site

6
Gemfile Normal file
View File

@ -0,0 +1,6 @@
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
gem "jekyll"

70
Gemfile.lock Normal file
View File

@ -0,0 +1,70 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
colorator (1.1.0)
concurrent-ruby (1.2.2)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.16.3)
forwardable-extended (2.6.0)
google-protobuf (3.25.1-x86_64-darwin)
http_parser.rb (0.8.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
jekyll (4.3.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (>= 0.3.6, < 0.5)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-sass-converter (3.0.0)
sass-embedded (~> 1.54)
jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.4)
listen (3.8.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (5.0.3)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.6)
rouge (4.2.0)
safe_yaml (1.0.5)
sass-embedded (1.69.5-x86_64-darwin)
google-protobuf (~> 3.23)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
unicode-display_width (2.5.0)
webrick (1.8.1)
PLATFORMS
x86_64-darwin-21
DEPENDENCIES
jekyll
BUNDLED WITH
2.4.17

View File

@ -1,11 +1,6 @@
---
title: DSi Shop
title: ec deviceinfo
layout: dsiware
---
<center>
<iframe src="ec_deviceInfo_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="ec_deviceInfo_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="ec_deviceInfo_u.html"></object>
<object data="ec_deviceInfo_d.html"></object>

View File

@ -1,374 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="../../common/css/default.css">
<style>
body
{
font-size: 10px;
background-color: #FFFFFF;
}
#output
{
background-color: #CCFFCC;
}
#progress
{
background-image: url("progress_bar.gif");
background-repeat: no-repeat;
background-position: -216px 0px;
}
</style>
<script type="text/javascript" src="../common/js/default.js"></script>
<script type="text/javascript" src="ec.js"></script>
<script type="text/javascript" src="syncEc.js"></script>
<script>
<!--
/*---------- グローバル変数 ----------*/
var ec = new ECommerceInterface();
var gStartDate = 0;
var gShowProgerss = true; //プログレスバーを表示するかのフラグ
var gTitleId = 0;
/*---------- デバッグ出力 ----------*/
function Print( mes )
{
output.innerHTML += mes + "<br>";
}
function PrintError( progress )
{
Print( "status : " + progress.status );
Print( "operation : " + progress.operation );
Print( "totalSize : " + progress.totalSize );
Print( "downloadedSize : " + progress.downloadedSize );
Print( "errCode : " + progress.errCode );
Print( "errInfo : " + progress.errInfo );
Print( "phase : " + progress.phase );
Print( "isCancelRequested : " + progress.isCancelRequested );
Print( "description : " + progress.description );
}
function ClearDebugMessages( first_mes )
{
output.innerHTML = first_mes + "<br>";
}
/*
最初のオペレーションのエラーチェック
*/
function CheckStartOperation( progress )
{
if ( progress == null )
{
Print("ASSERT progress == null : " + progress);
return ( false );
}
else if ( progress.status < 0 && progress.status != EC_ERROR_NOT_DONE )
{
Print("Error StartOperation!");
PrintError( progress );
return ( false );
}
else
{
return ( true );
}
}
/*
ec.getProgress() のエラーチェック
*/
function CheckProgress( progress )
{
if ( progress == null )
{
Print("ASSERT progress == null : " + progress);
return ( false );
}
else if ( progress.status < 0 )
{
Print("Error Progress!");
PrintError( progress );
return ( false );
}
else
{
return ( true );
}
}
/*
プログレスバーを更新
*/
var PROGRESS_BAR_WIDTH = 216;
function UpdateProgressBar( downloaded, total )
{
var pos = -1 * PROGRESS_BAR_WIDTH;
if ( total != 0 )
pos = PROGRESS_BAR_WIDTH * downloaded / total - PROGRESS_BAR_WIDTH;
if ( pos > 0 )
pos = 0;
progress.style.backgroundPosition = pos + "px 0px";
}
/*---------- 初期化処理 ----------*/
function InitEc()
{
/*
var ecsUrl = "https://ecs.shop.wii.com/ecs/services/ECommerceSOAP";
var iasUrl = "https://ias.shop.wii.com/ias/services/IdentityAuthenticationSOAP";
var casUrl = "https://cas.shop.wii.com/cas/services/CatalogingSOAP";
var ccsUrl = "http://ccs.shop.wii.com/ccs/download";
var ucsUrl = "http://ccs.shop.wii.com/ccs/download";
*/
var ecsUrl = "https://ecs.t.shop.nintendowifi.net/ecs/services/ECommerceSOAP";
var iasUrl = "https://ias.t.shop.nintendowifi.net/ias/services/IdentityAuthenticationSOAP";
var casUrl = "https://cas.t.shop.nintendowifi.net/cas/services/CatalogingSOAP";
var ccsUrl = "http://ccs.t.shop.nintendowifi.net/ccs/download";
var ucsUrl = "http://ccs.t.shop.nintendowifi.net/ccs/download";
ec.setWebSvcUrls (ecsUrl, iasUrl, casUrl);
ec.setContentUrls (ccsUrl, ucsUrl);
}
/*----------------------------------------
■ メモ
[ 基本的な流れ ]
ec.purchaseTitle などの処理をしたい関数を一度呼び、
ec.getProgress を EC_ERROR_NOT_DONE 以外になるまで定期的に呼びます。
[ 便利関数 ]
上記の基本的な流れを3つの便利関数で行っています
▽ CheckStartOperation
ec.purchaseTitle などの処理をしたい関数のエラーチェック関数
エラー時は自動的にログ出力
▽ SyncEc( "ec.getProgress()" )
ec.getProgress を同期処理で EC_ERROR_NOT_DONE 以外になるまで呼び続けます
▽ CheckProgress
上記の SyncEc のエラーチェック関数。
エラー時は自動的にログ出力
----------------------------------------*/
/*---------- 各ボタンの処理 ----------*/
/*
タイトル(アプリ)の購入
amount(金額)も含めて全て文字列で
*/
function PurchaseTitle( titleId, itemId, amount )
{
var kong_ = new Kong();
//kong_.ShowLoadingIcon();
ClearDebugMessages("PurchaseTitle");
var price = new ECPrice( amount, "POINTS");
var payment = new ECAccountPayment(); // default is vcid account
var limits = new ECTitleLimits(); // default is no limits
var downloadContent = true;
var taxes = null;
var purchaseInfo = null;
var discount = null;
var progress = ec.purchaseTitle (titleId, itemId,
price, payment,
limits,
downloadContent, // optional
taxes, // optional
purchaseInfo, // optional
discount); // optional
if ( ! CheckStartOperation( progress ) )
return(0);
/*
if ( ! CheckProgress( SyncEc( "ec.getProgress()" ) ) )
return(0);
*/
if ( gShowProgerss ) kong_.ShowProgressBar();
gTitleId = titleId;
gStartDate = new Date();
DownloadStatusUpdate();
Print("Success." );
}
/*
フォームの内容で PurchaseTitle
*/
function PurchaseTitleFromForm()
{
var titleId = app.titleId.value;
var itemId = app.itemId.value;
var amount = app.amount.value;
PurchaseTitle( titleId, itemId, amount );
}
/*
ダウンロード状況を更新
*/
function DownloadStatusUpdate()
{
var progress = ec.getProgress();
var kong_ = new Kong();
if ( progress.status == EC_ERROR_NOT_DONE )
{
//ダウンロード中
ClearDebugMessages("Downloading...");
var nowDate = new Date();
var time = nowDate.getTime() - gStartDate.getTime();
Print("Time : " + time + "[ms]");
if ( progress.totalSize != 0 )
Print( progress.downloadedSize + "/" + progress.totalSize + "[bytes]");
if ( gShowProgerss ) kong_.UpdateProgressBar( progress.downloadedSize, progress.totalSize );
UpdateProgressBar( progress.downloadedSize, progress.totalSize );
setTimeout( "DownloadStatusUpdate()", 1 ); //todo interval
}
else if ( progress.status < 0 )
{
//ダウンロード失敗
ClearDebugMessages("Download Failed.");
PrintError( progress );
if ( gShowProgerss ) kong_.HideProgressBar();
//kong_.HideLoadingIcon();
}
else
{
//ダウンロード成功
ClearDebugMessages("Download Succeed.");
var nowDate = new Date();
var time = nowDate.getTime() - gStartDate.getTime();
Print("Time : " + time + "[ms]");
Print( progress.totalSize + "[bytes]");
if ( gShowProgerss ) kong_.UpdateProgressBar( progress.downloadedSize, progress.totalSize );
UpdateProgressBar( progress.downloadedSize, progress.totalSize );
kong_.FinishDownload( String( gTitleId ) );
if ( gShowProgerss )
{
setTimeout( WaitProgressBarAnimFinished, 500 );
}
}
}
/*
プログレスバーのアニメ終了待ち
*/
function WaitProgressBarAnimFinished()
{
var kong_ = new Kong();
if ( kong_.IsProgressBarAnimFinished() == false )
{
setTimeout( WaitProgressBarAnimFinished, 500 );
}
else
{
kong_.HideProgressBar();
//kong_.HideLoadingIcon();
}
}
/*
アプリのダウンロード
ダウンロードするには先に購入(PurchaseTitle)する必要があります
*/
function Download( titleId )
{
gTitleId = titleId;
var kong_ = new Kong();
//kong_.ShowLoadingIcon();
ClearDebugMessages("Download");
gStartDate = new Date();
if ( ! CheckStartOperation( ec.downloadTitle (titleId) ) )
return(0);
if ( gShowProgerss ) kong_.ShowProgressBar();
DownloadStatusUpdate();
}
/*
フォームの内容で Download
*/
function DownloadFromForm()
{
var titleId = app.titleId.value;
Download( titleId );
}
/*
フォームに option タグの内容を反映
*/
function SetFormValue()
{
var id = new Array();
id = app.idset.value.split(",");
app.titleId.value = id[0];
app.itemId.value = id[1];
app.amount.value = id[2];
}
-->
</script>
</head>
<body onload="InitEc();">
<form id="app">
<table border="1">
<tr>
<td>titleId</td>
<td><input type="text" maxlength="16" size="22" id="titleId" onMouseDown="ActiveKeyboard(1, 'titleId', 1);" value="00030004444D3030"></td>
</tr>
<tr>
<td>itemId</td>
<td><input type="text" maxlength="6" size="7" id="itemId" onMouseDown="ActiveKeyboard(0, 'itemId');" value="101488"></td>
</tr>
<tr>
<td>amount</td>
<td><input type="text" maxlength="8" size="11" id="amount" onMouseDown="ActiveKeyboard(0, 'amount(金額)');" value="0"></td>
</tr>
</table>
<select onChange="SetFormValue()" id="idset" size="2">
<option value='0003000022A733A2,101486,0'>test_twl_game</option>
<option value='00030004444D3030,101488,0'>twl-dm00</option>
<option value='00030004444D3032,101487,0'>twl-dm02</option>
<option value='00030004444D3033,101489,0'>twl-dm03</option>
<option value='00030004444D3034,,'>twl-dm04</option>
<option value='00030004444D3130,101489,0'>twl-dm10</option>
<option value='00030004444D3131,101490,0'>twl-dm11</option>
<option value='00030004444D3330,101491,0'>twl-dm30</option>
<option value='000300044B5A3241,101493,0'>kz2a</option>
<option value='0003000434617841,101499,0'>4axA(18MB)</option>
<option value='0003000434617941,101500,0'>4ayA(18MB)</option>
<option value='0003000434617A41,101501,0'>4azA(18MB)</option>
<option value='0003000434564341,101688,0'>4vcA(SAVE)</option>
<option value='0003000434564441,101689,0'>4vdA(SAVE)</option>
<option value='0003000434564541,101690,0'>4veA(SAVE)</option>
</select>
</form>
<div>
<button onClick="PurchaseTitleFromForm();">PurchaseTitle</button>
<button onClick="DownloadFromForm();">Download</button>
</div>
<!--
省スペースな a タグ版
<div>
<a href="javascript:void(0);" onClick="PurchaseTitleFromForm();">PurchaseTitle</a>
<a href="javascript:void(0);" onClick="DownloadFromForm();">Download</a>
</div>
-->
<div id="progress">
<img src="progress_bar_border.gif">
</div>
<div id="output"></div>
</body>
</html>
---
title: ec download
layout: dsiware
---
<object data="../index_u.html"></object>
<object data="ec_download_d.html"></object>

374
NCL/ec/ec_download_d.html Normal file
View File

@ -0,0 +1,374 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="../../common/css/default.css">
<style>
body
{
font-size: 10px;
background-color: #FFFFFF;
}
#output
{
background-color: #CCFFCC;
}
#progress
{
background-image: url("progress_bar.gif");
background-repeat: no-repeat;
background-position: -216px 0px;
}
</style>
<script type="text/javascript" src="../common/js/default.js"></script>
<script type="text/javascript" src="ec.js"></script>
<script type="text/javascript" src="syncEc.js"></script>
<script>
<!--
/*---------- グローバル変数 ----------*/
var ec = new ECommerceInterface();
var gStartDate = 0;
var gShowProgerss = true; //プログレスバーを表示するかのフラグ
var gTitleId = 0;
/*---------- デバッグ出力 ----------*/
function Print( mes )
{
output.innerHTML += mes + "<br>";
}
function PrintError( progress )
{
Print( "status : " + progress.status );
Print( "operation : " + progress.operation );
Print( "totalSize : " + progress.totalSize );
Print( "downloadedSize : " + progress.downloadedSize );
Print( "errCode : " + progress.errCode );
Print( "errInfo : " + progress.errInfo );
Print( "phase : " + progress.phase );
Print( "isCancelRequested : " + progress.isCancelRequested );
Print( "description : " + progress.description );
}
function ClearDebugMessages( first_mes )
{
output.innerHTML = first_mes + "<br>";
}
/*
最初のオペレーションのエラーチェック
*/
function CheckStartOperation( progress )
{
if ( progress == null )
{
Print("ASSERT progress == null : " + progress);
return ( false );
}
else if ( progress.status < 0 && progress.status != EC_ERROR_NOT_DONE )
{
Print("Error StartOperation!");
PrintError( progress );
return ( false );
}
else
{
return ( true );
}
}
/*
ec.getProgress() のエラーチェック
*/
function CheckProgress( progress )
{
if ( progress == null )
{
Print("ASSERT progress == null : " + progress);
return ( false );
}
else if ( progress.status < 0 )
{
Print("Error Progress!");
PrintError( progress );
return ( false );
}
else
{
return ( true );
}
}
/*
プログレスバーを更新
*/
var PROGRESS_BAR_WIDTH = 216;
function UpdateProgressBar( downloaded, total )
{
var pos = -1 * PROGRESS_BAR_WIDTH;
if ( total != 0 )
pos = PROGRESS_BAR_WIDTH * downloaded / total - PROGRESS_BAR_WIDTH;
if ( pos > 0 )
pos = 0;
progress.style.backgroundPosition = pos + "px 0px";
}
/*---------- 初期化処理 ----------*/
function InitEc()
{
/*
var ecsUrl = "https://ecs.shop.wii.com/ecs/services/ECommerceSOAP";
var iasUrl = "https://ias.shop.wii.com/ias/services/IdentityAuthenticationSOAP";
var casUrl = "https://cas.shop.wii.com/cas/services/CatalogingSOAP";
var ccsUrl = "http://ccs.shop.wii.com/ccs/download";
var ucsUrl = "http://ccs.shop.wii.com/ccs/download";
*/
var ecsUrl = "https://ecs.t.shop.nintendowifi.net/ecs/services/ECommerceSOAP";
var iasUrl = "https://ias.t.shop.nintendowifi.net/ias/services/IdentityAuthenticationSOAP";
var casUrl = "https://cas.t.shop.nintendowifi.net/cas/services/CatalogingSOAP";
var ccsUrl = "http://ccs.t.shop.nintendowifi.net/ccs/download";
var ucsUrl = "http://ccs.t.shop.nintendowifi.net/ccs/download";
ec.setWebSvcUrls (ecsUrl, iasUrl, casUrl);
ec.setContentUrls (ccsUrl, ucsUrl);
}
/*----------------------------------------
■ メモ
[ 基本的な流れ ]
ec.purchaseTitle などの処理をしたい関数を一度呼び、
ec.getProgress を EC_ERROR_NOT_DONE 以外になるまで定期的に呼びます。
[ 便利関数 ]
上記の基本的な流れを3つの便利関数で行っています
▽ CheckStartOperation
ec.purchaseTitle などの処理をしたい関数のエラーチェック関数
エラー時は自動的にログ出力
▽ SyncEc( "ec.getProgress()" )
ec.getProgress を同期処理で EC_ERROR_NOT_DONE 以外になるまで呼び続けます
▽ CheckProgress
上記の SyncEc のエラーチェック関数。
エラー時は自動的にログ出力
----------------------------------------*/
/*---------- 各ボタンの処理 ----------*/
/*
タイトル(アプリ)の購入
amount(金額)も含めて全て文字列で
*/
function PurchaseTitle( titleId, itemId, amount )
{
var kong_ = new Kong();
//kong_.ShowLoadingIcon();
ClearDebugMessages("PurchaseTitle");
var price = new ECPrice( amount, "POINTS");
var payment = new ECAccountPayment(); // default is vcid account
var limits = new ECTitleLimits(); // default is no limits
var downloadContent = true;
var taxes = null;
var purchaseInfo = null;
var discount = null;
var progress = ec.purchaseTitle (titleId, itemId,
price, payment,
limits,
downloadContent, // optional
taxes, // optional
purchaseInfo, // optional
discount); // optional
if ( ! CheckStartOperation( progress ) )
return(0);
/*
if ( ! CheckProgress( SyncEc( "ec.getProgress()" ) ) )
return(0);
*/
if ( gShowProgerss ) kong_.ShowProgressBar();
gTitleId = titleId;
gStartDate = new Date();
DownloadStatusUpdate();
Print("Success." );
}
/*
フォームの内容で PurchaseTitle
*/
function PurchaseTitleFromForm()
{
var titleId = app.titleId.value;
var itemId = app.itemId.value;
var amount = app.amount.value;
PurchaseTitle( titleId, itemId, amount );
}
/*
ダウンロード状況を更新
*/
function DownloadStatusUpdate()
{
var progress = ec.getProgress();
var kong_ = new Kong();
if ( progress.status == EC_ERROR_NOT_DONE )
{
//ダウンロード中
ClearDebugMessages("Downloading...");
var nowDate = new Date();
var time = nowDate.getTime() - gStartDate.getTime();
Print("Time : " + time + "[ms]");
if ( progress.totalSize != 0 )
Print( progress.downloadedSize + "/" + progress.totalSize + "[bytes]");
if ( gShowProgerss ) kong_.UpdateProgressBar( progress.downloadedSize, progress.totalSize );
UpdateProgressBar( progress.downloadedSize, progress.totalSize );
setTimeout( "DownloadStatusUpdate()", 1 ); //todo interval
}
else if ( progress.status < 0 )
{
//ダウンロード失敗
ClearDebugMessages("Download Failed.");
PrintError( progress );
if ( gShowProgerss ) kong_.HideProgressBar();
//kong_.HideLoadingIcon();
}
else
{
//ダウンロード成功
ClearDebugMessages("Download Succeed.");
var nowDate = new Date();
var time = nowDate.getTime() - gStartDate.getTime();
Print("Time : " + time + "[ms]");
Print( progress.totalSize + "[bytes]");
if ( gShowProgerss ) kong_.UpdateProgressBar( progress.downloadedSize, progress.totalSize );
UpdateProgressBar( progress.downloadedSize, progress.totalSize );
kong_.FinishDownload( String( gTitleId ) );
if ( gShowProgerss )
{
setTimeout( WaitProgressBarAnimFinished, 500 );
}
}
}
/*
プログレスバーのアニメ終了待ち
*/
function WaitProgressBarAnimFinished()
{
var kong_ = new Kong();
if ( kong_.IsProgressBarAnimFinished() == false )
{
setTimeout( WaitProgressBarAnimFinished, 500 );
}
else
{
kong_.HideProgressBar();
//kong_.HideLoadingIcon();
}
}
/*
アプリのダウンロード
ダウンロードするには先に購入(PurchaseTitle)する必要があります
*/
function Download( titleId )
{
gTitleId = titleId;
var kong_ = new Kong();
//kong_.ShowLoadingIcon();
ClearDebugMessages("Download");
gStartDate = new Date();
if ( ! CheckStartOperation( ec.downloadTitle (titleId) ) )
return(0);
if ( gShowProgerss ) kong_.ShowProgressBar();
DownloadStatusUpdate();
}
/*
フォームの内容で Download
*/
function DownloadFromForm()
{
var titleId = app.titleId.value;
Download( titleId );
}
/*
フォームに option タグの内容を反映
*/
function SetFormValue()
{
var id = new Array();
id = app.idset.value.split(",");
app.titleId.value = id[0];
app.itemId.value = id[1];
app.amount.value = id[2];
}
-->
</script>
</head>
<body onload="InitEc();">
<form id="app">
<table border="1">
<tr>
<td>titleId</td>
<td><input type="text" maxlength="16" size="22" id="titleId" onMouseDown="ActiveKeyboard(1, 'titleId', 1);" value="00030004444D3030"></td>
</tr>
<tr>
<td>itemId</td>
<td><input type="text" maxlength="6" size="7" id="itemId" onMouseDown="ActiveKeyboard(0, 'itemId');" value="101488"></td>
</tr>
<tr>
<td>amount</td>
<td><input type="text" maxlength="8" size="11" id="amount" onMouseDown="ActiveKeyboard(0, 'amount(金額)');" value="0"></td>
</tr>
</table>
<select onChange="SetFormValue()" id="idset" size="2">
<option value='0003000022A733A2,101486,0'>test_twl_game</option>
<option value='00030004444D3030,101488,0'>twl-dm00</option>
<option value='00030004444D3032,101487,0'>twl-dm02</option>
<option value='00030004444D3033,101489,0'>twl-dm03</option>
<option value='00030004444D3034,,'>twl-dm04</option>
<option value='00030004444D3130,101489,0'>twl-dm10</option>
<option value='00030004444D3131,101490,0'>twl-dm11</option>
<option value='00030004444D3330,101491,0'>twl-dm30</option>
<option value='000300044B5A3241,101493,0'>kz2a</option>
<option value='0003000434617841,101499,0'>4axA(18MB)</option>
<option value='0003000434617941,101500,0'>4ayA(18MB)</option>
<option value='0003000434617A41,101501,0'>4azA(18MB)</option>
<option value='0003000434564341,101688,0'>4vcA(SAVE)</option>
<option value='0003000434564441,101689,0'>4vdA(SAVE)</option>
<option value='0003000434564541,101690,0'>4veA(SAVE)</option>
</select>
</form>
<div>
<button onClick="PurchaseTitleFromForm();">PurchaseTitle</button>
<button onClick="DownloadFromForm();">Download</button>
</div>
<!--
省スペースな a タグ版
<div>
<a href="javascript:void(0);" onClick="PurchaseTitleFromForm();">PurchaseTitle</a>
<a href="javascript:void(0);" onClick="DownloadFromForm();">Download</a>
</div>
-->
<div id="progress">
<img src="progress_bar_border.gif">
</div>
<div id="output"></div>
</body>
</html>

View File

@ -1,11 +1,6 @@
---
title: DSi Shop
title: ec
layout: dsiware
---
<center>
<iframe src="ec_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="ec_example.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="ec_u.html"></object>
<object data="ec_example.html"></object>

View File

@ -1,11 +1,6 @@
---
title: DSi Shop
title: NCL
layout: dsiware
---
<center>
<iframe src="index_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="index_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="index_u.html"></object>
<object data="index_d.html"></object>

View File

@ -70,7 +70,7 @@ body {
<li><a href="ec/ec_example_index.html" target="_top">
ec/ec_example.html
</a></li>
<li><a href="ec/ec_download.html">ec/ec_download.html</a></li>
<li><a href="ec/ec_download.html" target="_top">ec/ec_download.html</a></li>
<li><a href="ec/ec_deviceInfo.html" target="_top">
ec/ec_deviceInfo.html
</a></li>

View File

@ -1,25 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GetMessage</title>
<link rel="stylesheet" type="text/css" href="default.css">
<script type="text/javascript" src="default.js"></script>
<script>
<!--
function ShowErrorPage()
{
var id = document.getElementById("err_code").value;
var kong_ = new Kong();
kong_.ShowErrorPage( id );
}
-->
</script>
</head>
<body>
<h1>ShowErrorPage</h1>
<input id="err_code" type="text" size="6" maxlength="6" onClick="ActiveKeyboard(0, 'Error Code')" value="0"><br>
<button onClick="ShowErrorPage()">ShowErrorPage</button><br>
</body>
</html>
---
title: ShowErrorPage
layout: dsiware
---
<object data="../index_u.html"></object>
<object data="ShowErrorPage_d.html"></object>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GetMessage</title>
<link rel="stylesheet" type="text/css" href="default.css">
<script type="text/javascript" src="default.js"></script>
<script>
<!--
function ShowErrorPage()
{
var id = document.getElementById("err_code").value;
var kong_ = new Kong();
kong_.ShowErrorPage( id );
}
-->
</script>
</head>
<body>
<h1>ShowErrorPage</h1>
<input id="err_code" type="text" size="6" maxlength="6" onClick="ActiveKeyboard(0, 'Error Code')" value="0"><br>
<button onClick="ShowErrorPage()">ShowErrorPage</button><br>
</body>
</html>

View File

@ -1,11 +1,6 @@
---
title: DSi Shop
title: ec deviceinfo
layout: dsiware
---
<center>
<iframe src="ec_deviceInfo_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="ec_deviceInfo_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="ec_deviceInfo_u.html"></object>
<object data="ec_deviceInfo_d.html"></object>

View File

@ -1,11 +1,7 @@
---
title: DSi Shop
title: ec
layout: dsiware
---
<center>
<iframe src="ec_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="ec_example.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="ec_u.html"></object>
<object data="ec_example.html"></object>

View File

@ -2,10 +2,5 @@
title: DSi Shop
layout: dsiware
---
<center>
<iframe src="fontlist_01_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="fontlist_01_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="fontlist_01_u.html"></object>
<object data="fontlist_01_d.html"></object>

View File

@ -2,10 +2,5 @@
title: DSi Shop
layout: dsiware
---
<center>
<iframe src="fontlist_02_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="fontlist_02_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="fontlist_02_u.html"></object>
<object data="fontlist_02_d.html"></object>

View File

@ -2,10 +2,5 @@
title: DSi Shop
layout: dsiware
---
<center>
<iframe src="fontlist_03_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="fontlist_03_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="fontlist_03_u.html"></object>
<object data="fontlist_03_d.html"></object>

View File

@ -2,10 +2,5 @@
title: DSi Shop
layout: dsiware
---
<center>
<iframe src="fontlist_04_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="fontlist_04_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="fontlist_04_u.html"></object>
<object data="fontlist_04_d.html"></object>

View File

@ -1,11 +1,6 @@
---
title: DSi Shop
title: Shopmock
layout: dsiware
---
<center>
<iframe src="index_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="index_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="index_u.html"></object>
<object data="index_d.html"></object>

View File

@ -1,11 +1,6 @@
---
title: DSi Shop
title: SMC
layout: dsiware
---
<center>
<iframe src="index_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="index_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<object data="index_u.html"></object>
<object data="index_d.html"></object>

View File

@ -55,7 +55,7 @@ function GoWeb()
</a>
<h1>エラーシミュレータ</h1>
<a href="tools/ShowErrorPage.html">tools/ShowErrorPage.html</a>
<a href="tools/ShowErrorPage.html" target="_top">tools/ShowErrorPage.html</a>
<h1>フォントチェック</h1>
<a href="font_check/shopmock/fontlist_01_index.html" target="_top">

View File

@ -1,25 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GetMessage</title>
<link rel="stylesheet" type="text/css" href="default.css">
<script type="text/javascript" src="default.js"></script>
<!--<script>
function ShowErrorPage()
{
var id = document.getElementById("err_code").value;
var kong_ = new Kong();
kong_.ShowErrorPage( id );
}
</script>-->
</head>
<body>
<h1>ShowErrorPage</h1>
<input id="err_code" type="text" size="6" maxlength="6" onClick="ActiveKeyboard(0, 'Error Code')" value="0"><br>
<button onClick="ShowErrorPage()">ShowErrorPage</button><br>
</body>
</html>
---
title: ShowErrorPage
layout: dsiware
---
<object data="../index_u.html"></object>
<object data="ShowErrorPage_d.html"></object>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GetMessage</title>
<link rel="stylesheet" type="text/css" href="default.css">
<script type="text/javascript" src="default.js"></script>
<!--<script>
function ShowErrorPage()
{
var id = document.getElementById("err_code").value;
var kong_ = new Kong();
kong_.ShowErrorPage( id );
}
</script>-->
</head>
<body>
<h1>ShowErrorPage</h1>
<input id="err_code" type="text" size="6" maxlength="6" onClick="ActiveKeyboard(0, 'Error Code')" value="0"><br>
<button onClick="ShowErrorPage()">ShowErrorPage</button><br>
</body>
</html>

60
_layouts/dsiware.html Normal file
View File

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta property="og:url" content="{{ site.url }}{{ page.url }}">
<meta property="og:site_name" content="Random Meaningless Characters (rmc)">
<title>DSi Debug Shop | {{ page.title }}</title>
<meta property="og:title" content="{{ page.title }}">
<meta property="og:image" content="{{ site.url }}/icon.png">
<meta name="description" content="DS(i) development software documentation and preservation.">
<meta property="og:description" content="DS(i) development software documentation and preservation.">
<meta name="keywords" content="dsi, ds, nintendo, dev" />
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/style.css">
<link rel="canonical" href="{{ site.url }}{{ page.url }}">
<!-- GRRRR I HATE GOOGLE SAYING MY CANONICALS ARE DUPLICATES!! Please someone smart help me... -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
</style>
</head>
<body>
<div id="content-wrap">
<div class="screenlabels">
<a href="https://randomeaninglesscharacters.com/"><-- Main site</a> | <a href="/">Shop start page</a> | <a href="https://github.com/rvtr/debug-dsi-shop" target="_blank"> GitHub </a>
</div><hr>
<h1 style="text-align:center;">DSi Debug Shop</h1><hr>
<div class="screenlabels">
<div><h2><u>Top screen:</u></h2></div><div><h2><u>Bottom screen:</u></h2></div>
</div>
{{ content }}
<br>
<div style="text-align: right;margin-right: 35px;">&uarr; I'm an interactive window! Try me!</div>
{% if page.title == "Startup" -%}
{%- else -%}
<i><a href="javascript:window.history.back()"><-- previous</a></i>
{%- endif %}
<br><br>
<div style="text-align:left;">
<hr>
<h2>This is an interactive demo of the DSi Debug Shop.</h2>The developer DSi shop uses a modified version of the DSi Browser, and most of its content is local HTML/JS. Because the app is almost entirely HTML/JS, I was able to take the HTML pages from NitroFS and edit them to work in any browser.<br><br>Many of the pages are missing- locked behind Nintendo's development servers or just straight up gone. I patched things up wherever possible, killing any dead links and linking to otherwise unlinked pages.<br>Features such as the console information and DSi specific operations are also missing/broken (as is to be expected when running a DSi app on a modern browser). I tried filling in the blanks where I could, but it's not perfect.<br>If you want to help polish up the code, feel free to submit a PR <a href="https://github.com/rvtr/debug-dsi-shop">here.</a><br>
<h2>Download original app:</h2>
I have found 3 different versions of this app. I am not sure what the specific differences between the apps are.<br>
I used the files from <i><b>shop.HNFC.Release.v1536</b></i> for my demo.
<br><br>
shop.HNFC.Release.v1536: <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.v1536.srl">srl</a> | <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.v1536.tad">tad</a><br>
shop.HNFC.Release.14231: <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.14231.srl">srl</a> | <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.14231.tad">tad</a><br>
shop.HNFC.Release.thumb: <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.thumb.srl">srl</a> | <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.thumb.tad">tad</a><br>
<br><br><span style="color:orange;">
<i><b>shop.HNFC.Release.v1536.tad</b></i> is the only working version of the debug shop. It will only run if installed to NAND and booted via the home menu.<br>Using nds-bootstrap, unlaunch, or any similar apps will introduce problems like dead touch controls, a <b>293003</b> error, or cause the shop to whitescreen.</span>
<br><br>
</div>
</div>
</body>
</html>

BIN
font/nintendo-DS-BIOS.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,27 +1,6 @@
---
title: DSi Shop
title: Startup
layout: dsiware
---
<center>
<iframe src="startup_u.html" width="256" height="192" style="border:0px solid black;">
</iframe>
<br>
<iframe src="startup_d.html" width="256" height="192" style="border:0px solid black;">
</iframe>
</center>
<div style="text-align:left;">
<h2>This is an interactive demo of the developer DSi Shop.</h2>The developer DSi shop uses a modified version of the DSi Browser, and most of its content is local HTML/JS. Because the app is almost entirely HTML/JS, I was able to take the HTML pages from romfs and format them to work on your browser.<br><br>Sadly, many of the pages are missing- locked behind Nintendo's development servers or just straight up gone. I patched things up wherever possible, killing any dead links and linking to otherwise unlinked pages.<br>Features such as the console information and DSi specific operations are also missing/broken (as is to be expected when running a DSi app on a modern browser). I tried filling in the blanks where I could, but it still has a way to go.<br>If you want to help polish up the code, feel free to submit a PR <a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/tree/master/dsidev/dsishop">here.</a><br>
<h2>Download original app:</h2>
I have found 3 different versions of this app. I am not sure what the specific differences between the apps are, though I will look into that.<br>
I used the files from <i><b>shop.HNFC.Release.v1536</b></i> for my demo.
<br><br>
shop.HNFC.Release.v1536: <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.v1536.srl">srl</a> | <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.v1536.tad">tad</a><br>
shop.HNFC.Release.14231: <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.14231.srl">srl</a> | <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.14231.tad">tad</a><br>
shop.HNFC.Release.thumb: <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.thumb.srl">srl</a> | <a href="https://archive.org/download/rmc-dsi/shop.HNFC.Release.thumb.tad">tad</a><br>
<br><br><span style="color:orange;">
<i><b>shop.HNFC.Release.v1536.tad</b></i> is the only working version of the debug shop. It will only run if installed to NAND and booted via the home menu.<br>Using nds-bootstrap, unlaunch, or any similar apps will introduce problems like dead touch controls, a <b>293003</b> error, or cause the shop to whitescreen.</span>
<br><br>
</div>
<object data="startup_u.html"></object>
<object data="startup_d.html"></object>

18
style.css Normal file
View File

@ -0,0 +1,18 @@
body {
width: 550px;
margin: 0 auto;
margin-top: 10px;
}
object {
width: 256px;
height: 192px;
border: 2px solid black;
}
.screenlabels {
display: flex;
justify-content: space-evenly;
flex-direction: row;
}
.screenlabels div {
margin-bottom: -20px;
}