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 で使用できます。
REDING は読み出し専用、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$
