このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
sakura-macro [2021/12/20 13:38] tanaka [cb_crem.js] |
sakura-macro [2022/02/01 10:31] (現在) tanaka [visible_pack.js] |
||
|---|---|---|---|
| 行 38: | 行 38: | ||
| // ----------------------------------------------- | // ----------------------------------------------- | ||
| // 1行の最大文字数を指定して改行を入れる | // 1行の最大文字数を指定して改行を入れる | ||
| - | // 0x0Dが含まれる時は0x0Fに変換する(確認メッセージ有) | + | // ファイル名に.chopを付けて保存する(改行コードは入力する) |
| + | // 0x0Dが含まれる時は確認メッセージ表示 | ||
| + | // [はい]:0x0D を 0x0F に変換する | ||
| + | // [いいえ]: | ||
| + | // ※ 0x0D:' | ||
| // ----------------------------------------------- | // ----------------------------------------------- | ||
| main(); | main(); | ||
| 行 78: | 行 82: | ||
| // ペースト | // ペースト | ||
| Editor.Paste(0); | Editor.Paste(0); | ||
| + | |||
| + | // 改行コード | ||
| + | var code = parseInt(Editor.InputBox(' | ||
| + | if(isNaN(code)){ | ||
| + | Editor.WarnMsg(' | ||
| + | return; | ||
| + | } | ||
| // 名前を指定して保存 | // 名前を指定して保存 | ||
| var fileName = Editor.GetFilename() + ' | var fileName = Editor.GetFilename() + ' | ||
| - | Editor.FileSaveAs(fileName); | + | Editor.FileSaveAs(fileName, 0, code); |
| } | } | ||
| </ | </ | ||
| 行 186: | 行 197: | ||
| ===== xsort.js ===== | ===== xsort.js ===== | ||
| <sxh javascript; | <sxh javascript; | ||
| - | TODO | + | // ----------------------------------------------- |
| + | // 複数キーのソート | ||
| + | // [入力方法]{開始位置}: | ||
| + | // ----------------------------------------------- | ||
| + | |||
| + | main(); | ||
| + | |||
| + | function main() { | ||
| + | |||
| + | // キー | ||
| + | var input = Editor.InputBox(' | ||
| + | if(!input) return; | ||
| + | |||
| + | var keys = []; | ||
| + | var inputWords = input.split(',' | ||
| + | var orderWords = inputWords[inputWords.length-1].split(' | ||
| + | if(inputWords.length - 1 == orderWords.length) { | ||
| + | for(var i=0; i< | ||
| + | |||
| + | var words = inputWords[i].split(':' | ||
| + | if(words.length == 2){ | ||
| + | var pos = 0; | ||
| + | var len = 0; | ||
| + | var order = ''; | ||
| + | |||
| + | pos = parseInt(words[0]); | ||
| + | len = parseInt(words[1]); | ||
| + | order = orderWords[i]; | ||
| + | |||
| + | var obj = new Key(pos, len, order); | ||
| + | keys.push(obj); | ||
| + | } | ||
| + | } | ||
| + | } else { | ||
| + | Editor.ErrorMsg(' | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | // 行 | ||
| + | var items = []; | ||
| + | for(var i=1; i< | ||
| + | var line = GetLineStr(i); | ||
| + | |||
| + | var itemKeys = []; | ||
| + | for(var j=0; j< | ||
| + | itemKeys[j] = line.substr(keys[j].pos-1, | ||
| + | } | ||
| + | |||
| + | var objItem = new Item(i, itemKeys); | ||
| + | items.push(objItem); | ||
| + | } | ||
| + | |||
| + | // ソート | ||
| + | items.sort(function(a, | ||
| + | |||
| + | for(var i=0; i< | ||
| + | |||
| + | if(a.key[i] !== b.key[i]) { | ||
| + | if (a.key[i] < b.key[i]) { | ||
| + | return (keys[i].order.toUpperCase() == ' | ||
| + | } | ||
| + | if (a.key[i] > b.key[i]) { | ||
| + | return (keys[i].order.toUpperCase() == ' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return 0; | ||
| + | }); | ||
| + | |||
| + | var sortTxt = ''; | ||
| + | for(var i=0; i< | ||
| + | sortTxt += GetLineStr(items[i].lineNo); | ||
| + | } | ||
| + | |||
| + | // 上書き | ||
| + | Editor.SelectAll(); | ||
| + | Editor.InsText(sortTxt); | ||
| + | } | ||
| + | |||
| + | function Key(pos, len, order) { | ||
| + | this.pos = pos; | ||
| + | this.len = len; | ||
| + | this.order = order; | ||
| + | } | ||
| + | |||
| + | function Item(lineNo, | ||
| + | this.lineNo = lineNo; | ||
| + | this.key = key; | ||
| + | } | ||
| </ | </ | ||
| 行 480: | 行 580: | ||
| ===== cb_pic.js ===== | ===== cb_pic.js ===== | ||
| <sxh javascript; | <sxh javascript; | ||
| - | TODO | + | // ----------------------------------------------- |
| + | // pic句のバイト数を集計 | ||
| + | // PICTURE文字列がN, | ||
| + | // REDEFINES と OCCURS は未サポートです。 | ||
| + | // ・出現した時は警告を出します。 | ||
| + | // ・出てきた数を数えて警告に表示します。 | ||
| + | // ----------------------------------------------- | ||
| + | |||
| + | var fileName = null; | ||
| + | var occursNumber = 0; | ||
| + | var redefinesNumber = 0; | ||
| + | |||
| + | main(); | ||
| + | |||
| + | function main() { | ||
| + | var isSelected = Editor.IsTextSelected(); | ||
| + | if(isSelected == 1) { | ||
| + | |||
| + | // 行選択しているか | ||
| + | var txt = Editor.GetSelectedString(0); | ||
| + | var lines = txt.match(/ | ||
| + | if(!lines){ | ||
| + | Editor.MessageBox(' | ||
| + | return; | ||
| + | } | ||
| + | }else{ | ||
| + | Editor.MessageBox(' | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | var lineFrom = Editor.GetSelectLineFrom(); | ||
| + | var lineTo = Editor.GetSelectLineTo(); | ||
| + | |||
| + | var picArr = []; | ||
| + | var note = ''; | ||
| + | for(var i=lineFrom; i< | ||
| + | |||
| + | // 行取得 | ||
| + | var txt = Editor.GetLineStr(i); | ||
| + | |||
| + | // コメント行 | ||
| + | var arr = txt.match(/ | ||
| + | if(arr){ | ||
| + | note = getNote(txt); | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | // PicObj取得 | ||
| + | var pic = getPic(txt, note); | ||
| + | if(!pic) continue; | ||
| + | |||
| + | // バイト数計算 | ||
| + | var byte = getByte(pic.type, | ||
| + | if(byte == 0) { | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | pic.byte = byte; | ||
| + | |||
| + | // 位置計算 | ||
| + | if(picArr.length > 0) { | ||
| + | pic.position = getPosition(picArr[picArr.length - 1].byte, picArr[picArr.length - 1].position); | ||
| + | } else { | ||
| + | pic.position = 1; | ||
| + | } | ||
| + | |||
| + | // 配列に入れる | ||
| + | picArr.push(pic); | ||
| + | |||
| + | note = ''; | ||
| + | } | ||
| + | |||
| + | // 出力 | ||
| + | output(picArr); | ||
| + | |||
| + | // REDEFINEとOCCURSの数 | ||
| + | if(occursNumber > 0 || redefinesNumber > 0) { | ||
| + | var msg = ''; | ||
| + | |||
| + | if(occursNumber > 0) { | ||
| + | msg += ' | ||
| + | } | ||
| + | if(redefinesNumber > 0) { | ||
| + | if(msg) msg += ' | ||
| + | msg += ' | ||
| + | } | ||
| + | Editor.MessageBox(msg); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | function Pic(no, name, type, option, byte, position, note) { | ||
| + | this.no = no; | ||
| + | this.name = name; | ||
| + | this.type = type; | ||
| + | this.option = option; | ||
| + | this.byte = byte; | ||
| + | this.position = position; | ||
| + | this.note = note; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * コメント行の備考を取得 | ||
| + | */ | ||
| + | function getNote(line) { | ||
| + | |||
| + | var note = ''; | ||
| + | var words = line.split(';' | ||
| + | if(words.length == 2) { | ||
| + | var wds = words[1].split(/ | ||
| + | if(wds.length == 2) { | ||
| + | note = wds[1]; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return note; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * 1行をPicにいれて返す | ||
| + | */ | ||
| + | function getPic(line, | ||
| + | |||
| + | var pic = null; | ||
| + | |||
| + | // インラインコメント削除 | ||
| + | var commentIndex = line.indexOf(';' | ||
| + | if(commentIndex > 0) line = line.substring(0, | ||
| + | |||
| + | commentIndex = line.indexOf(' | ||
| + | if(commentIndex > 0) line = line.substring(0, | ||
| + | |||
| + | var found = line.match(/ | ||
| + | if(found){ | ||
| + | |||
| + | // スペースで区切る | ||
| + | var words = found[0].split(/ | ||
| + | |||
| + | // 最後のピリオド削除 | ||
| + | words[words.length-1] = words[words.length-1].replace(/ | ||
| + | |||
| + | // 最初の変数名をファイル名とする | ||
| + | if(!fileName) { | ||
| + | if(words && words.length >= 1) fileName = words[1]; | ||
| + | } | ||
| + | |||
| + | // PICは何番目か取得 | ||
| + | var picPos = 0; | ||
| + | for(var index in words){ | ||
| + | if(words[index] == ' | ||
| + | picPos = Number(index); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // オプション(レベル、変数名以外) | ||
| + | var option = []; | ||
| + | var j = 0; | ||
| + | for(var i=2; i< | ||
| + | option[j++] = words[i]; | ||
| + | |||
| + | if(words[i].toUpperCase() == ' | ||
| + | redefinesNumber++; | ||
| + | } | ||
| + | |||
| + | if(words[i].toUpperCase() == ' | ||
| + | occursNumber++; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if(picPos > 1) { | ||
| + | pic = new Pic(words[0], | ||
| + | } | ||
| + | } | ||
| + | return pic; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * 型からバイト数計算 | ||
| + | */ | ||
| + | function getByte(type, | ||
| + | |||
| + | var byte = 0; | ||
| + | |||
| + | var state = 0; // 状態 | ||
| + | var beforeType = ''; | ||
| + | var byteStr = ''; | ||
| + | |||
| + | for(var i=0; i< | ||
| + | |||
| + | // 1文字取得 | ||
| + | var char = type.charAt(i); | ||
| + | |||
| + | switch(char){ | ||
| + | case ' | ||
| + | case ' | ||
| + | case '/': | ||
| + | case ' | ||
| + | case ',': | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | beforeType = char; | ||
| + | byte += 1; | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | Editor.WarnMsg(' | ||
| + | return 0; | ||
| + | |||
| + | case ' | ||
| + | case ' | ||
| + | beforeType = char; | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | if(beforeType == ' | ||
| + | Editor.WarnMsg(' | ||
| + | return 0; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | if(beforeType == ' | ||
| + | Editor.WarnMsg(' | ||
| + | return 0; | ||
| + | } else { | ||
| + | beforeType = char; | ||
| + | byte += 1; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | case ' | ||
| + | if(state ==1){ | ||
| + | byteStr += char; | ||
| + | } else { | ||
| + | beforeType = char; | ||
| + | byte += 1; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | if(beforeType){ | ||
| + | state = 1; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | if(state == 1){ | ||
| + | |||
| + | byte += Number(byteStr) - 1; | ||
| + | |||
| + | state = 0; | ||
| + | beforeType = ''; | ||
| + | byteStr = ''; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | case ' | ||
| + | if(state == 1) { | ||
| + | byteStr += char; | ||
| + | } | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | // PACKED-DECIMAL or COMP-3 or COMPUTATIONAL-3 | ||
| + | if(isOptions(option, | ||
| + | byte = Math.floor(byte / 2 + 1); | ||
| + | } | ||
| + | |||
| + | // BINARY or COMP or COMPUTATIONAL | ||
| + | if(isOptions(option, | ||
| + | if(1< | ||
| + | byte = 2; | ||
| + | } else if(5< | ||
| + | byte = 4; | ||
| + | } else if(10< | ||
| + | byte = 8; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return byte; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * 位置計算 | ||
| + | * @param beforeByte 1つ前のバイト数 | ||
| + | * @param beforePos | ||
| + | */ | ||
| + | function getPosition(beforeByte, | ||
| + | |||
| + | return beforePos + beforeByte; | ||
| + | |||
| + | } | ||
| + | |||
| + | /** | ||
| + | * オプション中に指定文字列があるか | ||
| + | * @param | ||
| + | * @param | ||
| + | * @return true/ | ||
| + | */ | ||
| + | function isOptions(option, | ||
| + | |||
| + | var flg = false; | ||
| + | for(var index in option) { | ||
| + | if(option[index].toUpperCase() == str){ | ||
| + | flg = true; | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | return flg; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * 出力 | ||
| + | */ | ||
| + | function output(picArr){ | ||
| + | |||
| + | // ファイルに保存かクリップボードに保存かキャンセル | ||
| + | var result = Editor.MessageBox(' | ||
| + | if(result == 6){ | ||
| + | |||
| + | // 全選択 | ||
| + | Editor.SelectAll(); | ||
| + | |||
| + | // 上書き | ||
| + | Editor.InsText(changeText(picArr)); | ||
| + | |||
| + | // 名前を指定して保存(開いているファイルのパス) | ||
| + | Editor.FileSaveAs(fileName); | ||
| + | |||
| + | }else if(result == 7){ | ||
| + | |||
| + | // クリップボードにコピー | ||
| + | Editor.SetClipboard(0, | ||
| + | Editor.MessageBox(' | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * オプション | ||
| + | */ | ||
| + | function getOption(option) { | ||
| + | |||
| + | for(var index in option) { | ||
| + | if(option[index]==' | ||
| + | || option[index]==' | ||
| + | return option[index]; | ||
| + | } | ||
| + | } | ||
| + | return ''; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Pic配列を文字列に変換 | ||
| + | */ | ||
| + | function changeText(picArr) { | ||
| + | var txt = ""; | ||
| + | |||
| + | for(var i=0; i< | ||
| + | txt += picArr[i].no | ||
| + | txt += ' | ||
| + | txt += picArr[i].name; | ||
| + | txt += ' | ||
| + | txt += picArr[i].type; | ||
| + | var option = getOption(picArr[i].option) | ||
| + | if(option){ | ||
| + | txt += ' ' + getOption(picArr[i].option); | ||
| + | } | ||
| + | txt += ' | ||
| + | txt += picArr[i].byte; | ||
| + | txt += ' | ||
| + | txt += picArr[i].position; | ||
| + | txt += ' | ||
| + | txt += picArr[i].note; | ||
| + | txt += ' | ||
| + | } | ||
| + | |||
| + | return txt; | ||
| + | } | ||
| </ | </ | ||
| \\ | \\ | ||
| + | |||