(最新版は Rev_0.67 ((C)2002-2015 Yoshi ++))
HandyScheme は Mini-scheme、TinyScheme をルーツとした、windows 98/SE/ME/XP で動作する
超コンパクトな SCHEME言語(LISP方言,SJIS対応) 処理系です。
HandyScheme にはいわゆる対話環境はなく、GUIを備えたスクリプト言語として動作します。
拡張子 .hs を HandyScheme(hS.exe)に関連付けることで、ソースファイル( .hs)を
編集後、ダブルクリックで即通常のWINDOWSアプリケーションと同じように実行することが
できますので、ちょっとした使い捨てツール等の作成が容易におこなえます。
また、完成した便利なツールは 単独の 【EXEファイル】 として
自由に再配布することも可能です。
スナップショット
(実行時イメージ 'snap.jpg )
ニュース
Rev_0.670 をアップロードしました。[2015-07-10]
ご要望にお答えして、配布を再開しました。
現在開発は停止しておりますが、時間が許す限り
メンテナンスはしていきたいと思います。
Rev_0.66h をアップロードしました。[2009-08-15]
Rev_0.66d をアップロードしました。[2007-04-06]
Rev_0.66c をアップロードしました。[2006-08-04]
Rev_0.66b をアップロードしました。[2006-07-31]
Rev_0.66 をアップロードしました。[2004-09-27]
Rev_0.65 をアップロードしました。[2004-09-16]
Rev_0.64 をアップロードしました。[2004-09-13]
hs063.lzh の内容物を更新しました。[2004-09-11]
Rev_0.63 をアップロードしました。[2004-09-10]
使用条件等
平和的利用に限り、銀河系すべての生命体が無償で使用可能です。
著作権他
プログラムソースの一部に以下の処理系を使用しています。
Mini-Scheme Interpreter Small-Version 0.55
Mr. Atsushi Moriwaki
TinyScheme 1.3x
http://tinyscheme.sourceforge.net/
Mr. Dimitrios Souflis
変更履歴
(plane-text 'ChangeLog)
標準関数
R4RS,R5RS の必須関数はほぼ実装されています。
(但し、一部オプション等が省略されている場合があります。)
また、mini-scheme TINY-scheme の上位互換になっていますのでそちら
のマニュアルも参考にしてください。
(ほぼ)全キーワード
Scheme の関数名は非常に長く自力で入力するのはたいへんです。
そこで未完成ながらHandySchemeで利用できる全キーワードを公開
しますので、お使いのエディタに補完機能がある場合
辞書として使って入力作業の効率化にお役立て下さい。
(※補完機能についてはご利用のエディタのマニュアルを参照してください。)
(text-file '全キーワードリスト)
HandyScheme関数
-----------------------------------------------------------------
(cls)
(デフォルトの背景色で)画面のクリアを行います。
color-bg関数で背景色が指定されていれば、その色によって画面クリア
が行われます。
-----------------------------------------------------------------
(title "文字列")
ウインドウタイトルを"文字列"に設定します。
-----------------------------------------------------------------
(screen width height [dx dy])
(screen width height [cmd])
スクリーン(ウインドウ)のサイズ(と表示位置)を設定します。
表示位置は(省略可)数値以外に シンボル 'center 'random を指定可能です。
例:
(screen 320 240 100 100) ==> デスクトップ(100,100)に表示。
(screen 320 240 'center) ==> デスクトップ中央に表示。
(screen 320 240 'random) ==> 表示位置はランダム。
-----------------------------------------------------------------
(locate x y)
標準(画面)出力時の display 関数における、表示位置を強制的に変更します。
-----------------------------------------------------------------
(move-window x y width height)
スクリーン(ウインドウ)の表示位置を変更します。
-----------------------------------------------------------------
(desktop-width)
デスクトップウインドウ(解像度)の横サイズを返します。
-----------------------------------------------------------------
(desktop-height)
デスクトップウインドウ(解像度)の縦サイズを返します。
-----------------------------------------------------------------
(color-fg red blue green)
GDIグラフィックス関数における前景色(ペン)を設定します。
例:
(color-fg 255 255 255)
例は、前景色(ペン)を白に設定しています。
-----------------------------------------------------------------
(color-bg red blue green)
GDIグラフィックス関数における背景色(ブラシ)を設定します。
-----------------------------------------------------------------
(font-size n)
フォントサイズを設定します(デフォルト14)。
-----------------------------------------------------------------
(font-weight n)
フォントウエイトを設定します(デフォルト600)。
-----------------------------------------------------------------
(font-style str)
フォントスタイルを設定します。
-----------------------------------------------------------------
(set-rop op)
GDIグラフィックス関数です。
描画の際の論理オペレーションを設定します。
op
--------------------
R2_BLACK
R2_COPYPEN
R2_MASKNOTPEN
R2_MASKPEN
R2_MASKPENNOT
R2_MERGENOTPEN
R2_MERGEPEN
R2_MERGEPENNOT
R2_NOP
R2_NOT
R2_NOTCOPYPEN
R2_NOTMASKPEN
R2_NOTMERGEPEN
R2_NOTXORPEN
R2_WHITE
R2_XORPEN
--------------------
-----------------------------------------------------------------
(box x1 y1 x2 y2)
GDIグラフィックス関数です。
関数color-fgで指定された色を使用して四角形の描画を行います。
(x1 y1)は四角形の左上座標。
(x2 y2)は四角形の右下座標。
-----------------------------------------------------------------
(box-fill x1 y1 x2 y2)
GDIグラフィックス関数です。
関数color-fgで指定された色を使用して四角形の描画を行いますが
関数color-bgで指定された色を使用して内部を塗り潰します。
-----------------------------------------------------------------
(line x1 y1 x2 y2)
GDIグラフィックス関数です。
線分の描画を行います。
-----------------------------------------------------------------
(point x y)
GDIグラフィックス関数です。
点(ドット)の描画を行います。
-----------------------------------------------------------------
(ellipse x1 y1 x2 y2)
GDIグラフィックス関数です。
楕円の描画を行います。
-----------------------------------------------------------------
(ellipse-fill x1 y1 x2 y2)
GDIグラフィックス関数です。
楕円の描画を行います、内部を塗りつぶします。
-----------------------------------------------------------------
(flush bool)
GDIグラフィックス関数の結果をスクリーンに反映します。
パラメータ bool は #t または #f の何れかを指定します。
line,box,point,等のGDIグラフィックス関数で描かれたグラフィックスは
flush,flush-areaを呼び出すまで画面に反映されません。
-----------------------------------------------------------------
(flush-area bool x1 y1 x2 y2)
範囲を指定しての flush 関数です(flushを参照してください)。
-----------------------------------------------------------------
(game-data-load "ファイル名")
簡易ゲーム関数です。
"ファイル名"で指定された ファイルを読みこんでゲームデータとします。
この時、"ファイル名"は
無圧縮、256色で描かれた、ビットマップファイルでなければなりません。
また、パレット番号0番はスプライトを表示する際に透明色として処理されます。
読みこまれたファイルは「データバッファ」に元のイメージのまま保存されます。
ファイルが正常に読み込まれた場合 #t を返します。
(game-data-load "foo.bmp")
|
|
+--------------+
|データバッファ |
+--------------+
|
|
game-put-bg
game-put-zoom
game-fill-bg
game-sprite-regist
game-sprite-move
game-sprite-crash?
|
|
+--------------+
|オフスクリーン |
+--------------+
|
game-draw
|
+--------------+
|スクリーン |
+--------------+
-----------------------------------------------------------------
(game-save-offscreen sx sy width height filename)
簡易ゲーム関数です。
オフスクリーンのイメージをファイルに保存します。
-----------------------------------------------------------------
(game-sprite-regist no x y width height)
簡易ゲーム関数です。
データバッファのイメージをスプライトとして登録します。
-----------------------------------------------------------------
(game-sprite-move no x y)
簡易ゲーム関数です。
登録された、スプライトを実際に表示(移動)します。
game-sprite-regist
-----------------------------------------------------------------
(game-put-bg sx sy dx dy width height)
簡易ゲーム関数です。
データバッファのイメージをオフスクリーンにコピーします。
-----------------------------------------------------------------
(game-sprite-crash? no1 no2)
簡易ゲーム関数です。
2つの指定された登録番号のスプライトが接触したかを判定します。
接触していれば #t を返します。
-----------------------------------------------------------------
(game-fill-bg palno dx dy width height)
簡易ゲーム関数です。
パレット番号で指定された色を使って指定範囲を塗りつぶします。
-----------------------------------------------------------------
(game-put-zoom sx sy dx dy width height [ n f ])
簡易ゲーム関数です。
game-put-bgと同等の関数ですが倍率を指定することによって拡大した状態で
コピーを行います。
例:
(game-put-zoom 0 0 0 0 32 32 4 #t)
データバッファの座標(0, 0)からオフスクリーンの座標(0, 0)に
32×32ドットのキャラクタパターンをコピーします。
この時グラフィックは4倍に拡大され、透過処理(#t)がほどこされます。
-----------------------------------------------------------------
(game-data-width)
簡易ゲーム関数です。
データバッファに読みこまれたイメージの幅を返します。
-----------------------------------------------------------------
(game-data-height)
簡易ゲーム関数です。
データバッファに読みこまれたイメージの高さを返します。
-----------------------------------------------------------------
(game-draw)
簡易ゲーム関数です。
実際にオフスクリーンからスクリーンへブロック転送を行います。
(※この game-draw 関数を呼ばない限り画面への描画を行われません。)
-----------------------------------------------------------------
(joy-pad-btn)
ジョイパッド(スティック)の押下されたボタン番号を返します。
-----------------------------------------------------------------
(joy-pad-drc)
ジョイパッド(スティック)の押下された方向番号を返します。
-----------------------------------------------------------------
(play-midi fname)
MIDIファイルを演奏します。
-----------------------------------------------------------------
(play-wave fname)
WAVEファイルを演奏します。
-----------------------------------------------------------------
(stop-midi)
演奏中のMIDIファイルを停止します。
-----------------------------------------------------------------
(stop-wave)
演奏中のWAVEファイルを停止します。
-----------------------------------------------------------------
(midi-finish?)
MIDIファイルの演奏が終端に達していれば #t を返します。
-----------------------------------------------------------------
(mci "MCIコマンド文字列")
MCIコマンド文字列の発行(= API: mciSendString)。
(mci-rstr)
MCIコマンド発行後の情報を文字列で返します(= lpszReturnString)。
例1:
(mci "set cdaudio door open") ==> CDトレーオープン。
(mci "set cdaudio door closed") ==> CDトレークローズ。
例2:
(mci "open foo.mp3 alias music")
(mci "play music")
(define (on-close)
(mci "stop music")
(mci "close music"))
===> foo.mp3 を演奏(終了時、デバイスクローズ)。
-----------------------------------------------------------------
(file-size fname)
指定ファイルのサイズを返します。
-----------------------------------------------------------------
(get-cd)
現在のカレントディレクトリを返します。
-----------------------------------------------------------------
(set-cd str)
カレントディレクトリをstrに変更します。
-----------------------------------------------------------------
(dir)
カレントディレクトリの全エントリーをリスト(要素は文字列)で返します。
-----------------------------------------------------------------
(exec cmd arg)
外部プログラムの実行。
例:
(exec "notepad.exe" "")
ノートパッドが立ちあがります。
-----------------------------------------------------------------
(exec-hide cmd arg)
外部プログラムの実行を行いますが、ウインドウを非表示にします。
-----------------------------------------------------------------
(exec-sync cmd bool)
外部プログラムの同期実行。
例:
(exec-sync "notepad.exe" #t)
ノートパッドが立ちあがりますが、ノートパッドを終了するまで
制御が戻りません。
-----------------------------------------------------------------
(exec-open "ファイル名")
"ファイル名"を関連付けされているプログラムで開きます。
-----------------------------------------------------------------
(sys-remove fn)
ファイルの削除。
-----------------------------------------------------------------
(sys-rename)
ファイルのリネーム。
-----------------------------------------------------------------
(sys-time)
システムタイムを返します。
-----------------------------------------------------------------
(iter i n fun)
イテレータです。
i : funに渡されるカウンタの開始値
n : funを実行する回数。
(iter 0 5
(lambda (x) (display x))) ;===> 01234
※手違いにより旧バージョン(0.59以前)にて iterとloopの仕様が逆になっていました。
お手数ですが、すでに使用されている方は loop を iter に書き換えるか
プログラム先頭で (define loop iter) を書き加えてください。
-----------------------------------------------------------------
(while flg form0 .. formX)
emacs-lispからインポートされたイテレータです。
(let ((x 0))
(while (< x 5)
(display x)
(++ x))) ;===> 01234
-----------------------------------------------------------------
(loop form0 form1 .. formX)
formを無限に繰り返します。
但し (return [value]) を評価した時点で直ちにループ
から抜け出します。
(let ((i 0))
(loop
(display i)
(++ i)
(if (>= i 5) (return "OK")))) ;====> 01234
※旧バージョンにて iterとloopの仕様が逆になっていました。
ご注意ください(※ iterを参照ください。)。
-----------------------------------------------------------------
(file-select fn title fname filter)
ファイル選択ダイアログです。
ユーザーによってがファイルが選択された場合 fn に選択されたファイルを
文字列として収納します。
この関数はファイルが正しく選択された場合には #t をキャンセルされた
場合等には #f を返します。
例:
(let ((fn))
(file-select fn "ファイル選択" ""
'(("text" . "*.txt")("scheme" . "*.hs")("ALL" . "*.*"))))
===> 「ファイル選択」というタイトルのダイアログを表示。
(let ((fn ""))
(file-select fn "" "" #f))
==>「開く」というタイトルのダイアログが表示されます。
(let ((fn)
(p))
(cond ((file-select fn "OPEN" "foo.hs" #f)
(set! p (open-input-file fn))
(iter 0 10 (lambda(x)
(display (read-line p))
(newline)))
(close-input-port p))))
==>選択されたファイルの先頭から10行を表示します。
キャンセルされた場合は何もしません。
-----------------------------------------------------------------
【GUI】ボタン
(make-button x y width height str FUN_SYM_NAME)
ボタンを作成します、押下された場合 FUN_SYM_NAME で指定されたユーザーハンドラ
が呼び出されます。
また、この関数に限らず make- から始まる名前のGUI関数は全て作成された
オブジェクトのハンドルを返します。
(define (FUN_SYM_NAME))
ユーザーハンドラです。FUN_SYM_NAMEは make-button で指定した名前になります。
例)
(define h (make-button 100 100 64 32 "終了" 'button1))
(define (button1) (quit 3))
この例では、スクリーン座標(100, 100)にサイズ(64, 32)のボタンが
表示されます。
ボタンが押下されると、3秒後に終了します。
-----------------------------------------------------------------
【GUI】インプット
(make-input x y width height str)
インプット(一行限定エディット)を作成します。
オブジェクトハンドルを返します。
(input-get-string hwnd)
hwndで指定されたインプットオブジェクトに入力されたテキスト(文字列)を
返します。
(input-set-string hwnd str)
hwndで指定されたインプットオブジェクトにテキスト(文字列)を設定します。
-----------------------------------------------------------------
【GUI】リストボックス
(make-listbox x y width height [bool])
リストボックスを作成します、オブジェクトハンドルを返します。
オプション bool には #t か #f を指定します。
それぞれスクロールバー付加のオン、オフになります。
(listbox-add hwnd str)
(listbox-insert hwnd index str)
(listbox-selected hwnd)
(listbox-delete hwnd index)
(listbox-count hwnd)
(listbox-scan hwnd str)
(listbox-select h n)
(listbox-text h n)
例:
(define h (make-listbox 10 10 100 100))
(listbox-add h "foo")
(listbox-add h "bar")
リストボックスを1つ作って、アイテムを2つ追加しています。
-----------------------------------------------------------------
【GUI】エディット
(make-edit x y width height [opt])
エディットを作成します、オブジェクトハンドルを返します。
オプション opt には以下数値を指定できます。
0を指定した場合 ==> スクロールバーなし
1を指定した場合 ==> 縦スクロールバー
2を指定した場合 ==> 横スクロールバー
4を指定した場合 ==> リードオンリー
(edit-load hwnd fname)
(edit-save hwnd fname)
(edit-add hwnd str)
-----------------------------------------------------------------
【GUI】チェックボックス
(make-checkbox x y width height s bool)
チェックボックスを作成します、オブジェクトハンドルを返します。
(checkbox-checked? h)
例:
(define c1 (make-checkbox 160 62 100 30 "HPを節約" #t))
チェックボックスをチェックされた状態でひとつ作成しています。
-----------------------------------------------------------------
【GUI】ラジオボタン
(make-radiobutton x y width height s f)
ラジオボタンを作成します、オブジェクトハンドルを返します。
(radiobutton-checked?)
(radiobutton-check)
(radiobutton-uncheck)
(define (on-radiobutton n))
ユーザーによってラジオボタンがクリックされた場合のハンドラ。
例:
;;ラジオボタンとチェックボックスです。
(define r1 (make-radiobutton 160 10 100 30 "通常攻撃" #t))
(define r2 (make-radiobutton 160 36 100 30 "魔法攻撃" #f))
(define c1 (make-checkbox 160 62 100 30 "MPを節約" #t))
;;ラジオボタンが押された時の処理です。
(define (on-radiobutton h)
(radiobutton-uncheck r1)
(radiobutton-uncheck r2)
(radiobutton-check h))
-----------------------------------------------------------------
【GUI】コンボボックス
(make-combobox x y width height bool)
コンボボックスを作成します、オブジェクトハンドルを返します。
(combobox-add hwnd str)
(combobox-insert hwnd str)
(combobox-selected hwnd)
(combobox-delete hwnd index)
(combobox-count hwnd)
(combobox-scan hwnd str)
(combobox-put hwnd str)
(combobox-get hwnd)
(combobox-reset hwnd)
例:
;;コンボボックス(プルダウンリスト)です。
(define cb (make-combobox 160 100 130 100 #f))
(combobox-add cb "ガンガン行こうぜ")
(combobox-add cb "みんながんばれ")
(combobox-add cb "おまえががんばれ")
(combobox-add cb "もうがんばれない")
(combobox-select cb 0)
-----------------------------------------------------------------
【GUI】ポップアップメニュー
マウスの右ボタンで表示されるメニューです。
(popup-menu-set-item x)
メニューアイテムを設定します。
例:
(popup-menu-set-item '( "foo" "bar" "-" "quit"))
(popup-menu-set-stat id f)
アイテムの状態を設定します。
例:
(popup-menu-set-stat 0 1) ===> 0番のアイテムが非表示になる。
(popup-menu-set-stat 1 2) ===> 1番のアイテムにチェックマークが付く。
(popup-menu-set-stat 2 0) ===> 2番のアイテムは標準表示になる。
(popup-menu-get-stat id)
アイテムの状態を返します。
(define (on-popup-menu id))
ポップアップメニューのハンドラです、アイテムが選択されると呼ばれます。
-----------------------------------------------------------------
【GUI】ステータスバー
ウインドウ下部に情報などの文字列を表示する為の領域です。
(make-statusbar lst)
ステータスバーを表示します。
パラメータ lst は 数値が要素のリストで各区画の長さを
指定します。
(statusbar-puts no s [flg])
ステータスバーに文字列を表示します。
no には区画(0オリジン)番号、s に文字列をそれぞれ指定します。
省略可能なオプション flg は #f または #t で表示状態が変わります。
例:
以下のサンプルコードは長さ128の区画を2つもったステータスバー
を作成しそれぞれ文字列を表示します。
(make-statusbar '(128 128))
(statusbar-puts 0 "ここが区画0番")
(statusbar-puts 1 "ここが区画1番" #t)
-----------------------------------------------------------------
クリップボード
(※現バージョンではテキストのみに対応しています)
(clipboard-put "文字列")
クリップボードに文字列をコピーします。
(clipboard-get)
クリップボードからテキストをロードします。
-----------------------------------------------------------------
タイマー
(timer-set n)
指定時間後にタイマーハンドラ on-timer が呼び出されます。
指定時間は 1/1000秒 単位です。
(define (on-timer))
タイマーハンドラです。
-----------------------------------------------------------------
イベント
以下は定義済みのイベントハンドラです。
これらを再定義することによってイベントに対する
処理を行うことができます。
(define (on-close))
(define (on-drop-files fn))
(define (on-keys n))
(define (on-close))
(define (on-key-down n))
(define (on-key-up n))
(define (on-mouse-button-down n x y))
(define (on-mouse-button-up n x y))
(define (on-mouse-move n x y))
(define (on-command h nf wp lp)
(kill-events [hwnd])
指定されたオブジェクトハンドルに関するイベントをキューから
削除します。
(do-events)
イベントキューに蓄えられたイベントを強制的に発行します。
(do-paint)
キュー内のペイントイベントのみ発行します。
(object-set-text hwnd str)
GUIオブジェクトにテキストを設定します。
(cursor-style style)
マウスカーソルの形状を変更します。
style
------------------
idc-arrow
idc-ibeam
idc-wait
idc-sizenwse
idc-sizenesw
idc-sizewe
idc-sizens
idc-sizeall
idc-no
idc-hand
idc-appstarting
idc-help
------------------
-----------------------------------------------------------------
(object-enable hwnd bool)
GUIオブジェクトの状態の変更。
bool:#t 有効
bool:#f 無効
-----------------------------------------------------------------
(set-focus hwnd)
フォーカスを指定されたオブジェクトに移します。
-----------------------------------------------------------------
(remove-gui-object hwnd)
GUIオブジェクトを完全に削除します。
-----------------------------------------------------------------
(input-box str1 str2)
インプットダイアログを表示します。
入力された文字列を返します。
-----------------------------------------------------------------
(message-box title str)
文字列表示をダイアログ形式で表示します。
-----------------------------------------------------------------
【簡易FTP関数】
----------------------------------------------------------------------
簡易FTP関数
----------------------------------------------------------------------
(ftp-open host user pass)
ホストに接続を試み、セッションを開始します。
接続に失敗した場合 #f を返します。
接続先ホスト名、ユーザー名、パスワード
(ftp-close)
セッションを終了します。
(ftp-ls)
リモートのファイル一覧をリストで返します(各要素は文字列)。
(ftp-mkdir dirName)
リモートにディレクトリーを作成。
(ftp-cd dirName)
リモートのカレントディレクトリーを変更します。
(ftp-delete fileName)
リモートのファイルを削除します。
(ftp-pwd)
リモートのカレントディレクトリを文字列で返します。
(ftp-put fname . opt)
ローカルのファイルをリモートへ転送します。
(ftp-get fname . opt)
リモートからローカルへファイル転送します。
(ftp-rmdir dirName)
リモートのディレクトリを削除します。
(ftp-rename srcName objName)
リモートのファイル名を変更します。
(ftp-command str)
FTPコマンドを発行します。
(ftp-transfer-type type)
転送タイプを 'ascii または 'binary に変更します。
使用例:
(ftp-open "ftp.foobar.jp" "username" "password")
(display (ftp-pwd))
(newline)
(ftp-transfer-type 'ascii)
(ftp-put "foo.txt" "bar.txt")
(ftp-command "site chmod 666 foo.txt")
(ftp-get "bar.txt")
(display (ftp-ls))
(newline)
(ftp-close)
----------------------------------------------------------------------
-----------------------------------------------------------------
【WindowsAPI】
ほとんどのAPI関数はDLL関数を使って呼び出すことが可能ですが
よく使用されるものについては組み込み関数として定義されています。
Windows標準DLL&関数の資料は HSP 関連サイトで多数紹介されて
いますので検索してみてください。
「ポインタについての補足」
文字列のポインタが必要な場合 string->pointer 関数を使用してください。
(string->pointer s)
(pointer->string p)
例:
(define s "hello, world")
(string->pointer s) => 文字列 "hello, world" のポインタを数値で返します。
組込済みAPI関数
(get-foreground-window)
(get-cursor-pos)
(set-cursor-pos x y)
(window-from-point x y)
(child-window-from-point h x y)
(send-message h int int int)
(find-window int int)
(find-window-ex h1 h2 p1 p2)
(get-window h int)
(mouse-left-button-click)
※C言語の windowsAPI 関数 リファレンス等を参考にしてお使いください。
以下のサンプルは2つともすでに起動されているウインドウズ付属の
メモ帳(notepad.exe)に文字列を入力するコードです。
;;サンプル1
(define hm (find-window (string->pointer "Notepad") 0))
(define hc (get-window hm 5))
(send-message hc 12 (string->pointer "")(string->pointer "ほげー"))
===>メモ帳に"ほげー"が入力される。
;;サンプル2
(define hm (find-window (string->pointer "Notepad") 0))
(define hc (find-window-ex hm 0 (string->pointer "Edit") 0))
(send-message hc 12 (string->pointer "")(string->pointer "ふげー"))
===>メモ帳に"ふげー"が入力される。
-----------------------------------------------------------------
【その他、ユーティリティー関数】
(inc v [step]) または (++ v [step])
(dec v [step]) または (-- v [step])
変数のインクリメント、デクリメント。
(string->pointer s)
文字列 S のアドレスを返します。
(port->vector port [opt])
(vector->port v p [opt])
(オープンされた)ポートとベクターの相互変換。
(port-seek p n)
ポートの参照カウンタをnバイトだけ進めます。
(port-tell p)
ポートの参照カウンタの現在値を返します。
(string-upcase str)
(string-downcase str)
(アルファベット)文字列を大文字、小文字に変換します。
(string-scan s1 s2 [opt])
文字列から部分文字列を検索します(SCHEME標準関数です)。
(data->list fname)
スペース、改行、カンマで区切られたテキストファイルを読みこみ
リストで返します。
(read-line [port])
ポートから1行読みこみます。
(quit [sec])
終了します。
オプション(数値)が指定された場合、その秒数後に終了します。
(err-mes-ctr no)
エラー時の出力形式を変更します。
(file-scan fname str [opt])
ファイルから部分文字列を検索して場所を返します。
(csv->list str)
CSV形式に準拠した文字列をリストにして返します。
(euc->sjis str)
(sjis->euc str)
漢字コード(euc、sjis のみ)の相互変換。
(htm->txt src-fname obj-fname)
指定されたHTMLフォーマットファイルを読みこみ
プレーンテキストファイルに変換して保存します。
(http->file size http fname)
httpプロトコルを使ってファイルをダウンロードします。
(local-time)
西暦、月、日、曜日、時、分、秒をリストで返します。
(各要素は全て文字列です)
=>(2004 7 4 SUN 15 38 41)
(rand n)
0〜n-1 の範囲乱数を返します。
(crlf)
CR, LF を文字列として返します。
(remove-space! "文字列")
文字列からスペース,改ページ,改行,復帰,タブ,垂直タブを削除します。
この関数は指定された文字列を破壊的に操作します。
(string-body "文字列")
文字列の前後1バイトを除いた文字列を返します。
(string-body "abc") ==> abc
implode,explode
古き良きLISP互換の関数。
(implode 'sym) ==> '(s y m)
(explode '(a t o m)) ==> 'atom
(peek-byte port)
(read-byte port)
(write-byte i port)
peek-char,read-char,write-charのバイナリ版。
(※Rev0.59以降ではファイルモードをバイナリに統一したため
動作はxxxx-charと同じになりますが、若干高速です。)
block,return-from
common-lispからのインポート。
「オートパイロット用関数」
(mouse-left-button-click)
(move-window2 handle x y width height)
(mouse-cursor-move x y)
(sleep ms)
(keyboard c)
(keyboard2 c1 c2)
(mouse-left-button-down)
(mouse-left-button-up)
(mouse-right-button-click)
(get-pixel-abs x y)
(set-window-pos h1 h2 x y cx cy f)
-----------------------------------------------------------------
【DLL】
C言語、デルファイ等で作成されたDLL内の関数を呼び出すことができます。
(※但し、現在の仕様は非常に原始的かつ、数値(4バイト)とポインタのみの
受け渡ししかできないため、将来大幅に仕様変更するかもしれません。)
(dll-load path-str)
path-strで指定された DLL をロードします。
この関数はインスタンスハンドルを返します。
(dll-func hi dll-str scm-str prm-str ret-str)
DLL内の関数を HandyScheme の関数として使用できるよう
登録します。
hi インスタンスハンドル
dll-str DLL内での関数名(文字列)。
scm-str スキームでの関数名(文字列)。
prm-str 関数のパラメータ規則(文字列)。
数値(4バイト)なら i 文字列(ポインタ)なら s を
文字列として列挙します。
ret-str 関数が返す値の種類(文字列)。
数値(4バイト)なら i 文字列(ポインタ)なら s を
長さ1の文字列として指定してください。
(dll-free hi)
DLLへの参照値をデクリメントします。
ロードされたDLLの後始末は プログラム終了時に Handy Scheme が
行いますのでユーザーがこの関数を明示的に呼び出す必要は通常ありません。
例:
;;
(define hi (dll-load "user32.dll"))
(dll-func hi "SetCursorPos" "set-cursor-pos" "ii" "i")
(dll-func hi "MessageBoxA" "message-box" "issi" "")
(dll-func hi "MessageBeep" "beep" "" "")
;;
(message-box 0 "Hello, world!!" "dll sample" 0)
(beep)
(set-cursor-pos 256 256)
;;
(dll-free hi) ;←終了時に自動処理されますのでなくてもかまいません。
(quit)
-----------------------------------------------------------------
【システム変数】
グローバル変数
*cmdline* コマンドライン引数
*hwnd* ウインドウハンドル
*hi* インスタンスハンドル
*hdc* DCハンドル(※オフスクリーン)
(download-handy-scheme ダウンロード)