小物ソフト

Small Software Library (03)


ソフト一覧: [ FDiv2 | SrchDLL | Proxy DNS | DIVタグ生成 | draw.js | draw2.js ] / [ それぞれのソフトの解説(に戻る) ]

小物ソフトのソースプログラムのページ。
ちょっとアレだけど, 切り取ってお使いくらはい。
各々の先頭にある(ラベルの横の)日付は, 公開した時の日付れす。

Software
お手軽 Graphics パート2 -- 2004-05-04
/* draw2.js: お手軽 Graphics パート2, みたいな */
importPackage(java.lang, Packages.javax.swing)
importClass(java.awt.Dimension, java.awt.Color)
importClass(Packages.org.mozilla.javascript.Context)

function createComponents(cx) {
  var draw = new JPanel()
  draw.background = Color.WHITE
  draw.setPreferredSize(new Dimension(200, 200))
  var scope = cx.initStandardObjects()
  scope.canvas = draw
  scope.quit = quit
  scope.Color = Color

  var pane = Box.createVerticalBox()
  pane.add(draw)
  pane.add(Box.createVerticalStrut(5))
  var tx = new JTextArea(7, 30)
  var box = Box.createHorizontalBox()
  box.add(Box.createHorizontalStrut(5))
  box.add(new JScrollPane(tx))
  box.add(Box.createHorizontalStrut(5))
  var btn = new JButton('OK')
  btn.addActionListener(function (event) {
    var Rc = cx.evaluateString(scope, tx.text, '<cmd>', 1, null)
    if (Rc != undefined) tx.append('\n// '+Rc+'\n')
    tx.selectAll(); tx.requestFocus();
  })
  box.add(btn)
  box.add(Box.createHorizontalStrut(5))
  pane.add(box)
  return pane
}

try {
  UIManager.setLookAndFeel(UIManager.systemLookAndFeelClassName)
} catch (e) {}

var frame = new JFrame('draw canvas')
frame.addWindowListener(function (event, methodName) {
  if (methodName == 'windowClosing')
    quit()
})

var cx = Context.currentContext   // Context.enter()
try {
  frame.contentPane.add(createComponents(cx))
  frame.pack()
  frame.visible = true
}
finally {
  //cx.exit()
}

お手軽 Graphics -- 2003-05-06
/* draw.js: お手軽 Graphics */
importPackage(java.lang, java.awt, Packages.javax.swing)

function view(components) {
  f = new JFrame('image')
  var o = { windowClosing: function (evt) { f.dispose() } }
  f.addWindowListener(java.awt.event.WindowAdapter(o))

  f.contentPane.add(components)
  f.pack()
  f.visible = true
}

var c = new Canvas()   // JPanel()
c.setSize(new Dimension(200, 200))
c.background = Color.white

view(c)
f.setLocation(50, 50)
var g = c.graphics
load('draw.js') // (↑)のファイル名
/* サンプル */
g.clearRect(0,0,200,200)
g.drawOval(30, 50, 60, 80)
g.drawOval(110, 50, 60, 80)
g.drawLine(30,170,170,160)
g.drawLine(30,90,170,80)

DIVタグ生成 -- 2003-04-11
/* newDiv.erx ・・・ DIVタグ生成(日時属性含む) -- 2003-04-09 */
/* なんだか あまりにも機能が貧弱すぎるよーな気がするんだけど (^^; */

'extract /getline/line'
n = verify(getline.1, ' ')
if n == 0 then n = 2; else n = n +1;

parse value date('S') with y +4 m +2 d +2
tz = '+09:00'
cur = y'-'m'-'d'T'time()tz

call etksetfilefield 'line', line.1 +1
call etkinserttext copies(' ', n)'<div title="" cite="" datetime="'cur'">'
call etkinserttext ''
call etkinserttext copies(' ', n)'</div>'
call etksetfilefield 'line', line.1 +2
call etksetfilefield 'col', 9

代理(Proxy) DNS -- 2002-04-18
/* NameFaker:代理(proxy) DNS */
options translate('ETmode')
True = 1; False = 0;

call RxFuncAdd 'SockLoadFuncs', 'rxsock', 'SockLoadFuncs'
call SockLoadFuncs

SelectWait = 1
NServerPort = 53
MX_RecvLimit = 1500
Svr_TimeLimit = 60*60
NameServerAddr = '192.168.0.1'   /* ← ホントのNameServerを指定してちょ */

/* -- Start */
signal on halt

socket = SockSocket('AF_INET', 'SOCK_DGRAM', 0)
sklist = socket

locaddr.family = 'AF_INET'
locaddr.addr = 'INADDR_ANY'
locaddr.port = NServerPort
if SockBind(socket, 'locaddr.') < 0 then do
   say '#Bind ('locaddr.port') error='errno
   signal Halt
end

