目次
前
メッセージ行生成
IchigoJamのBasicでは、文字定数を扱えないので
各文字を16進数に変換して入力します。
Windowsで手軽に変換できるようにHSPで変換アプリ
ケーションソフトを作成しました。
左の上下入力欄に、文字、スペース、数字を入力し
「CONVERT」ボタンをクリックすると、右側に変換
されたBasicコードが表示されます。上下入力欄の
最大入力文字数は16に制限しています。
「CLEAR」ボタンをクリックすると、左右の文字列を
消去します。
右側のBasicコードを、コピーして希望の行番号の
位置に入れます。
HSPのソースコードは、以下。
; screen size
screen 0,640,140
title "convert string to hexadecimal numbers"
; set buffer size
sdim buf0,16
sdim buf1,16
sdim bufx,160
sdim head0,9
sdim head1,9
sdim stmp,64
buf0 = ""
buf1 = ""
bufx = ""
head0 = "LET [ 1]"
head1 = "LET [ ]"
objmode 2
; define message box
font "", 18
pos 5, 5 : input buf0,200,25,16 ; Object Number 0
pos 5,35 : input buf1,200,25,16 ; Object Number 1
pos 220, 5 : mesbox bufx,400,60,4 ; Object Number 2
; define button
font "", 10
pos 10, 70 : button "CONVERT",*btnCnv
pos 10,100 : button "CLEAR" ,*btnClr
stop
*btnCnv
; upper
xmax = strlen(buf0)
xlast = xmax-1
xnext = xmax+1
stmp = ""
if (xmax > 0) {
; convert
for x,0,xmax,1
; get 1 character
tmp = peek(buf0,x)
; convert capital letter
if ('a' <= tmp) & (tmp <= 'z') { tmp -= $20 }
; generate code
xtmp = strf("#%02X,",tmp)
if (x == xlast) { xtmp = strf("#%02X",tmp) }
; store strings
poke stmp,4*x,xtmp
next
}
; substitute
poke bufx,0,"LET [ 1],"
; append
poke bufx,9,stmp
; add new line
xlast = strlen(bufx)
poke bufx,xlast,"\r\n"
; calculate appned location
ptr = strlen(bufx)
; lower
xmax = strlen(buf1)
xlast = xmax-1
stmp = ""
if (xmax > 0) {
; substitute
xtmp = strf("LET [%2d],",xnext)
poke bufx,ptr,xtmp
; convert
for x,0,xmax,1
; get 1 character
tmp = peek(buf1,x)
; convert capital letter
if ('a' <= tmp) & (tmp <= 'z') { tmp -= $20 }
; generate code
xtmp = strf("#%02X,",tmp)
if (x == xlast) { xtmp = strf("#%02X",tmp) }
; store strings
poke stmp,4*x,xtmp
next
}
; append
xlast = strlen(bufx)
poke bufx,xlast,stmp
; show
objprm 2,bufx
stop
*btnClr
buf0 = "" : objprm 0,buf0
buf1 = "" : objprm 1,buf1
bufx = "" : objprm 2,bufx
stop
ダイナミックHMTL利用
HSPは、インストールしていないと使えないので
javascriptでダイナミックHTMLを書きました。
<html>
<head>
<script language="javascript">
<!--
function getCode(x)
{
var i ;
res = "" ;
// copy
stmp = x ;
len = x.length ;
nlen = len - 1 ;
// loop
for ( i = 0 ; i < len ; i++ ) {
// get charactor code
tmp = stmp.charCodeAt(i) ;
res += tmp ;
if ( i < nlen ) {
res += "," ;
}
}
return res ;
}
function clrArea()
{
document.genhex.elements[1].value = "" ;
document.genhex.elements[2].value = "" ;
document.genhex.elements[4].value = "" ;
}
function convertCode()
{
// get strings length
ln = new Array(2);
ln[0] = document.genhex.line0.value.length ;
ln[1] = document.genhex.line1.value.length ;
// judge strings length
for ( i = 0 ; i < 2 ; i++ ) {
if ( ln[i] > 16 ) {
alert("Out of strings in line "+i);
}
}
// convert
if ( (0 < ln[0] && ln[0] < 17) && ln[1] < 17 ) {
// clear
ystr = "LET [ 1],";
// get strings
edt0 = document.genhex.line0.value;
xstr = getCode( edt0.toUpperCase() );
ystr = ystr + xstr ;
// get strings
if ( 0 < ln[1] ) {
ystr += "\n";
ystr += ("LET ["+ String(ln[0]+1) +"],") ;
edt1 = document.genhex.line1.value;
xstr = getCode( edt1.toUpperCase() );
ystr = ystr + xstr ;
}
// show
document.genhex.genhexs.value = ystr + "\n" ;
}
}
// -->
</script>
</head>
<body>
<form method="post" name="genhex">
<input type="button" name="clear" value="clear" onClick="clrArea()"/><br>
<div>Line_0<input type="text" name="line0" /></div>
<div>Line_1<input type="text" name="line1" /></div>
<input type="button" name="convert" value="convert" onClick="convertCode()"/><br>
<div>decimal<br>
<textarea name="genhexs" cols="80" rows="2">
</textarea>
</div>
</form>
</body>
</html>
ファイル名をconv.htmlとして、ハードディスクの
ディレクトリ(フォルダ)に保存。その後ブラウザ
にファイルをドラッグすると、起動します。
1行で最大16文字として、メッセージを入力します。
(必ず、上の1行から入力してください。
下は何も入力しないでも構いません。)
ボタン「convert」をクリックすると、文字に相当する
10進数の数値に変換します。
変換文字列は、クリップボードにコピーしてから
テキストエディタでファイルに保存できます。
ボタン「clear」のクリックで、入力と変換文字列を消去します。
終了するときには、ブラウザの「x」か「終了」を
クリックするだけ。
ブラウザの設定で「javascript」を利用できるように
指定してください。標準設定では、利用不可になって
いることがあります。
目次
前