スマホ買った。


転属が確定したので持たざるを得なくなったと。
実績を見込まれての指名はありがたいものの、果たして期待に添えることが出来るのかという心配もありの。

原稿が進まない。


・表紙絵下書き


いくら頭で練ってても結果が得られてない状態だと文章にまとまらない。
理論とか回路図とかプログラムは大体整えたんだけど試作回路のハンダ付けに時間食ってる。


DS の GBA Slot は一般的なマイコンと違ってラッチ機構持たないから固定的な出力はそもそも出来なくて
74HC573とか74HC574等のラッチ回路咬ます必要があるのと、ポートがビット単位で指定出来ないってのは理解した。
AD0 〜 AD15 の unsigned short (u16) か A16 〜 A23 の unsigned char (u8) かでそれぞれ入出力選べるハズなので
全て実証すれば PIO 実験のレポとして体裁は保てる感じ。


この調子では今回もギリギリ展開な予感な悪寒。

試行錯誤CHU!


24 ポート分の入力確認とロータリーエンコーダの扱い方を学ぶところまで。


コミックマーケット85 受かりました。


ちゅーことで本文書いたりテストプログラム作ったりしてます。


コミケウェブカタログって当落確定すると、全サークルの当・落・抽選漏れが全て調べられちゃうんですね。
冊子及びROM版出るまでの間サークル参加情報を隠蔽出来なくなってしまった訳ですか、そうですか。

WACOM SmartScroll と Logicool M570 のスイッチを交換した。


WACOM の左手デバイスはいくつかのボタンが潰れてしまい、
Logicool のワイヤレストラックボールはいい加減チャタリング我慢するのに疲れたから。



WACOM SmartScroll は ALPS の SKEGADA010 という型番のタクトスイッチを、
Logicool M570 は OMLON の D2F-01(D2F-01F でも可) という型番のマイクロスイッチを代替部品として用いた。

ISBN-13←→ISBN-10 変換プログラム。


サンプルその2。前回プログラムの応用編的な感じで。


ISBN1310.COB (ISBN-13→ISBN-10 変換)

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN1310-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.11.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(13).
       01 ISBN-TMP PIC X(9).
       01 ISBN-CNT PIC 99 VALUE 9.
       01 MOD-11 PIC 9(3) VALUE 11.
       01 WAIT-10-2 PIC 9(3) VALUE 10.
       01 TEMP PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDTEMP PIC 9.
       01 CDIGIT PIC X.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN-13→ISBN-10 変換プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "ISBN-13(13桁) を入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN-13 = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 MOVE ISBN-IN(4:9) TO ISBN-TMP
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-TMPを左桁の数字から順に×10、×9…×2と乗算して、
      *その結果を合計する。
           PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > ISBN-CNT
             COMPUTE TEMP = FUNCTION NUMVAL(ISBN-TMP(CNT:1))
             COMPUTE TOTAL = (WAIT-10-2 - CNT + 1) * TEMP + TOTAL
           END-PERFORM.
      *合計÷モジュラス11=余り
      *→モジュラス11−余り=チェックデジット を算出する。
      *結果が10ならX、11なら0、それ以外なら余り値がチェックディジット。
           DIVIDE MOD-11 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE TEMP = MOD-11 - R.
           MOVE TEMP TO CDTEMP.
           EVALUATE TEMP
             WHEN 10
               MOVE "X" TO CDIGIT
             WHEN 11
               MOVE 0 TO CDIGIT
             WHEN OTHER
               MOVE CDTEMP TO CDIGIT
           END-EVALUATE.
           DISPLAY "ISBN-10 は " ISBN-TMP CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.