/* -- Main loop */
do forever
   r.0 = words(sklist)
   do i = 1 to r.0
      r.i = word(sklist, i)
   end
   Rc = SockSelect('r.',,, SelectWait)
   if Rc < 0 then leave
   if Rc == 0 then do
      if DBG == 1 then call CharOut , '*'
      if time('Elapsed') < Svr_TimeLimit then iterate

      say 'タイムアウト … 終了'
      leave
   end
   Rc = time('Reset')

   /* -- 受信処理 */
   do i = 1 to r.0
      Rc = SockRecvFrom(r.i, 'txt', MX_RecvLimit, 'remaddr.')

      if r.i == socket then do
         sk = SockSocket('AF_INET', 'SOCK_DGRAM', 0)
         sklist = sklist sk

         request.sk._REMOTE = remaddr.family remaddr.addr remaddr.port
         request.sk._TIME = time('Seconds')

         /* ホントのサーバーへ要求 */
         svraddr.family = 'AF_INET'
         svraddr.addr = NameServerAddr
         svraddr.port = NServerPort
         Rc = SockSendTo(sk, txt, 'svraddr.')
      end
      else do
         sk = r.i
         /* クライアントへ応答を返す */
         parse var request.sk._REMOTE remaddr.family remaddr.addr remaddr.port
         drop request.sk._REMOTE request.sk._TIME

         Rc = SockSendTo(socket, txt, 'remaddr.')

         /* 資源を開放 */
         n = wordpos(sk, sklist)
         if n > 0 then sklist = space(delword(sklist, n, 1))

         if SockSoClose(sk) < 0 then
            say '#Close error='errno
      end
   end
end
SIGL = 0

/* -- 後処理 */
Halt:
if SIGL > 0 then say 'stop at' SIGL

do i = 1 to words(sklist)
   if SockSoClose(word(sklist, i)) < 0 then
      say '#Close error='errno
end
exit

DLLを探し出す -- 2001-07-03
/* 引数で指定されたDLLを探す */

call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs'
call SysLoadFuncs

parse source . cmd .
if value('LPATH',, 'OS2ENVIRONMENT') == '' then
   call SetLPath

parse arg dll
p = pos('.', dll)
if p == 0 then dll = dll'.dll'

path = SysSearchPath('LPATH', dll)
if cmd = 'COMMAND' then say path
exit path

SetLPath: procedure
   call SysFileSearch 'LibPath', GetBootDrive()'\Config.sys', 'lpath.'
   do i = 1 to lpath.0
      if translate(word(lpath.i, 1)) == 'REM' then iterate
      parse var lpath.i '=' txt
      call value 'LPATH', txt, 'OS2ENVIRONMENT'
      say 'SET LPATH ...'
   end
   return

GetBootDrive: /* from RXTT16.INF */
   Rc = SysIni('BOTH', 'FolderWorkareaRunningObjects', 'ALL:', 'Objects')
   return left(Objects.1, 2)

ファイル分割 第二版 -- 2000-04-13
/* file分割 第二版 */
options translate('ETmode')

call RxFuncAdd 'SysLoadFuncs', 'rexxutil', 'SysLoadFuncs'
call SysLoadFuncs

parse arg orgfile drv
if \datatype(left(drv, 1), 'M') then drv = 'A:'
if substr(drv, 2) \== ':' then drv = left(drv, 1)':'
parse value FileSpec('N', orgfile) with base'.'

size = chars(orgfile)
fpos = 0
do i = 1 while fpos < size
   fname = drv''base'.'right(i, 3, 0)
   msg = 'FDを用意して下さい ("!" Utility mode)'
   do forever
      n = size -fpos
      say fname '... 残り:' n 'Bytes ('n%1024 'KB)'
      call charout , msg'0d'x
      ch = SysGetKey()
      if ch == '!'   then call DiskUtil drv
      if ch \= '0d'x then iterate
      if stream(fname, 'c', 'query exists') \== '' then
         msg = 'ファイル' fname 'は, 既に存在します。'
      else if word(SysDriveInfo(drv), 2) == 0 then
         msg = 'ディスクスペースが足りません。'
      else leave
   end
   call charout , '書き込み中 ・・' '1b'x'[K' '0d'x
   free = word(SysDriveInfo(drv), 2)
   len = min(size -fpos, free)
   val = charin(orgfile, fpos +1, len)
   rln = charout(fname, val)
   call charout fname
   if rln == 0 then fpos = fpos +len
   else say '書き出し失敗。残り' rln
end
say 'ファイル分割完了'
exit

DiskUtil: procedure
   parse arg drv
   do forever
      say 'd' '09'x'ディレクトリ表示'
      say 'F' '09'x'フォーマット'
      say '?' '09'x'ディスク情報 (ドライブ 空き容量 全体容量)'
      say
      say '[ESC]' '09'x'終了'
      ch = SysGetKey()
      say
      select
         when ch == '1b'x then return
         when ch == '?' then say SysDriveInfo(drv)
         when ch == 'd' then 'dir' drv
         when ch == 'F' then 'format' drv
      otherwise
         say '07'x
      end
   end

注意: これらのソフトは基本的に無保証です。
また, これらソフトを利用したことで何らかの被害を被ったとしても,
作者は責任を負いません。あらかじめご了承下さい。


Copyright (C) 1998-2003 Rexx使いの織華
email: ori@drive.co.jp