@c %**end of header
@copying
-Copyright @copyright{} 2010-2012 j8takagi
+Copyright @copyright{} 2010-2023 j8takagi
@end copying
@dircategory Programming
@direntry
-* YACASL2: (yacasl2). CASL II 処理システム
-* casl2: (yacasl2)casl2 invocation. casl2の呼び出し
-* comet2: (yacasl2)comet2 invocation. comet2の呼び出し
-* dumpword: (yacasl2)dumpword invocation. dumpwordの呼び出し
+* YACASL2: (yacasl2.info). CASL II 処理システム
+* casl2: (yacasl2.info)casl2 invocation. casl2の呼び出し
+* comet2: (yacasl2.info)comet2 invocation. comet2の呼び出し
+* dumpword: (yacasl2.info)dumpword invocation. dumpwordの呼び出し
@end direntry
@titlepage
* casl2 invocation:: casl2の呼び出し
* comet2 invocation:: comet2の呼び出し
* dumpword invocation:: dumpwordの呼び出し
-* CASL2LIB Manual:: CASL2LIBマニュアル
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+YACASL2の使用例
+
+* Simple output:: 実行結果の出力だけを表示
+* Assemble result:: アセンブル結果の確認
+* Register and memory:: 実行時のレジスタとメモリを表示
+* Only assemble:: アセンブルと実行を別に行う
+* Analyze word:: 1語の解析
+* Use CASL2LIB:: CASL IIライブラリの使用
+
+実行時のレジスタとメモリを表示
+
+* Register specify:: 特定のレジスタを表示
+* End value::
+* Step count:: プログラムのステップ数を表示
+
+@end detailmenu
@end menu
@contents
@cartouche
@end iftex
@quotation
-@uref{http://www.jitec.jp/1_13download/shiken_yougo_ver2_2.pdf, 試験で使用する情報処理用語・プログラム言語など Ver 2.2(平成24年5月22日)}[PDFファイル]
-別紙 1 アセンブラ言語の仕様
+@uref{https://www.ipa.go.jp/shiken/syllabus/ps6vr7000000i9g3-att/shiken_yougo_ver4_3.pdf, 情報処理技術者試験 情報処理安全確保支援士試験 試験で使用する情報技術に関する用語・プログラム言語など Ver 4.3}[PDFファイル] @*
+別紙2 アセンブラ言語の仕様(5ページから12ページまで)
@end quotation
@iftex
@end cartouche
YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、
仮想マシンCOMET II上で実行します。
アセンブルと実行は、連続で行うこともできますし、
-ã\82¢ã\82»ã\83³ã\83\96ã\83«çµ\90æ\9e\9cã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\81«ä¿\9då\98ã\81\97ã\81¦ã\81\82ã\82\89から実行することもできます。
+ã\82¢ã\82»ã\83³ã\83\96ã\83«çµ\90æ\9e\9cã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\81«ä¿\9då\98ã\81\97ã\81¦ã\81\82ã\81¨から実行することもできます。
YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題を
はじめ各種参考書やサイトに記載されたCASL IIのプログラムを
そのままアセンブルして実行できます。
また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
YACASL2は、「ふつうの処理系」として動作します。
-ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、
-コンピュータ内部の模式図を表示したりすることはありません。
-そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
+YACASL2の操作は、端末上のコマンドラインインターフェイス(CLI)で操作します。
+YACASL2は、次のような動作内容をすべてテキストで出力します。
@itemize @bullet
実行時のメモリの内容
@end itemize
-出力された動作内容は、GNU/Linuxのさまざまなコマンド、
+YACASL2では、機械コードモニターを使い、動作中のCPUやメモリーを調べたりデバッグしたりすることもできます。
+
+また、出力された動作内容は、GNU/Linuxのさまざまなコマンド、
たとえば、@command{cat}、@command{less}、@command{grep}、@command{wc}などを使って解析できます。
-YACASL2の操作は、端末上のコマンドラインインターフェイスで行います。
+
@node Sample usage, casl2 invocation, Overview, Top
@chapter YACASL2の使用例
* Register and memory:: 実行時のレジスタとメモリを表示
* Only assemble:: アセンブルと実行を別に行う
* Analyze word:: 1語の解析
-* Use CASL2LIB:: CASL2ライブラリの使用
+* Use CASL2LIB:: CASL IIライブラリの使用
@end menu
@node Simple output, Assemble result, Sample usage, Sample usage
Assemble addl.casl (0)
Label::::
-MAIN.A ---> #0005
-MAIN.B ---> #0006
MAIN ---> #0000
+MAIN.A ---> #0007
+MAIN.B ---> #0008
+MAIN.C ---> #0009
Assemble addl.casl (1)
addl.casl: 1:;;; ADDL r,adr
addl.casl: 2:MAIN START
addl.casl: 3: LD GR1,A
#0000 #1010
- #0001 #0005
+ #0001 #0007
addl.casl: 4: ADDL GR1,B
#0002 #2210
- #0003 #0006
-addl.casl: 5: RET
- #0004 #8100
-addl.casl: 6:A DC 3
- #0005 #0003
-addl.casl: 7:B DC 1
- #0006 #0001
-addl.casl: 8: END
+ #0003 #0008
+addl.casl: 5: ST GR1,C
+ #0004 #1110
+ #0005 #0009
+addl.casl: 6: RET
+ #0006 #8100
+addl.casl: 7:A DC 3
+ #0007 #0003
+addl.casl: 8:B DC 2
+ #0008 #0002
+addl.casl: 9:C DS 1
+ #0009 #0000
+addl.casl: 10: END
@end example
なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。
-仮想マシンCOMET II での実行は行われません。
+仮想マシンCOMET IIでのプログラム実行はされません。
@node Register and memory, Only assemble, Assemble result, Sample usage
@section 実行時のレジスタとメモリを表示
* Step count:: プログラムのステップ数を表示
@end menu
-@file{addl.casl}ã\81«å¿\85è¦\81ã\81ªã\83¡ã\83¢ã\83ªå®¹é\87\8fã\81¯8èª\9eã\81®ã\81\9fã\82\81、次のようにCPUのレジスタとメモリの内容を表示できます。
+@file{addl.casl}ã\81§ã\81¯、次のようにCPUのレジスタとメモリの内容を表示できます。
@example
-$ @kbd{casl2 -t -d -M8 addl.casl | less}
+$ @kbd{casl2 -t -d -M16 addl.casl | less}
Assemble addl.casl (0)
#0000: GR5: 0 = #0000 = 0000000000000000
#0000: GR6: 0 = #0000 = 0000000000000000
#0000: GR7: 0 = #0000 = 0000000000000000
-#0000: SP: 8 = #0008 = 0000000000001000
+#0000: SP: 16 = #0010 = 0000000000010000
#0000: PR: 0 = #0000 = 0000000000000000
#0000: FR (OF SF ZF): 000
#0000: Memory::::
-#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
-#0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
+#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+ -------------------------------------------------------------------------------------
+#0000: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
+
#0002: Register::::
#0002: GR0: 0 = #0000 = 0000000000000000
#0002: GR1: 3 = #0003 = 0000000000000011
#0002: GR5: 0 = #0000 = 0000000000000000
#0002: GR6: 0 = #0000 = 0000000000000000
#0002: GR7: 0 = #0000 = 0000000000000000
-#0002: SP: 8 = #0008 = 0000000000001000
+#0002: SP: 16 = #0010 = 0000000000010000
#0002: PR: 2 = #0002 = 0000000000000010
#0002: FR (OF SF ZF): 000
#0002: Memory::::
-#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
-#0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
+#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+ -------------------------------------------------------------------------------------
+#0002: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
+
#0004: Register::::
#0004: GR0: 0 = #0000 = 0000000000000000
-#0004: GR1: 4 = #0004 = 0000000000000100
+#0004: GR1: 5 = #0005 = 0000000000000101
#0004: GR2: 0 = #0000 = 0000000000000000
#0004: GR3: 0 = #0000 = 0000000000000000
#0004: GR4: 0 = #0000 = 0000000000000000
#0004: GR5: 0 = #0000 = 0000000000000000
#0004: GR6: 0 = #0000 = 0000000000000000
#0004: GR7: 0 = #0000 = 0000000000000000
-#0004: SP: 8 = #0008 = 0000000000001000
+#0004: SP: 16 = #0010 = 0000000000010000
#0004: PR: 4 = #0004 = 0000000000000100
#0004: FR (OF SF ZF): 000
#0004: Memory::::
-#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
-#0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
+#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+ -------------------------------------------------------------------------------------
+#0004: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
+
+#0006: Register::::
+#0006: GR0: 0 = #0000 = 0000000000000000
+#0006: GR1: 5 = #0005 = 0000000000000101
+#0006: GR2: 0 = #0000 = 0000000000000000
+#0006: GR3: 0 = #0000 = 0000000000000000
+#0006: GR4: 0 = #0000 = 0000000000000000
+#0006: GR5: 0 = #0000 = 0000000000000000
+#0006: GR6: 0 = #0000 = 0000000000000000
+#0006: GR7: 0 = #0000 = 0000000000000000
+#0006: SP: 16 = #0010 = 0000000000010000
+#0006: PR: 6 = #0006 = 0000000000000110
+#0006: FR (OF SF ZF): 000
+#0006: Memory::::
+#0006: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+ -------------------------------------------------------------------------------------
+#0006: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0005 0000 0000 0000 0000 0000 0000
@end example
@node Register specify, End value, Register and memory, Register and memory
$ @kbd{casl2 -t addl.casl | grep 'GR1:'}
#0000: GR1: 0 = #0000 = 0000000000000000
#0002: GR1: 3 = #0003 = 0000000000000011
-#0004: GR1: 4 = #0004 = 0000000000000100
+#0004: GR1: 5 = #0005 = 0000000000000101
+#0006: GR1: 5 = #0005 = 0000000000000101
@end example
-この内容を、先に出力したアセンブル結果と引き比べてください。
+この内容を、先に出力したアセンブル結果と比較してください。
次の表のように、PRとGR1、命令行が対応していることがわかります。
@multitable @columnfractions .3 .3 .4
@item PR @tab GR1 @tab 命令行
@item #0000
@tab #0000
+@tab (なし)
@item #0002
@tab #0003
@tab @code{LD GR1,A}
@item #0004
@tab #0004
@tab @code{ADDL GR1,B}
+@item #0006
+@tab #0006
+@tab @code{ST GR1,C}
@end multitable
@node End value, Step count, Register specify, Register and memory
@command{grep}と@command{tail}を組み合わせれば、プログラム終了時の値を表示できます。
-@file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
+@file{addl.casl}でプログラム終了時のGR1の値を確認するには、次のようにします。
@example
$ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
-#0004: GR1: 4 = #0004 = 0000000000000100
+#0006: GR1: 5 = #0005 = 0000000000000101
@end example
-@file{sum_10.casl}は、1から10までの整数の和を求めます。
+@file{sum_10.casl}ã\81¯ã\80\811ã\81\8bã\82\8910ã\81¾ã\81§ã\81®æ\95´æ\95°ã\81®å\92\8cã\82\92æ±\82ã\82\81ã\80\81GR2ã\81«æ ¼ç´\8dã\81\97ã\81¦ã\81\8bã\82\89ã\83¡ã\83¢ã\83ªã\81«ã\82¹ã\83\88ã\82¢ï¼\88æ\9b¸ã\81\8dè¾¼ã\81¿ï¼\89ã\81\97ã\81¾ã\81\99ã\80\82
@example
$ @kbd{cat sum_10.casl}
;;; sum_10.casl
-;;; 出力 GR0: 1から10までの整数をすべて加算した値
+;;; 1から10までの整数をすべて加算した値をメモリーに格納する
MAIN START
- PUSH 0,GR1
- LAD GR0,0 ; GR0を初期化
- LD GR1,FST ; GR1に初項を転送
-LOOP ADDL GR0,GR1 ; ループ先頭
+ XOR GR2,GR2 ; GR2を初期化
+ LD GR1,FST ; GR1に初項をメモリーから転送
+LOOP ADDL GR2,GR1 ; ループ先頭。GR2 <- GR2 + GR1
ADDL GR1,STEP ; GR1 <- GR1 + 公差
CPL GR1,LST ; GR1が末項より大きい場合は終了
JPL FIN ; ↓
JUMP LOOP ; ループ終端
-FIN POP GR1
+FIN ST GR2,RST ; GR2の結果をメモリーに転送
RET
FST DC 1 ; 初項
LST DC 10 ; 末項
STEP DC 1 ; 公差
+RST DS 1 ; 結果
END
@end example
-@file{sum_10.casl}ã\81§ã\83\95ã\82¡ã\82¤ã\83«çµ\82äº\86æ\99\82の値を確認するには、次のようにします。
+@file{sum_10.casl}ã\81§ã\83\97ã\83ã\82°ã\83©ã\83 çµ\82äº\86æ\99\82ã\81®GR2の値を確認するには、次のようにします。
@example
-$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
-#0010: GR0: 55 = #0037 = 0000000000110111 = '7'
+$ @kbd{casl2 -t sum_10.casl | grep 'GR2:' | tail -1}
+#000E: GR2: 55 = #0037 = 0000000000110111 = '7'
@end example
@node Step count, , End value, Register and memory
@file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
@example
-$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
-54
+$ @kbd{casl2 -t sum_10.casl | grep 'GR2:' | wc -l}
+53
@end example
@node Only assemble, Analyze word, Register and memory, Sample usage
0000106
@end example
-オブジェクトファイルの実行には、@command{casl2}を使います。
+オブジェクトファイルの実行には、@command{comet2}を使います。
@example
$ @kbd{comet2 hello.o}
@end example
@node Use CASL2LIB, , Analyze word, Sample usage
-@section CASL2ライブラリの使用
+@section CASL IIライブラリの使用
YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
$ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
@end example
-@unnumberedsubsec オプション
+@unnumberedsec オプション
@command{casl2}は、次のオプションを指定できます。
引数が指定されない場合は、エラーメッセージを表示して終了します。
複数の引数を指定した場合、2番目以降の引数は無視されます。
-@unnumberedsubsec オプション
+@unnumberedsec オプション
@command{comet2}は、次のオプションを指定できます。
@command{comet2}の使用方法を表示して終了します。
@end table
-@node dumpword invocation, CASL2LIB Manual, comet2 invocation, Top
+@node dumpword invocation, , comet2 invocation, Top
@chapter @command{dumpword}の呼び出し
@pindex dumpword
引数が指定されない場合は、使い方を表示して終了します。
複数の引数を指定した場合、1つ目の引数だけが表示され、2つ目以降の引数は無視されます。
-@unnumberedsubsec 注意
+@unnumberedsec 注意
マイナスの数や16進数はシェルの仕様により、そのままでは指定できません。
#0048: 72 = #0048 = 0000000001001000 = 'H'
@end example
-@unnumberedsubsec オプション
+@unnumberedsec オプション
@command{dumpword}は、次のオプションを指定できます。
@command{dumpword}の使用方法を表示して終了します。
@end table
-@node CASL2LIB Manual, , dumpword invocation, Top
-@chapter CASL2LIBマニュアル
-
-@menu
-* ABS:: @kbd{ABS} - @file{abs.casl}
-* DIVA:: @kbd{DIVA} - @file{diva.casl}
-* DIVL:: @kbd{DIVL} - @file{divl.casl}
-* INL:: @kbd{INL} - @file{inl.casl}
-* L2STR:: @kbd{L2STR} - @file{l2str.casl}
-* MAX:: @kbd{MAX} - @file{max.casl}
-* MINIM:: @kbd{MINIM} - @file{minim.casl}
-* MULA:: @kbd{MULA} - @file{mula.casl}
-* MULL:: @kbd{MULL} - @file{mull.casl}
-* OUTA:: @kbd{OUTA} - @file{outa.casl}
-* OUTB:: @kbd{OUTB} - @file{outb.casl}
-* OUTD_Q15:: @kbd{OUTD_Q15} - @file{outd_q15.casl}
-* OUTL:: @kbd{OUTL} - @file{outl.casl}
-* REV:: @kbd{REV} - @file{rev.casl}
-* STR2L:: @kbd{STR2L} - @file{str2l.casl}
-@end menu
-
-@node ABS, DIVA, CASL2LIB Manual, CASL2LIB Manual
-@section @kbd{ABS} - @file{abs.casl}
-GR1を符号付き整数とみなし、絶対値に変換
-
-@unnumberedsubsec 入力
-@table @code
-@item GR1
-符号付き整数
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR1
-入力された値の絶対値
-
-@item OF
-入力された値が-32768の場合、1
-
-@item SF
-入力された値が負数(-32767から-1)の場合、1
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-なし
-
-@unnumberedsubsec 使用例
-@example
-@verbatiminclude casl2lib/abs/call_abs.casl
-@end example
-
-@example
-$ @kbd{casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
- $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
-1
-@end example
-
-@node DIVA, DIVL, ABS, CASL2LIB Manual
-@section @kbd{DIVA} - @file{diva.casl}
-符号付き整数の割算を筆算方式で行う
-
-@unnumberedsubsec 入力
-@table @code
-@item GR1
-被除数
-
-@item GR2
-除数
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR0
-商
-
-@item GR3
-剰余
-
-@item OF
-次の場合、1
-@itemize
-@item
-GR2が0
-
-@item
-GR1が-32768
-
-@item
-GR2が-32768
-@end itemize
-
-@item SF
-商が負数(-32767から-1)の場合、1
-
-@item ZF
-商が0の場合、1
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-@itemize
-@item @code{DIVL}
-@end itemize
-
-@unnumberedsubsec 使用例
-@example
-@verbatiminclude casl2lib/diva/call_diva.casl
-@end example
-
-@example
-$ @kbd{casl2 call_diva.casl $CASL2LIB/diva.casl $CASL2LIB/divl.casl \
- $CASL2LIB/outa.casl $CASL2LIB/abs.casl $CASL2LIB/rev.casl}
--128
--127
-@end example
-
-@node DIVL, INL, DIVA, CASL2LIB Manual
-@section @kbd{DIVL} - @file{divl.casl}
-符号なし整数の割算を筆算方式で行う
-
-@unnumberedsubsec 入力
-@table @code
-@item GR1
-被除数
-
-@item GR2
-除数
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR0
-商
-
-@item GR3
-剰余
-
-@item OF
-GR2が0の場合、1
-
-@item SF
-商が32768から65535の場合、1
-
-@item ZF
-商が0の場合、1
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-なし
-
-@unnumberedsubsec 使用例
-@example
-@verbatiminclude casl2lib/divl/call_divl.casl
-@end example
-
-@example
-$ @kbd{casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
- $CASL2LIB/rev.casl}
-256
-254
-@end example
-
-@node INL, L2STR, DIVL, CASL2LIB Manual
-@section @kbd{INL} - @file{inl.casl}
-
-符号なし整数の入力を受け付ける
-
-@unnumberedsubsec 入力
-@table @code
-@item 標準入力
-符号なし整数
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR1
-入力された符号なし整数
-
-@item GR0
-文字列の長さ。
-数字以外が入力された場合は@code{#FFFF}
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-@itemize
-@item
-@code{STR2L}
-@end itemize
-
-@unnumberedsubsec 使用例
-次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
-
-@example
-@verbatiminclude casl2lib/inl/call_inl.casl
-@end example
-
-@example
-$ @kbd{casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
- $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
-@end example
-
-@node L2STR, MAX, INL, CASL2LIB Manual
-@section @kbd{L2STR} - @file{l2str.casl}
-
-符号なし整数を文字列に変換する
-
-@unnumberedsubsec 入力
-@table @code
-@item GR1
-符号なし整数
-
-@item GR2
-変換した文字列を格納するアドレス
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR0
-文字列の長さ
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-@itemize
-@item
-@code{DIVL}
-@end itemize
-
-@node MAX, MINIM, L2STR, CASL2LIB Manual
-@section @kbd{MAX} - @file{max.casl}
-
-連続した複数のWORDを符号付き整数とみなして最大値を返す
-
-@unnumberedsubsec 入力
-@table @code
-@item GR1
-WORD値を格納したアドレス
-
-@item GR2
-値の個数
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR0
-最大値
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-なし
-
-@node MINIM, MULA, MAX, CASL2LIB Manual
-@section @kbd{MINIM} - @file{minim.casl}
-
-連続した複数のWORDを符号付き整数とみなして最小値を返す
-
-@unnumberedsubsec 入力
-@table @code
-@item GR1
-WORD値を格納したアドレス
-
-@item GR2
-値の個数
-@end table
-
-@unnumberedsubsec 出力
-@table @code
-@item GR0
-最小値
-@end table
-
-@unnumberedsubsec 依存する副プログラム
-なし
-
-@node MULA, MULL, MINIM, CASL2LIB Manual
-@section @kbd{MULA} - @file{mula.casl}
-
-@node MULL, OUTA, MULA, CASL2LIB Manual
-@section @kbd{MULL} - @file{mull.casl}
-
-@node OUTA, OUTB, MULL, CASL2LIB Manual
-@section @kbd{OUTA} - @file{outa.casl}
-
-@node OUTB, OUTD_Q15, OUTA, CASL2LIB Manual
-@section @kbd{OUTB} - @file{outb.casl}
-
-@node OUTD_Q15, OUTL, OUTB, CASL2LIB Manual
-@section @kbd{OUTD_Q15} - @file{outd_q15.casl}
-
-@node OUTL, REV, OUTD_Q15, CASL2LIB Manual
-@section @kbd{OUTL} - @file{outl.casl}
-
-@node REV, STR2L, OUTL, CASL2LIB Manual
-@section @kbd{REV} - @file{rev.casl}
-
-@node STR2L, , REV, CASL2LIB Manual
-@section @kbd{STR2L} - @file{str2l.casl}
-
@bye