関数・命令 /

OPEN

OPEN <file|dir|address>
FOR READING|WRITING|APPENDING|READWRITE|DIRECTORY|NETWORK
[FROM address[:port]]|SERVER|MEMORY AS <handle>

Type: statement

<file> <dir> <address> を開き <handle> へ割り当てます。
割り当てた <handle> は READING・WRITING・APPENDING・READWRITE で使用できます。
READING は読み出し専用、WRITING・APPENDING は書き込み専用、
READWRITE は読み書き両方を可能にします。

例:

OPEN "data.txt" FOR READING AS myfile
WHILE NOT(ENDFILE(myfile)) DO
    READLN txt$ FROM myfile
    IF NOT(ENDFILE(myfile)) THEN
        PRINT txt$
    ENDIF
WEND
CLOSE FILE myfile
DIRECTORY はディレクトリを開きます。
読みだすとディレクトリ内のファイルを返します。

例:

OPEN "." FOR DIRECTORY AS mydir
REPEAT
    GETFILE myfile$ FROM mydir
    PRINT "File found: ", myfile$
UNTIL ISFALSE(LEN(myfile$))
CLOSE DIRECTORY mydir
NETWORK はネットアドレスを開きます。
オプション FORM を用いて IP アドレス・ポート番号を設定する事ができます。

例:

OPEN "www.google.com:80" FOR NETWORK AS mynet
SEND "GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n" TO mynet
REPEAT
    RECEIVE dat$ FROM mynet
    total$ = CONCAT$(total$, dat$)
UNTIL ISFALSE(WAIT(mynet, 500))
PRINT total$
CLOSE NETWORK mynet
SERVER は入って来るネットワーク接続を扱うサーバとして開きます。
同じホストと港を用いた TCP モードで複数回アクセスするとき、
OPEN SERVER は新しいソケットを作らず、
もう一つの入って来る接続に順応します。
IP アドレスの代わりに ワイルドカード * を用いて
全インターフェースを聞くのに用いることができます。
プロトコルの設定に OPTION NETWORK を参照して下さい。
OPEN "*:51000" FOR SERVER AS myserver
WHILE NOT(EQUAL(LEFT$(dat$, 4), "quit")) DO
    RECEIVE dat$ FROM myserver
    PRINT "Found: ", dat$
WEND
CLOSE SERVER myserver
MEMORY はメモリ領域を開いて使用することができます。
data = MEMORY(500)
OPEN data FOR MEMORY AS mem
PUTLINE "Hello cruel world" TO mem
MEMREWIND mem
GETLINE txt$ FROM mem
CLOSE MEMORY mem
PRINT txt$