ISBN1013.COB (ISBN-10→ISBN-13 変換)

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN1013-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.11.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(10).
       01 ISBN-TMP PIC X(12).
       01 ISBN-HD PIC X(3) VALUE "978".
       01 ISBN-CNT PIC 99 VALUE 12.
       01 MOD-10 PIC 9(3) VALUE 10.
       01 WAIT-3-1 PIC 9(3) VALUE 3.
       01 ODD PIC 9(3) VALUE ZEROS.
       01 EVEN PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDIGIT PIC 9.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN-10→ISBN-13 変換プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "ISBN-10(10桁) を入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN-10 = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC OR
               (ISBN-IN(1:9) IS NUMERIC AND ISBN-IN(10:1) = "X")
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 STRING
                   ISBN-HD DELIMITED BY SIZE
                   ISBN-IN(1:9) DELIMITED BY SIZE
                   INTO ISBN-TMP
                 END-STRING
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-TMPを左から奇数桁の数字を合計する。
           PERFORM VARYING CNT FROM 1 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-TMP(CNT:1)) TO ODD
           END-PERFORM.
      *ISBN-TMPを左から偶数桁の数字を合計×3する。
           PERFORM VARYING CNT FROM 2 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-TMP(CNT:1)) TO EVEN
           END-PERFORM.
           COMPUTE EVEN = EVEN * WAIT-3-1.
      *合計÷モジュラス10=余り
      *→モジュラス10−余り=チェックデジット を算出する。
      *結果が10なら0、それ以外なら余り値がチェックディジット。
           COMPUTE TOTAL = ODD + EVEN.
           DIVIDE MOD-10 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE CDIGIT = MOD-10 - R.
           DISPLAY "ISBN-13 は " ISBN-TMP CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.

ISBN チェックディジット算出サンプル。


プログラミング教える用で書いてみたやつなのでそのまま業務で使うにはベタ過ぎるかもです。
つか、COBOL 知らない俺が COBOL 説いてるってのがまず訳解らんのですがねぇ…。


ISBN13.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN13-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.09.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(12).
       01 ISBN-CNT PIC 99 VALUE 12.
       01 MOD-10 PIC 9(3) VALUE 10.
       01 WAIT-3-1 PIC 9(3) VALUE 3.
       01 ODD PIC 9(3) VALUE ZEROS.
       01 EVEN PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDIGIT PIC 9.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN13 チェックディジット算出プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "チェックディジットを調べる ISBN(12桁) を"
      -        "入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN(12桁) = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-INを左から奇数桁の数字を合計する。
           PERFORM VARYING CNT FROM 1 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-IN(CNT:1)) TO ODD
           END-PERFORM.
      *ISBN-INを左から偶数桁の数字を合計×ウェイト3する。
           PERFORM VARYING CNT FROM 2 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-IN(CNT:1)) TO EVEN
           END-PERFORM.
           COMPUTE EVEN = EVEN * WAIT-3-1.
      *合計÷モジュラス10=余り
      *→モジュラス10−余り=チェックデジット を算出する。
      *結果が10なら0、それ以外なら余り値がチェックディジット。
           COMPUTE TOTAL = ODD + EVEN.
           DIVIDE MOD-10 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE CDIGIT = MOD-10 - R.
           DISPLAY "チェックディジットは " CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.


ISBN10.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN10-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.09.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(9).
       01 ISBN-CNT PIC 99 VALUE 9.
       01 MOD-11 PIC 9(3) VALUE 11.
       01 WAIT-10-2 PIC 9(3) VALUE 10.
       01 TEMP PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDTEMP PIC 9.
       01 CDIGIT PIC X.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN10 チェックディジット算出プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "チェックディジットを調べる ISBN(9桁) を"
      -        "入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN(9桁) = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-INを左桁の数字から順に×10、×9…×2と乗算して、
      *その結果を合計する。
           PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > ISBN-CNT
             COMPUTE TEMP = FUNCTION NUMVAL(ISBN-IN(CNT:1))
             COMPUTE TOTAL = (WAIT-10-2 - CNT + 1) * TEMP + TOTAL
           END-PERFORM.
      *合計÷モジュラス11=余り
      *→モジュラス11−余り=チェックデジット を算出する。
      *結果が10ならX、11なら0、それ以外なら余り値がチェックディジット。
           DIVIDE MOD-11 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE TEMP = MOD-11 - R.
           MOVE TEMP TO CDTEMP.
           EVALUATE TEMP
             WHEN 10
               MOVE "X" TO CDIGIT
             WHEN 11
               MOVE 0 TO CDIGIT
             WHEN OTHER
               MOVE CDTEMP TO CDIGIT
           END-EVALUATE.
           DISPLAY "チェックディジットは " CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.