No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 948 | 949 | 950 |...| 965 | 966 | 967 || Next»

自己出力プログラムの生成プログラム

Java のソースを読んでそのソースを含む自己出力プログラムを吐くプログラムを書いた.あまり美しくないなぁ...

/***
 * 次の Self2.template をソースファイルに埋め込んで,
 * そのソース全体を含む自己出力プログラムを作成する.
 * 実行クラス名は SelfPrint (Self2.template のクラス名) となる.
 * \r は置き換えないのでソース中に含まないようにすること.
 * \n, \t, " を %n, %t, %c という文字に変換して文字列を埋め込むので,
 * ソースはこれらを含まないこと.
 * あと, %s もあるとまずい.
 * エスケープ文字もまずそう.
 * Self.template の main 関数で何かメソッドを呼ぶように書けば仕事もできる.
 * そのばあい,画面出力があると自己出力の意味が無いけど...
 *---------------------- Self2.template start -------------------------- 
class SelfPrint {
	static String s="%s";
	public static void main(String [] args) {
		String ss=s.replaceAll(new String(new byte []{37, 110}), new String(new byte []{10}));
		ss=ss.replaceAll(new String(new byte []{37, 116}), new String(new byte []{9}));
		ss=ss.replaceAll(new String(new byte []{37, 99}), new String(new byte []{34}));
		ss=ss.replaceAll(new String(new byte []{37, 115}), s);
		System.out.print(ss);
	}
}
 *---------------------- Self2.template end -------------------------- 
 *
 */
 
import java.io.*;
 
class SelfGen2 {
	public static void main(String [] args) throws Exception {
		if(args.length <= 0){
			System.out.println("Usage: java SelfGen2 input.java");
			System.out.println("Note: input.java should not contain CR");
			System.exit(0);
		}
		File file = new File(args[0]);
		FileReader fis = new FileReader(file);
		int len = (int)file.length();
		char [] buf = new char[len];
		len = fis.read(buf, 0, len);
		String source = new String(buf, 0, len);
		File tfile = new File("Self2.template");
		FileReader tfis = new FileReader(tfile);
		int tlen = (int)tfile.length();
		char [] tbuf = new char[tlen];
		tlen = tfis.read(tbuf, 0, tlen);
		String template = new String(tbuf, 0, tlen);
		source = source + template;
		//System.out.println(source);
 
		String ss = source;
		ss=ss.replaceAll(new String(new byte []{10}), new String(new byte []{37, 110}));
		ss=ss.replaceAll(new String(new byte []{9}), new String(new byte []{37, 116}));
		ss=ss.replaceAll(new String(new byte []{34}), new String(new byte []{37, 99}));
		source=source.replaceAll(new String(new byte []{37, 115}), ss);
		System.out.print(source);
	}
}

フック

ふとフックが気になって Windows のフック登録の API を調べてみた.どうやら SetWindowsHookEx という名前らしい.グローバルにフックするにはDLLを作る必要があるそうで面倒かもしれないけど今度これで遊んでみよう.ここらへんが参考になるかなぁ?

還付金帰ってきた

先月の頭に確定申告に行って払いすぎの税金を返してもらう手続きをしていたけど,このたびその還付金が帰ってきた.やったー! ちなみに実際に振り込まれたのは三月末だったみたい.兎にも角にもお役所様もしっかり働いていらっしゃる様で何よりだ.さて,返ってきた金は新しいMP3プレーヤにでも変えようかなぁ.

地震だぁ

今朝方ちと大きめの地震がまた起きた.震源は千葉の北のほうだそうで東京はあまり大きく揺れなかったけど久々に長く揺れ続けたので少々ビビってみたり.でもまあ,最近地震が多いせいで震度5弱が弱い地震に思えてしまう.もともと地震には慣れているけどもう少し危機感を持ったほうがいいかなぁと思ってみる今日この頃.

再び寝過ぎ...

ヒノキ花粉のせいか最近体がだるくやる気が指数関数的に減少... 春だから花粉抜きでももちろん眠い... 結果として今日一日ほとんど寝てすごした... だめだこりゃ.

寝すぎた...

昨日寝たのが23時ごろ.今日起きたのが17時ごろ.二日分寝てしまったので今日は寝ないでがんばろう.さっさとテクレポ仕上げなきゃ.

«Prev || 1 | 2 | 3 |...| 948 | 949 | 950 |...| 965 | 966 | 967 || Next»
Search
Feeds

Page Top