これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド cgmNCARG です。
プログラム:
NAME
CGM_open、CGM_close、CGM_lseek、CGM_read、CGM_write、CGM_directory、CGM_freeDirectory、
CGM_printDirectory、CGM_getInstr、CGM_flushGetInstr、CGM_putInstr、CGM_flushOutputInstr、
CGM_initMetaEdit、CGM_termMetaEdit、CGM_copyFrames、CGM_deleteFrames、CGM_mergeFrames
CGM_moveFrames、CGM_readFrames、CGM_valid、CGM_writeFile、CGM_writeFrames、
CGM_appendFrames - コンピュータ グラフィックス メタファイルの操作
構文
#include
Cgm_fd CGM_open(メタファイル, サイズ、 フラグ、 モード)
チャリオット *メタファイル;
署名されていない サイズ;
int型 フラグ。
int型 モード;
int型 CGM_close(cgm_fd)
Cgm_fd cgm_fd;
int型 CGM_lseek(cgm_fd, オフセット)
Cgm_fd cgm_fd;
int型 オフセット;
int型 CGM_read(cgm_fd, ブフ)
Cgm_fd cgm_fd;
署名されていない チャリオット *バフ;
int型 CGM_write(cgm_fd, ブフ)
Cgm_fd cgm_fd;
署名されていない チャリオット *バフ;
ディレクトリ *CGM_ディレクトリ(cgm_fd)
Cgm_fd cgm_fd;
ボイド CGM_freeDirectory(ディレクトリ)
ディレクトリ *ディレクトリ;
ボイド CGM_printDirectory(ディレクトリ)
ディレクトリ *ディレクトリ;
int型 CGM_getInstr(cgm_fd, 説明)
Cgm_fd cgm_fd;
命令 *命令;
ボイド CGM_flushGetInstr(cgm_fd)
Cgm_fd cgm_fd;
int型 CGM_putInstr(cgm_fd, 説明)
Cgm_fd cgm_fd;
命令 *命令;
int型 CGM_flushOutputInstr(cgm_fd)
Cgm_fd cgm_fd;
ディレクトリ *CGM_initMetaEdit (メタファイル、 サイズ)
チャリオット *メタファイル;
署名されていない int型 サイズ;
int型 CGM_termMetaEdit()
ディレクトリ *CGM_copyFrames(開始、 num、 ターゲット )
署名されていない int型 始める;
int型 番号;
署名されていない int型 目標;
ディレクトリ *CGM_deleteFrames(開始, 数字)
署名されていない int型 始めて、
番号;
ディレクトリ *CGM_mergeFrames(下、 上)
署名されていない 下、 上;
ディレクトリ *CGM_moveFrames (始める、 num、 目標)
署名されていない int型 始めて、 num、 目標;
ディレクトリ *CGM_readFrames(メタファイル, 始めて、 num、 目標、 サイズ)
チャリオット *メタファイル;
署名されていない int型 始める;
int型 番号;
署名されていない int型 目標、 サイズ;
int型 *CGM_有効なCGM(メタファイル)
チャリオット *メタファイル;
int型 CGM_writeFile(メタファイル)
チャリオット *メタファイル;
int型 CGM_writeFrames(メタファイル, 始めて、 数字)
チャリオット *メタファイル;
署名されていない 始めて、 番号;
int型 CGM_appendFrames(メタファイル, 始めて、 数字)
チャリオット *メタファイル;
署名されていない 始めて、 番号;
DESCRIPTION
議論 cgm_fd は、読み取りまたは書き込み用に作成された有効なファイル記述子を指します。
適切な CGM_open. CGM_読み取り, CGM_ディレクトリ, CGM_getInstr と CGM_flushGetInstr
ファイル記述子を読み取り用に開く必要があります。 CGM_書き込み, CGM_getInstr,CGM_flushGetInstr と
CGM_flushOutputInstr が必要 Cgm_fd 書き込み可能です。 CGM_close と CGM_lseek 意志
有効なものを受け入れます Cgm_fd.
この サイズ 引数は、CGM レコード サイズをバイト単位で示します。 NCAR CGM の場合、この値は次のとおりです。
1440.
BUF ユーザーが割り当てたサイズのメモリへのポインタです サイズ。 このストレージは次の用途に使用されます
入出力のバッファリング CGM_読み取り と CGM_書き込み 。
この DIR 引数はへのポインタです ディレクトリ で作成された構造 CGM_ディレクトリ or
CGM_initMetaEdit. DIR プライベートリソースである必要があります NOT によって直接変更される
ユーザー。 この目的のために、一連の便利なマクロが提供されています。 cgm_tools.h.
この start, NUM と ターゲット 引数は、メタファイル内のフレーム番号を指定するために使用されます。
次のコマンドのいずれかを使用して編集します。 CGM_copyFrames, CGM_deleteFrames, CGM_readFrames,
CGM_moveFrames, CGM_writeFrames と CGM_mergeFramesを選択します。 start 引数が最初です
シーケンス内のフレーム NUM 編集操作を実行するフレーム。 ターゲット 似ています
〜へ start XNUMX つのフレーム アドレスを必要とするコマンドで使用されます。 copy。 アドレッシング
ゼロから始まります。
CGM_open
このコマンドは unix をモデルにしています。 開いた 指図。 読み取り用の CGM が開きます
または指定されたとおりに書く フラグ 引数を返し、 Cgm_fd ファイル記述子。
この フラグ と 開いた パラメータはシステムに直接渡されます 開いた
これら XNUMX つの引数の詳細な説明については、「」を参照してください。 開いたとします。
CGM_close
ファイル記述子を削除します。 の逆 CGM_open。 見る 閉じるとします。
CGM_読み取り
CGM_読み取り 読み込もうとします サイズ を通じて参照されるオブジェクトからのバイト
ディスクリプタ cgm_fd. サイズ の作成時に設定されます cgm_fd by CGM_open. CGM_読み取り
正常に読み取られたバイト数を返します。 EOF ではゼロが返され、
負の数はエラーが発生したことを意味します。 unix システムコール read によって呼び出されます
CGM_読み取り。 見る readとします。
CGM_書き込み
単一のレコードを書き込もうとします サイズ からのバイト BUF 参照されたオブジェクトから
by cgm_edit コラボレー サイズ の作成時に提供されるレコード サイズ パラメータです。
cgm_fd. 書きます 正常に書き込まれたバイト数を返します。 マイナスのリターン
数字はエラーが発生したことを示します。 unix システムコール 書きます によって呼び出されます
CGM_書き込み。 見る 書きますとします。
CGM_lseek
ファイルポインタを進めます cgm_fd 〜へ オフセット バイト。 正常に完了すると、
現在のファイル ポインタのオフセットが返されます。 負の戻り値はエラーです。 の
unixシステムコール シーク によって呼び出されます CGM_lseek。 見る シークとします。
CGM_ディレクトリ
で参照されるメタファイルの目次を作成します。 cgm_fd。 ポインタを返す
このタイプのテーブルに ディレクトリ。 ディレクトリの内容には、次の数が含まれます。
メタファイル、フレーム数、各フレームのレコード オフセット、レコード内のフレーム長、
オプションのフレームの説明とメタファイルのステータス。 これらのフィールドは読み取られることを目的としています
で提供される便利なマクロによってのみ参照される必要があります。
cgm_tools.h。 失敗すると NULL ポインタが返されます。
CGM_freeDirectory
によって作成されたディレクトリに割り当てられた空きメモリ CGM_ディレクトリ or CGM_initMetaEdit.
CGM_printDirectory
が指すディレクトリの内容を出力します。 DIR 標準出力に。
CGM_getInstr、
で参照されるファイル内の次の命令をフェッチします。 cgm_edit そしてそれをに変換します
が指す使用可能な形式 命令. CGM_getInstr へのインターフェースを提供します
CGM 要素を抽出するためのメタファイル。 ユーザーはそれを気にする必要はありません
メタファイルのバイナリ形式。 のフィールド 命令 で説明されているとおりです
cgm_tools.h。 ユーザーは、返される最大許容データ長に注意する必要があります。
32760 回の呼び出しでのサイズは 32767 バイトです。 CGM 標準では、最大 XNUMX バイトが許可されています。
単一の命令に格納されます。 しかし、32767 という数字は扱いやすい数字ではありません。
CGM 命令のデータ長が 32760 バイトを超える場合は、
boolean 他には? フラグ、次の呼び出し CGM_getInstr 残りは返却します
同じ制限までのデータなど。 CGMgetInstr 有効なが必要です Cgm_fd のために開く
読む。 CGM の説明については、ANSI 規格を参照してください。
CGM_flushGetInstr
で使用される入力バッファをフラッシュします。 CGM_getInstr. CGM_getInstr の内容をバッファリングします
CGM を使用し、必要に応じて実際の読み取りのみを実行します。 ユーザーがそれ以外を希望する場合
CGM へのシーケンシャル読み取りアクセスでは、入力バッファをフラッシュする必要が生じます。
新しい場所から読む前に。
CGM_putInstr
アナログ CGM_getInstr。 この関数は書き込まれる CGM 命令をバッファリングします。
によって参照される CGM cgm_fd。 繰り返しますが、ユーザーはバイナリを気にする必要はありません。
ファイルの形式。 書き込みはレコードサイズで順次実行されます サイズ as
の作成時に指定された cgm_fd。 同じデータ長制約
置かれた CGM_getInstr のために保持します CGM_putInstr。 ユーザーが出力したい場合
データ長が 32760 バイトを超える命令の場合、データは次のようにする必要があります。
このサイズ以下のブロックに分割されます。 ユーザーはブール値も設定する必要があります
他には? の旗 命令. cgm_fd 書き込み用にオープンされた有効なファイル記述子である必要があります。
のフィールドの説明については、 命令 ファイルを参照してください cgm_tools.h.
CGM_flushOutputInstr
で使用される出力バッファをフラッシュします。 CGM_putInstr によって参照されるファイルの場合 cgm_fd。 それ
によって使用される出力バッファを明示的にフラッシュする必要があります。 CGM_putInstr 前
ファイルが閉じられているか、ランダムアクセスが実行されています。 それ以外の場合、すべての CGM 要素ではありません
実際に書き込まれます。
CGM_initMetaEdit
編集用にメタファイルを初期化します。 これは、
このパッケージに含まれる高レベルの編集ルーチン: CGM_コピーフレーム、
CGM_deleteFrames, CGM_readFrames, CGM_moveFrames, CGM_writeFile, CGM_writeFrames,
と CGM_mergeFrames。 これらのルーチンは、一度に XNUMX つのメタファイルに対してのみ機能します (
で名付けられた CGM_initMetaEdit。 何もせずにこのルーチンを XNUMX 回目に呼び出すと、
変更を明示的に保存すると、新しいファイルが読み込まれ、
前のファイルに加えられたすべての変更を破棄します。 CGM_initMetaEdit とすべての
進行中の編集機能 make ファイルに変更を加えると、ファイルへのポインタが返されます。
ディレクトリ ユーザーがファイルの状態を調べることができるようにするための便宜として。
ディレクトリの内容はプライベートであるため、ユーザーは変更しないでください。 あ
マクロのセットは以下で提供されます cgm_tools.h ディレクトリの取得に使用されます
内容。 注意: そうでない限り、編集ファイルには実際には変更は加えられません。
いずれかで明示的に上書きされます CGM_writeFile or CGM_writeFrames.
CGM_termMetaEdit
で開始した編集セッションを終了します CGM_initMetaEdit。 このルーチンは、
編集の変更を保存したい場合は、保存後に呼び出されます。
編集セッションを終了する前に。 CGM_termMetaEdit 貴重なリソースを解放します。
CGM_copyFrames
コピー NUM で始まるフレーム start によってアドレス指定されたフレームに ターゲット。 場合 ターゲット is
すでに占有されている場合、ソース フレームはその場所に挿入され、ターゲットは
フレームとそれ以降のすべてのフレームが進められます。 CGM_コピー ファイルを操作します
によって初期化されました CGM_initMetaEdit (編集ファイル)。 正常に完了するとポインタ
現在のディレクトリへの戻り値が返されます。 エラーが発生すると、NULL ポインタが返されます。
CGM_deleteFrames
削除 NUM 編集ファイルのフレームで始まるフレーム start。 成功時
完了すると、現在のディレクトリへのポインタが返されます。 エラーの場合は NULL ポインタ
返されます。
CGM_mergeFrames
アドレス指定されたフレームの内容を上書きします ボトム フレームの結合部で
場所 ボトム そしてその位置のフレーム top。 このコマンドの効果は次のとおりです
を描くのと同等 top 上のフレームは ボトム フレーム。 労働組合ではありません
言葉の本当の意味で。 正常に完了すると、現在のポインタが返されます。
ディレクトリが返されます。 エラーが発生すると、NULL ポインタが返されます。
CGM_moveFrames
のブロックを移動します NUM フレームで始まる編集ファイルのフレーム start から
フレームが占める位置 ターゲット 正常に完了すると、現在のポインタが返されます。
ディレクトリが返されます。 エラーが発生すると、NULL ポインタが返されます。
CGM_readFrames
読む NUM メタファイルからのフレーム file フレームから始まる start。 フレームを次の場所に挿入します
住所 ターゲット 編集ファイル内。 正常に完了すると、現在のポインタが返されます。
ディレクトリが返されます。 エラーが発生すると、NULL ポインタが返されます。
CGM_有効なCGM
ファイルが有効な NCAR CGM であるかどうかを判断します。 この関数はいくつかのことを実行します
特定のファイルが NCAR にあるかどうかを判断するための簡単な診断
CGM形式。 実行されたテストは厳密ではなく、次のようなことが考えられます。
取得された情報が間違っています。 1 が返された場合は、有効な NCAR CGM を示します。 あ
0 が返される場合は、ファイルが NCAR CGM ではないことを示します。 -1 が返された場合はエラーを示します
が発生し、それに応じてグローバル変数 `errno' が設定されます。
CGM_writeFile
現在の編集ファイルの内容全体を次の場所に書き込みます。 file. CGM_writeFile 収益
成功した場合は整数 XNUMX、失敗した場合は負の数。
CGM_writeFrames
のブロックを書き込みます NUM フレームで始まるフレーム start 〜へ file。 ソースフレーム
編集ファイルから取得します。 注: CGM フレームは、以下で構成されるラッパーに含まれています。
CGM 区切り文字 要素。 によって作成されたファイル CGM_writeFrames を使用します ラッパー
現在の編集ファイルによって提供されます。 したがって、ファイルの場合 foo 含まれています n であるフレーム
read ファイルの編集セッションに参加する グー そして、これらの同じフレームが書き込まれます
ファイルに出力する ゾイド, ゾイド オリジナルと同じかもしれないし、違うかもしれない foo.
CGM_writeFrames 成功した場合は整数 XNUMX を返し、成功した場合は負の数を返します。
失敗。
CGM_appendFrames
のブロックを追加します NUM フレームで始まるフレーム start 〜へ file. file すでにあるはずです
存在し、有効な NCAR CGM であること。 CGM_appendFrames 成功すると整数の XNUMX を返します
失敗した場合は負の数になります。
onworks.net サービスを使用してオンラインで cgmNCARG を使用する