home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 December / VPR9712A.ISO / OLS / WIN32 / COMWP380 / comwp380.exe / SAMPLES.EXE / SAMPLE4B.CWS < prev    next >
Text File  |  1997-08-25  |  11KB  |  562 lines

  1. #-----------------------------------#
  2. # Sample4b.cws for ComWin Ver. 3.80 #
  3. #-----------------------------------#
  4.  
  5. #-------------------------------------------------------------#
  6. #----------#
  7. # メニュー #
  8. #----------#
  9.  
  10. let @ number = -1
  11.  
  12. until ($number != 0)
  13.  
  14.     echo ^^e[43m 1...ウィンドウ操作 ^^e[m
  15.     echo ^^e[46m 2...数値操作       ^^e[m
  16.     echo ^^e[42m 3...時間操作       ^^e[m
  17.     echo ^^e[45m 4...ファイル操作   ^^e[m
  18.     echo ^^e[41m 5...表示操作       ^^e[m
  19.     echo ^^e[43m 6...アドレス操作   ^^e[m
  20.     echo ^^e[46m 7...引数操作       ^^e[m
  21.     echo ^^e[42m 8...リスト操作     ^^e[m
  22.     echo ^^e[45m 9...文字操作       ^^e[m
  23.     echo ^^e[47m 0...終了           ^^e[m
  24.     echo メニュー番号?=^^ ;let number
  25.     if "%number%" == "" let @ number = -1
  26.  
  27.     switch (%number%)
  28.         case 1 :
  29.             call @ window
  30.             breaksw
  31.         case 2 :
  32.             call @ calc 100.0 6
  33.             breaksw
  34.         case 3 :
  35.             %0 -@:time # sample4b.cws -@:time arg1 ... のような呼び出しも可
  36.             breaksw
  37.         case 4 :
  38.             call @ file
  39.             breaksw
  40.         case 5 :
  41.             call @ echo
  42.             breaksw
  43.         case 6 :
  44.             call @ address
  45.             breaksw
  46.         case 7 :
  47.             call @ args This is an argument sample script.
  48.             breaksw
  49.         case 8 :
  50.             call @ list
  51.             breaksw
  52.         case 9 :
  53.             call @ character "This is a character sample script."
  54.             breaksw
  55.         case 0 :
  56.             echo 終了しますか?(y/n)^^ ;let yn
  57.             if not "%yn%" == "y" let @ number = -1
  58.             breaksw
  59.         default :
  60.             echo もう一度入力してください。^^a
  61.             breaksw
  62.     endsw
  63.  
  64. end
  65.  
  66. return 0
  67.  
  68. #-------------------------------------------------------------#
  69. proc file
  70. #--------------#
  71. # ファイル操作 #
  72. #--------------#
  73.  
  74. echo 指定したファイルに行番号を付加します。
  75.  
  76. while (1)
  77.     echo 入力ファイル名?=^^ ;let fi
  78.     if "%fi%" == "" continue
  79.     if not exist %fi% then
  80.         echo 入力ファイルが存在しません。
  81.         continue
  82.     endif
  83.     break
  84. end
  85.  
  86. while (1)
  87.     echo 出力ファイル名?=^^ ;let fo
  88.     if "%fo%" == "" continue
  89.     if exist %fo% then
  90.         echo 既存のファイルに上書きはできません。
  91.         continue
  92.     endif
  93.     break
  94. end
  95.  
  96. call @ addline < %fi% > %fo%
  97.  
  98. type %fo%
  99.  
  100. pause
  101. return
  102.  
  103. proc addline
  104.  
  105. for (i = 1; 1; i++)
  106.     let buf
  107.     if (*status > 0) break
  108.     set @ argv[2] = *i
  109.     set @ argv[3] = *buf
  110.     printf "^%^6d:^%s\n" argv[2] argv[3]
  111. end
  112.  
  113. set argv[2]=
  114. set argv[3]=
  115.  
  116. return
  117.  
  118. #-------------------------------------------------------------#
  119. proc window
  120. #----------------#
  121. # ウィンドウ操作 #
  122. #----------------#
  123.  
  124. let appname=電卓
  125. let appprog=calc
  126. #let appname=メモ帳 - (無題)
  127. #let appprog=notepad
  128.  
  129. echo %appname%を起動します。 ;pause ;%appprog%
  130. gosub leftup
  131. gosub leftdown
  132. gosub rightdown
  133. gosub rightup
  134. echo %appname%を終了します。 ;pause ;kill "[%appname%]"
  135. return
  136.  
  137. :leftup
  138.     let @ x =   0
  139.     let @ y = 200
  140.     while ($x <= 200)
  141.         SetWindowPos "[%appname%]" 0 %x% %y% 0 0 0001
  142.         let @ x += 4 ;
  143.         let @ y -= 4
  144.     end
  145. return
  146.  
  147. :leftdown
  148.     let @ x = 200
  149.     let @ y =   0
  150.     while ($x <= 400)
  151.         SetWindowPos "[%appname%]" 0 %x% %y% 0 0 0001
  152.         let @ x += 4
  153.         let @ y += 4
  154.     end
  155. return
  156.  
  157. :rightdown
  158.     let @ x = 400
  159.     let @ y = 200
  160.     while ($x >= 200)
  161.         SetWindowPos "[%appname%]" 0 %x% %y% 0 0 0001
  162.         let @ x -= 4
  163.         let @ y += 4
  164.     end
  165. return
  166.  
  167. :rightup
  168.     let @ x = 200
  169.     let @ y = 400
  170.     while ($x >= 0)
  171.          SetWindowPos "[%appname%]" 0 %x% %y% 0 0 0001
  172.          let @ x -= 4
  173.          let @ y -= 4
  174.     end
  175. return
  176.  
  177. #--------------------------------------------------------------#
  178. proc calc
  179. #----------#
  180. # 数値操作 #
  181. #----------#
  182.  
  183. if "%1" == "" then
  184.     let @ a = 10.0
  185. else
  186.     let a=%1
  187. endif
  188.  
  189. if "%2" == "" then
  190.     let @ b = 4
  191. else
  192.     let b=%2
  193. endif
  194.  
  195. let @ c = $a * $b
  196. echo %a% *  %b% = %c%
  197.  
  198. let @ c = $a / $b
  199. echo %a% /  %b% = %c%
  200.  
  201. let @ c = $a % $b
  202. echo %a% %  %b% = %c%
  203.  
  204. let @ c = $a + $b
  205. echo %a% +  %b% = %c%
  206.  
  207. let @ c = $a - $b
  208. echo %a% -  %b% = %c%
  209.  
  210. let @ c = $a ^<^< $b
  211. echo %a% ^<^< %b% = %c%
  212.  
  213. let @ c = $a ^>^> $b
  214. echo %a% ^>^> %b% = %c%
  215.  
  216. let @ c = $a ^< $b
  217. echo %a% ^<  %b% = %c%
  218.  
  219. let @ c = $a ^> $b
  220. echo %a% ^>  %b% = %c%
  221.  
  222. let @ c = $a ^<= $b
  223. echo %a% ^<= %b% = %c%
  224.  
  225. let @ c = $a ^>= $b
  226. echo %a% ^>= %b% = %c%
  227.  
  228. let @ c = $a == $b
  229. echo %a% == %b% = %c%
  230.  
  231. let @ c = $a != $b
  232. echo %a% != %b% = %c%
  233.  
  234. let @ c = $a & $b
  235. echo %a% &  %b% = %c%
  236.  
  237. let @ c = $a ^^ $b
  238. echo %a% ^^^^  %b% = %c%
  239.  
  240. let @ c = $a ^| $b
  241. echo %a% ^|  %b% = %c%
  242.  
  243. let @ c = $a && $b
  244. echo %a% && %b% = %c%
  245.  
  246. let @ c = $a ^|^| $b
  247. echo %a% ^|^| %b% = %c%
  248.  
  249. pause
  250. return
  251.  
  252. #--------------------------------------------------------------#
  253. proc time
  254. #----------#
  255. # 時間操作 #
  256. #----------#
  257.  
  258. echo | time | let time
  259. echo | date | let date
  260. echo %date%
  261. echo %time%
  262.  
  263. pause
  264. return
  265.  
  266. #--------------------------------------------------------------#
  267. proc echo
  268. #----------#
  269. # 表示操作 #
  270. #----------#
  271.  
  272. mode con cols=128 lines=500
  273.  
  274. foreach file (*.*)
  275.     echo %file% ^^c
  276. end
  277. echo
  278.  
  279. let @ i = 1;
  280. foreach file (*.*)
  281.     echo %i%:%file%
  282.     let @ i++
  283. end
  284.  
  285. pause
  286. return
  287.  
  288. #--------------------------------------------------------------#
  289. proc address
  290. #--------------#
  291. # アドレス操作 #
  292. #--------------#
  293.  
  294. echo 配列を設定
  295. call @ address_set_array  &array 0 10
  296.  
  297. echo 配列を表示
  298. call @ address_disp_array &array 0 10
  299.  
  300. echo 配列を降順にソート
  301. call @ address_sort_array &array 0 10
  302.  
  303. echo 配列を表示
  304. call @ address_disp_array &array 0 10
  305.  
  306. pause
  307. return
  308.  
  309. #----------------#
  310. # 配列に値を設定 #
  311. #----------------#
  312. proc address_set_array
  313. let   array=%1
  314. let   min=%2
  315. let   max=%3
  316. let @ i = $min
  317. while ($i < $max)
  318.     let @ %array%[%i%] = $i
  319.     let @ i++
  320. end
  321. return
  322.  
  323. #------------#
  324. # 配列を表示 #
  325. #------------#
  326. proc address_disp_array
  327. let   array=%1
  328. let   min=%2
  329. let   max=%3
  330. let @ i = $min
  331. while ($i < $max)
  332.     let @ value = $%array%[%i%]
  333.     echo %value% ^^
  334.     let @ i++
  335. end
  336. echo
  337.  
  338. return
  339.  
  340. #------------#
  341. # 配列を整列 #
  342. #------------#
  343. proc address_sort_array
  344. echo ソート中です...^^
  345. let   array=%1
  346. let   min=%2
  347. let   max=%3
  348. let @ count = 0
  349. let @ i = $min
  350. while ($i < $max - 1)
  351.     let @ j = $i + 1
  352.     while ($j < $max)
  353.        if ($%array%[%i%] < $%array%[%j%]) then
  354.            let @ value        = $%array%[%i%]
  355.            let @ %array%[%i%] = $%array%[%j%]
  356.            let @ %array%[%j%] = $value
  357.            let @ count++
  358.        endif
  359.        let @ j++
  360.     end
  361.     let @ i++
  362. end
  363. echo ^^rソート終了しました。
  364. echo 交換回数は %count% 回です。
  365.  
  366. return
  367.  
  368. #--------------------------------------------------------------#
  369. proc args
  370. #----------#
  371. # 引数操作 #
  372. #----------#
  373.  
  374. gosub setargs
  375. let @ i = 0
  376. while ($i < $argc)
  377.     let @ argv = $argv[%i%]
  378.     echo 第 %i% 引数 : %argv%
  379.     let @ i += 1
  380. end
  381.  
  382. pause
  383. return
  384.  
  385. :setargs
  386.     let @ argc = 0
  387.     while ("%0" != "")
  388.         let argv[%argc%]=%0
  389.         let @ argc++
  390.         shift
  391.     end
  392.  
  393.     echo ---全ローカル環境変数---
  394.     let
  395.     echo ------------------------
  396. return
  397.  
  398. #--------------------------------------------------------------#
  399. proc list
  400. #------------#
  401. # リスト操作 #
  402. #------------#
  403.  
  404. #--------------------#
  405. # 先頭のセルを初期化 #
  406. #--------------------#
  407. let @ memorycounter = 0
  408. let @ new = cell[%memorycounter%] ; let @ memorycounter++
  409. let @ top = $new
  410. let @ cur = $new
  411.  
  412. #------------------#
  413. # 9 個のセルを確保 #
  414. #------------------#
  415. let @ i = 1;
  416. while ($i < 10)
  417.     let @ new = cell[%memorycounter%] ; let @ memorycounter++
  418.     let @ %cur%.next = $new
  419.     let @ cur = $new
  420.     let @ i++
  421. end
  422.  
  423. #----------------------#
  424. # セルをたどり値を代入 #
  425. #----------------------#
  426. let @ i = 0
  427. let @ s = 0
  428. let @ cur = $top
  429. while ("%cur%" != "")
  430.     let @ i += 1
  431.     let @ s += $i
  432.     let @ %cur%.value = $s
  433.     let @ cur = $%cur%.next
  434. end
  435.  
  436. #-------------------------------#
  437. # セルをたどり値を表示 (漢字編) #
  438. #-------------------------------#
  439. let 先頭=top
  440. let 次=next
  441. let 本体=value
  442.  
  443. let @ 今 = $%先頭%
  444. while ("%今%" != "")
  445.     let @ 値 = $%今%.%本体%
  446.     echo %値% ^^
  447.     let @ 今 = $%今%.%次%
  448. end
  449. echo
  450.  
  451. #----------------------#
  452. # 先頭の次のセルを削除 #
  453. #----------------------#
  454. let @ cur = $%top%.next
  455. let @ %top%.next = $%cur%.next
  456. let %cur%.value=
  457. let %cur%.next=
  458. let cur=
  459.  
  460. #---------------------------------------#
  461. # セルをたどり値を表示 (サブルーチン編) #
  462. #---------------------------------------#
  463. gosub displaycell
  464.  
  465. #----------------------------#
  466. # 先頭の次に新しいセルを追加 #
  467. #----------------------------#
  468. let @ new = cell[%memorycounter%] ; let @ memorycounter++
  469. let @ cur = $%top%.next
  470. let @ %top%.next = $new
  471. let @ %new%.next = $cur
  472. let @ %new%.value = 0
  473.  
  474. #---------------------------------------#
  475. # セルをたどり値を表示 (プロシージャ編) #
  476. #---------------------------------------#
  477. call @ displaycell &%top% &cell
  478.  
  479. #--------------------------#
  480. # セルをたどり各セルを開放 #
  481. #--------------------------#
  482. let @ cur = $top
  483. while ("%cur%" != "")
  484.     let @ tmp = $cur
  485.     let @ cur = $%cur%.next
  486.     let %tmp%.value=
  487.     let %tmp%.next=
  488.     let tmp=
  489. end
  490.  
  491. pause
  492. return
  493.  
  494. #----------------------------#
  495. # セルを表示するサブルーチン #
  496. #----------------------------#
  497. :displaycell
  498.     let @ cur = $top
  499.     while ("%cur%" != "")
  500.         let @ value = $%cur%.value
  501.         echo %value% ^^
  502.         let @ cur = $%cur%.next
  503.     end
  504.     echo
  505. return
  506.  
  507. #----------------------------#
  508. # セルを表示するプロシージャ #
  509. #----------------------------#
  510. proc displaycell
  511. let cur=%1
  512. while ("%cur%" != "&")
  513.     let @ value = $%cur%.value
  514.     echo %value% ^^
  515.     let @ cur = &$%cur%.next
  516. end
  517. echo
  518. return
  519.  
  520. #--------------------------------------------------------------#
  521. proc character
  522. #----------#
  523. # 文字操作 #
  524. #----------#
  525.  
  526. #--------------#
  527. # 文字列の長さ #
  528. #--------------#
  529. let @ str1= `echo This is a character sample script.` # バッククォート
  530. let @ i = 0
  531. while ($str1:$i != 0) # 文字 ---> 数値
  532.     let @ i++
  533. end
  534.  
  535. echo %str1% の長さは %i% 文字です。
  536.  
  537. #------------#
  538. # 文字コード #
  539. #------------#
  540.  
  541. for (i = 0x81; $i <= 0x9F; i++)
  542.     for (j = 0x40; $j <= 0xFC; j++)
  543.         if ($j == ~~0x7F) continue   # 10進整数表示で比較
  544.         let @ c = :($i * 0x100 + $j) # 数値 ---> 文字
  545.         echo %c%^^c
  546.     end
  547. end
  548.  
  549. for (i = 0xE0; $i <= 0xFC; i++)
  550.     for (j = 0x40; $j <= 0xFC; j++)
  551.         if ($j == ~~0x7F) continue   # 10進整数表示で比較
  552.         let @ c = :($i * 0x100 + $j) # 数値 ---> 文字
  553.         echo %c%^^c
  554.     end
  555. end
  556. echo
  557.  
  558. pause
  559. return
  560.  
  561. #--------------------------------------------------------------#
  562.