"Fossies" - the Fresh Open Source Software Archive

Member "tcsh-6.22.03/tests/lexical.at" (18 Nov 2020, 11781 Bytes) of package /linux/misc/tcsh-6.22.03.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "lexical.at": 6.22.02_vs_6.22.03.

    1 # Lexical analysis and substitutions
    2 
    3 AT_SETUP([Word splitting])
    4 
    5 AT_CHECK([tcsh -f -v -c '&|;<>()&||<<>>space tab	end'], 1, ,
    6 [& | ; < > ( ) & || << >> space tab end
    7 Invalid null command.
    8 ])
    9 
   10 # Note that the tab becomes a space!
   11 AT_DATA([oneword.csh],
   12 [[set var=('&|;<>()&||<<>>space tab	end')
   13 echo $var[1]
   14 ]])
   15 AT_CHECK([tcsh -f oneword.csh], ,
   16 [&|;<>()&||<<>>space tab end
   17 ])
   18 
   19 # Note that the tab becomes a space!
   20 AT_DATA([oneword.csh],
   21 [[set var=("&|;<>()&||<<>>space tab	end")
   22 echo $var[1]
   23 ]])
   24 AT_CHECK([tcsh -f oneword.csh], ,
   25 [&|;<>()&||<<>>space tab end
   26 ])
   27 
   28 AT_CLEANUP
   29 
   30 
   31 AT_SETUP([Comments])
   32 
   33 AT_CHECK([if [ ! -t 0 ]; then exit 77; fi],, [Skipping comment tests])
   34 
   35 AT_CHECK([echo 'echo OK@%:@comment' | tcsh -f], , [OK
   36 ])
   37 
   38 AT_CHECK([tcsh -f -c 'echo @%:@no comment'], ,
   39 [@%:@no comment
   40 ])
   41 
   42 AT_DATA([comment2.csh],
   43 [[echo testing...@%:@\
   44 OK
   45 ]])
   46 AT_CHECK([tcsh -f comment2.csh], ,
   47 [testing... OK
   48 ])
   49 
   50 AT_CLEANUP
   51 
   52 
   53 AT_SETUP([Escaping special characters])
   54 
   55 AT_DATA([nosplit.csh],
   56 [[echo \&\|\;\<\>\(\)\&\|\|\<\<\>\>\space\ tab\	end
   57 echo '&|;<>()&||<<>>space tab	end'
   58 echo "&|;<>()&||<<>>space tab	end"
   59 set verbose
   60 echo `&|;<>()&||<<>>space tab	end`
   61 ]])
   62 AT_CHECK([tcsh -f nosplit.csh], 1,
   63 [&|;<>()&||<<>>space tab	end
   64 &|;<>()&||<<>>space tab	end
   65 &|;<>()&||<<>>space tab	end
   66 
   67 ],
   68 [echo `&|;<>()&||<<>>space tab	end`
   69 Invalid null command.
   70 ])
   71 
   72 # backslash handling tested with $backslash_quote
   73 
   74 AT_CHECK([tcsh -f -c 'echo "foo\"bar"'], 1, , [Unmatched '"'.
   75 ])
   76 dnl " Pacify emacs
   77 
   78 AT_CHECK([tcsh -f -c "echo 'foo\'bar'"], 1, , [Unmatched '''.
   79 ])
   80 
   81 AT_CLEANUP
   82 
   83 
   84 AT_SETUP([Preventing substitution])
   85 
   86 AT_CHECK([tcsh -f -c 'echo \$OK'], , [$OK
   87 ])
   88 
   89 AT_CHECK([tcsh -f -c 'echo \`OK\`'], , [`OK`
   90 ])
   91 
   92 AT_DATA([noalias.csh],
   93 [[alias true='echo error'
   94 \true
   95 tru\e
   96 ]])
   97 AT_CHECK([tcsh -f noalias.csh])
   98 
   99 AT_CHECK([tcsh -f -c 'echo g\?\*b'], , [g?*b
  100 ])
  101 
  102 AT_DATA([novar.csh],
  103 [[echo '$OK'
  104 ]])
  105 AT_CHECK([tcsh -f novar.csh], , [$OK
  106 ])
  107 
  108 AT_DATA([nocmd.csh],
  109 [[echo '`OK`'
  110 ]])
  111 AT_CHECK([tcsh -f nocmd.csh], , [`OK`
  112 ])
  113 
  114 AT_DATA([noalias.csh],
  115 [[alias true='echo error'
  116 't'rue
  117 tru'e'
  118 ]])
  119 AT_CHECK([tcsh -f noalias.csh])
  120 
  121 AT_DATA([noglob.csh],
  122 [[echo 'g?*b'
  123 ]])
  124 AT_CHECK([tcsh -f noglob.csh], , [g?*b
  125 ])
  126 
  127 AT_CHECK([tcsh -f -c 'echo \!OK'], , [!OK
  128 ])
  129 
  130 AT_CHECK([tcsh -f -c "echo !OK"], 1, ,
  131 [OK: Event not found.
  132 ])
  133 
  134 AT_CHECK([tcsh -f -c 'echo "$OK"'], 1, , [OK: Undefined variable.
  135 ])
  136 
  137 AT_CHECK([tcsh -f -c 'echo "`OK`"'], 1, [
  138 ],
  139 [OK: Command not found.
  140 ])
  141 
  142 AT_DATA([noalias.csh],
  143 [[alias true='echo error'
  144 "t"rue
  145 tru"e"
  146 ]])
  147 AT_CHECK([tcsh -f noalias.csh])
  148 
  149 AT_CHECK([tcsh -f -c 'echo "g?*b"'], , [g?*b
  150 ])
  151 
  152 AT_CLEANUP
  153 
  154 
  155 AT_SETUP([History basics])
  156 
  157 # Printing prompt only when at end of input is rather nondeterministic...
  158 AT_DATA([basic.csh],
  159 [[echo 1
  160 echo 2
  161 !1
  162 ]])
  163 AT_CHECK([tcsh -f -q -i < basic.csh], ,
  164 [> 1
  165 2
  166 1
  167 > exit
  168 ],
  169 [echo 1
  170 ])
  171 
  172 AT_DATA([histlit.csh],
  173 [[echo foo
  174 !!
  175 history | cut -d '	' -f 1,3-
  176 set histlit
  177 history | cut -d '	' -f 1,3-
  178 ]])
  179 AT_CHECK([tcsh -f -q -i < histlit.csh], ,
  180 [> foo
  181 foo
  182      1	echo foo
  183      2	echo foo
  184      3	history | cut -d '	' -f 1,3-
  185      1	echo foo
  186      2	!!
  187      3	history | cut -d '	' -f 1,3-
  188      4	set histlit
  189      5	history | cut -d '	' -f 1,3-
  190 > exit
  191 ],
  192 [echo foo
  193 ])
  194 
  195 AT_DATA([nohist.csh],
  196 [echo ! space !	tab != "!(" newline !
  197 ])
  198 AT_CHECK([tcsh -f nohist.csh], ,
  199 [[! space ! tab != !( newline !
  200 ]])
  201 
  202 AT_CLEANUP
  203 
  204 
  205 AT_SETUP([Event specification])
  206 
  207 AT_DATA([positive.csh],
  208 [[echo 1
  209 echo 2
  210 !1
  211 ]])
  212 AT_CHECK([tcsh -f -q -i < positive.csh], ,
  213 [> 1
  214 2
  215 1
  216 > exit
  217 ],
  218 [echo 1
  219 ])
  220 
  221 AT_DATA([negative.csh],
  222 [[echo 1
  223 echo 2
  224 !-2
  225 ]])
  226 AT_CHECK([tcsh -f -q -i < negative.csh], ,
  227 [> 1
  228 2
  229 1
  230 > exit
  231 ],
  232 [echo 1
  233 ])
  234 
  235 AT_CHECK([echo 'echo !@%:@:0' | tcsh -f -q -i], ,
  236 [> echo
  237 > exit
  238 ],
  239 [echo echo
  240 ])
  241 
  242 AT_CHECK([echo 'echo !@%:@:1' | tcsh -f -q -i], 1,
  243 [> > exit
  244 ],
  245 [Bad ! arg selector.
  246 ])
  247 
  248 AT_DATA([bang.csh],
  249 [[echo 1
  250 echo 2
  251 !!
  252 ]])
  253 AT_CHECK([tcsh -f -q -i < bang.csh], ,
  254 [> 1
  255 2
  256 2
  257 > exit
  258 ],
  259 [echo 2
  260 ])
  261 
  262 AT_DATA([startsearch.csh],
  263 [[echo 1
  264 echo 2
  265 true
  266 !e
  267 ]])
  268 AT_CHECK([tcsh -f -q -i < startsearch.csh], ,
  269 [> 1
  270 2
  271 2
  272 > exit
  273 ],
  274 [echo 2
  275 ])
  276 
  277 AT_DATA([subsearch.csh],
  278 [[echo 1
  279 echo 12
  280 true
  281 !?2
  282 !?1?
  283 ]])
  284 AT_CHECK([tcsh -f -q -i < subsearch.csh], ,
  285 [> 1
  286 12
  287 12
  288 12
  289 > exit
  290 ],
  291 [echo 12
  292 echo 12
  293 ])
  294 
  295 AT_DATA([braces.csh],
  296 [[echo 1
  297 !{!}
  298 !{1}
  299 !{-1}
  300 !{e}
  301 !{?e?}
  302 ]])
  303 AT_CHECK([tcsh -f -q -i < braces.csh], ,
  304 [> 1
  305 1
  306 1
  307 1
  308 1
  309 1
  310 > exit
  311 ],
  312 [echo 1
  313 echo 1
  314 echo 1
  315 echo 1
  316 echo 1
  317 ])
  318 
  319 AT_DATA([1x],
  320 [[#! /bin/sh
  321 echo string
  322 ]])
  323 AT_DATA([number.csh],
  324 [[echo number
  325 set path=(. $path)
  326 1x
  327 !1x
  328 !{1x}
  329 !{1}x
  330 ]])
  331 AT_CHECK([chmod a+x 1x && tcsh -f -q -i < number.csh], ,
  332 [> number
  333 string
  334 string
  335 string
  336 numberx
  337 > exit
  338 ],
  339 [1x
  340 1x
  341 echo numberx
  342 ])
  343 
  344 AT_CLEANUP
  345 
  346 
  347 AT_SETUP([Word selection])
  348 
  349 AT_DATA([words.csh],
  350 [[echo 1 2 3 4 5
  351 :
  352 echo !1:0
  353 echo !1:2
  354 echo !1:^
  355 echo !1:$
  356 echo !?4?%
  357 echo !1:2-4
  358 echo !1:*
  359 set foo=(!2:*)
  360 echo ${#foo}
  361 echo !1:4*
  362 echo !1:2-
  363 echo !1*
  364 ]])
  365 AT_CHECK([tcsh -f -q -i < words.csh], ,
  366 [> 1 2 3 4 5
  367 echo
  368 2
  369 1
  370 5
  371 4
  372 2 3 4
  373 1 2 3 4 5
  374 0
  375 4 5
  376 2 3 4
  377 1 2 3 4 5
  378 > exit
  379 ],
  380 [echo echo
  381 echo 2
  382 echo 1
  383 echo 5
  384 echo 4
  385 echo 2 3 4
  386 echo 1 2 3 4 5
  387 set foo= ( )
  388 echo 4 5
  389 echo 2 3 4
  390 echo 1 2 3 4 5
  391 ])
  392 
  393 AT_CLEANUP
  394 
  395 
  396 AT_SETUP([History modifiers])
  397 
  398 AT_DATA([modifiers.csh],
  399 [[echo foo bar baz quux /usr/src/sys/sys/malloc.c
  400 ^baz^bash
  401 ^bar^kPa^:p
  402 echo !1:$:h
  403 echo !1:$:t
  404 echo !1:$:r
  405 echo !1:$:e
  406 echo !1:1-:u
  407 echo !!:1-:l
  408 echo !1:1-:s,ba,ab
  409 echo '!1:$:s/src\/sys/&\&more/'
  410 echo !echo:0:s//OK/
  411 echo !?ux?:*:s//uux/
  412 echo !!:*:&
  413 echo !1:*:gu:gr
  414 echo !1:*:gas/o/O/
  415 echo !1:*:gas/o/\[oo\]/
  416 echo !1:1-:p:au
  417 set var=(!1:1-:gs/a/ /)
  418 echo ${#var}
  419 set var=(!1:1-:gs/a/ /:q)
  420 echo ${#var}
  421 set var=(!1:1-:gs/a/ /:x)
  422 echo ${#var}
  423 ]])
  424 AT_CHECK([tcsh -f -q -i < modifiers.csh], ,
  425 [[> foo bar baz quux /usr/src/sys/sys/malloc.c
  426 foo bar bash quux /usr/src/sys/sys/malloc.c
  427 /usr/src/sys/sys
  428 malloc.c
  429 /usr/src/sys/sys/malloc
  430 c
  431 Foo bar baz quux
  432 foo bar baz
  433 foo abr baz quux
  434 /usr/src/sys&more/sys/malloc.c
  435 OK
  436 foo abr baz quuux
  437 foo abr baz quuuux
  438 Foo Bar Baz Quux /Usr/src/sys/sys/malloc
  439 fOO bar baz quux /usr/src/sys/sys/mallOc.c
  440 f[oo][oo] bar baz quux /usr/src/sys/sys/mall[oo]c.c
  441 6
  442 4
  443 6
  444 > exit
  445 ]],
  446 [[echo foo bar bash quux /usr/src/sys/sys/malloc.c
  447 echo foo kPa bash quux /usr/src/sys/sys/malloc.c
  448 echo /usr/src/sys/sys
  449 echo malloc.c
  450 echo /usr/src/sys/sys/malloc
  451 echo c
  452 echo Foo bar baz quux
  453 echo foo bar baz
  454 echo foo abr baz quux
  455 echo '/usr/src/sys&more/sys/malloc.c'
  456 echo OK
  457 echo foo abr baz quuux
  458 echo foo abr baz quuuux
  459 echo Foo Bar Baz Quux /Usr/src/sys/sys/malloc
  460 echo fOO bar baz quux /usr/src/sys/sys/mallOc.c
  461 echo f\[oo\]\[oo\] bar baz quux /usr/src/sys/sys/mall\[oo\]c.c
  462 echo FOO bar baz quux
  463 set var= ( foo b r b z quux )
  464 set var= ( foo b r b z quux )
  465 set var= ( foo b r b z quux )
  466 ]])
  467 
  468 AT_CLEANUP
  469 
  470 
  471 AT_SETUP([Alias substitution])
  472 
  473 AT_DATA([alias.csh],
  474 [[alias simple 'echo OK'
  475 simple
  476 simple ; simple
  477 alias compile 'echo cc -o \!^ \!^.c'
  478 compile hw
  479 alias echo 'echo no'
  480 echo bug
  481 unalias echo
  482 alias l1 'l2 a'
  483 alias l2 'l1 b'
  484 l1
  485 ]])
  486 AT_CHECK([tcsh -f alias.csh], 1,
  487 [OK
  488 OK
  489 OK
  490 cc -o hw hw.c
  491 no bug
  492 ],
  493 [Alias loop.
  494 ])
  495 
  496 AT_CLEANUP
  497 
  498 
  499 AT_SETUP([Variable substitution])
  500 
  501 AT_DATA([var.csh],
  502 [[set v=foo
  503 set a=(foo bar baz 1 2 3)
  504 set echo_style=none
  505 echo $v "$v" '$v' \$v "\$v" '\$v' $ space $	tab $
  506 touch zzzabc
  507 set filename='zzz*'
  508 echo $filename $filename:q "$filename"
  509 set a2=($a:q)
  510 echo ${#a2}
  511 set a2=("$a")
  512 echo ${#a2}
  513 echo ${v}tail
  514 echo $env_var:l
  515 echo $a[2] ${a[-2]} $a[5-] $a[*] ${a[-0]}
  516 #echo ${a[7-]}
  517 #a: Subscript out of range.
  518 echo $a[$a[5]]
  519 echo $0 $1 $2
  520 echo $*
  521 echo $?v $?a $?this_is_unknown
  522 echo $?0
  523 echo $#v $#a $#
  524 echo $%v
  525 echo $?
  526 # untested: $$, $!, $_
  527 echo $<:q
  528 ]])
  529 AT_CHECK([echo '`"{}$@'"'" | env_var=ENV_VAL tcsh -f var.csh arg1 arg2], ,
  530 [foo foo $v $v \foo \$v $ space $ tab $
  531 zzzabc zzz* zzz*
  532 6
  533 1
  534 footail
  535 eNV_VAL
  536 bar foo bar 2 3 foo bar baz 1 2 3
  537 bar
  538 var.csh arg1 arg2
  539 arg1 arg2
  540 1 1 0
  541 1
  542 1 6 2
  543 3
  544 0
  545 `"{}$@'
  546 ])
  547 
  548 AT_CLEANUP
  549 
  550 
  551 AT_SETUP([Quoting of expansions in `...`])
  552 
  553 AT_DATA([batchsystem.properties],
  554 [[# Path to job setting file
  555 asyncjobinfo.uri=file:///usr/bns/stbns01/batch/app/properties/asyncjobinfo.xml
  556 purebatchjobinfo.uri=file:///usr/bns/stbns01/batch/app/properties/purebatchjobinfo.xml
  557 
  558 # DB connection info
  559 jdbc_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))
  560 sub_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))
  561 mss_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))
  562 dbuser=stbns01bt
  563 dbpasswd=stbns01bt
  564 
  565 # OnBatch listener
  566 run=3
  567 ]])
  568 AT_DATA([uniformity_test.csh],
  569 [[
  570 set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g'  |  perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'`
  571 echo -n "$SERVICE_NAME_LOG" > ./output1
  572 
  573 cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g'  |  perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2
  574 
  575 diff -ur ./output1 ./output2 >& /dev/null
  576 
  577 if ( $? != 0 ) then
  578   echo -n 'FAIL: tcsh does not have uniform output when `...` is used!'
  579   exit 1
  580 else
  581   echo -n 'OK'
  582   exit 0
  583 endif
  584 ]])
  585 AT_DATA([quoting_result_test.csh],
  586 [[
  587 echo "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP\)(HOST=db\)(PORT=1521\)\)(CONNECT_DATA=(SERVER=DEDICATED\)(SERVICE_NAME=bns03\)\)\)" > ./expected_result
  588 
  589 set string = "jdbc_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))"
  590 set SERVICE_NAME_LOG  = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'`
  591 
  592 echo "$SERVICE_NAME_LOG" > ./actual_result
  593 
  594 diff -ur ./expected_result ./actual_result >& /dev/null
  595 
  596 if ( $? != 0 ) then
  597   echo -n 'FAIL: tcsh has unexpected result when `...` is used!'
  598   exit 1
  599 else
  600   echo -n 'OK'
  601   exit 0
  602 endif
  603 ]])
  604 AT_CHECK([tcsh -f uniformity_test.csh], 0,[OK])
  605 AT_CHECK([tcsh -f quoting_result_test.csh], 0, [OK])
  606 
  607 AT_CLEANUP
  608 
  609 AT_SETUP([\echo for git_tcsh_completion])
  610 
  611 AT_DATA([escape_echo.csh],
  612 [[
  613 set myvar = `\echo "1 2 3"`
  614 echo ${myvar}
  615 echo ${myvar[1]}
  616 echo ${myvar[2]}
  617 echo ${myvar[3]}
  618 exit 0
  619 ]])
  620 
  621 AT_CHECK([tcsh -f escape_echo.csh], 0,
  622 [1 2 3
  623 1
  624 2
  625 3
  626 ])
  627 
  628 AT_CLEANUP
  629 
  630 AT_SETUP([:gas work as described in the man pages])
  631 
  632 AT_DATA([gas.csh],
  633 [[set x=(aa bb aa bb)
  634 echo $x:gas/a/c/:gs/b/d/
  635 foreach i ( "$x:gas/a/c/:q" )
  636     echo $i
  637 end
  638 echo $x:gas/a/q/:gs/b/w/:s/b/e/
  639 echo $x:gas/a/q/:gs/b/w/:s/b/e/:gas/q/Q/
  640 exit 0
  641 ]])
  642 
  643 AT_CHECK([tcsh -f gas.csh], 0,
  644 [cc db cc db
  645 cc bb cc bb
  646 qq we qq wb
  647 QQ we QQ wb
  648 ])
  649 
  650 AT_CLEANUP
  651 
  652 AT_SETUP([avoid infinite loop in :gas])
  653 
  654 AT_DATA([replace_all.csh],
  655 [[set x=aa
  656 echo $x:gas/a/ba/
  657 exit 0
  658 ]])
  659 
  660 AT_CHECK([tcsh -f replace_all.csh], 0,
  661 [baba
  662 ])
  663 
  664 AT_CLEANUP
  665 
  666 AT_SETUP([/a.b/c:r doesn't remove path elements])
  667 
  668 AT_DATA([colon_r_no_extension.csh],
  669 [[set x='/a.b/c'
  670 echo $x:r
  671 exit 0
  672 ]])
  673 
  674 AT_CHECK([tcsh -f colon_r_no_extension.csh], 0,
  675 [/a.b/c
  676 ])
  677 
  678 AT_CLEANUP
  679 
  680 AT_SETUP([$x:q:h does not cause out of memory crash and yields nothing])
  681 
  682 AT_DATA([x_colon_q_colon_h.csh],
  683 [[set x='a/b c/d.e'
  684 echo $x:q:h
  685 exit 0
  686 ]])
  687 
  688 AT_CHECK([tcsh -f x_colon_q_colon_h.csh], 0,
  689 [
  690 ])
  691 
  692 AT_CLEANUP
  693 
  694 AT_SETUP([$x:q:t does not cause out of memory crash and yields the full string])
  695 
  696 AT_DATA([x_colon_q_colon_h.csh],
  697 [[set x='a/b c/d.e'
  698 echo $x:q:t
  699 exit 0
  700 ]])
  701 
  702 AT_CHECK([tcsh -f x_colon_q_colon_h.csh], 0,
  703 [a/b c/d.e
  704 ])
  705 
  706 AT_CLEANUP
  707 
  708 AT_SETUP([$x:q:r yields the full string])
  709 
  710 AT_DATA([x_colon_q_colon_r.csh],
  711 [[set x='a/b c/d.e'
  712 echo $x:q:r
  713 exit 0
  714 ]])
  715 
  716 AT_CHECK([tcsh -f x_colon_q_colon_r.csh], 0,
  717 [a/b c/d.e
  718 ])
  719 
  720 AT_CLEANUP
  721 
  722 AT_SETUP([$x:q:e yields nothing])
  723 
  724 AT_DATA([x_colon_q_colon_e.csh],
  725 [[set x='a/b c/d.e'
  726 echo $x:q:e
  727 exit 0
  728 ]])
  729 
  730 AT_CHECK([tcsh -f x_colon_q_colon_e.csh], 0,
  731 [
  732 ])
  733 
  734 AT_CLEANUP
  735