Samedir - 目錄同步精靈
軟體:Samedir(版本:3.9.7)
類別:備份工具
性質:Freeware(708 K)
【編輯/王國淵】
大家的電腦裡頭都存放了許多的資料,這些資料可能是公司的重要文件、個人的信件、照片,或者是辛苦收集來的各種資料。這所謂資料無價,如果這些資料因為硬碟損毀或是電腦中毒而毀於一旦,你必須花多少時間才能把他們再找回來?光是想就令人害怕。不過別擔心,只要定期做好資料的備份工作,資料損毀的惡運就不會降臨到你頭上。
經過不斷的灌輸,相信大多數使用者都開始重視自己電腦中資料的安全,但是說到備份資料這件繁複的工作,如果老是得要手動操作,日子久了,人的惰性就會慢慢戰勝資料的重要性了,此時,你就需要一款備份工具來幫你全自動完成資料備份的工作,免得因為時間一久,好不容易建立起的資料安全觀念都被拋到九霄雲外。
要怎麼樣簡單備份重要的資料呢?其實你可以使用 Samedir 這一款免費的資料備份工具。它的操作十分簡單,使用者只需要指定好想要備份的目錄,以及存放的目的地,Samedir 就能夠幫你迅速地進行備份的工作。
而 Samedir 與一般同類型備份工具最大的不同,就是它具有「快照」的功能,讓使用者可以藉由隨身碟這樣容量較小的儲存裝置,來同步兩個大容量的目錄。你可以透過「快照」的功能,來輕鬆同步公司與家中的電子郵件目錄,讓兩端的資料保持一致,而不需要備份下整個目錄,讓你可以方便地進行資料的同步工作喔!
下載:http://samedir.sbn.bz/Samedir397.exe
Author: strong
FileStructureToHTML - 檔案報表產生器

軟體:FileStructureToHTML(版本:1.12)
類別:檔案工具
性質:Freeware(506 K)
【編輯/王國淵】
硬碟裡頭存放了各種資料,每當要整理時,實在是令人頭痛,尤其在某些需要將電腦裡的檔案整理成報表的時候,這對於一般人來說,實在是一件相當麻煩的事,但是如果此時有了 FileStructureToHTML 的幫助,相信可以省去你相當多的麻煩。
FileStructureToHTML 是一款免費的檔案報表產生軟體,它能夠依照使用者所指定的目錄,去對目錄裡的髓有檔案產生 HTML 格式的報表,讓使用者可以透過這些報表瞭解目錄裡到底有哪些資料。
透過 FileStructureToHTML 產生的報表,可以只是目錄的樹狀結構,或者也可以詳盡到每個檔案的檔案大小、創建、修改日期,讓使用者可以依照自己的需求去彈性調整所需要的報表內容。
下載:http://switch.dl.sourceforge.net/sourceforge/fsth/fsth1.12_setup.exe
javascript get value from popup window
Hi,
anybody knows the way to return values from child window to parent window
Use window.opener in the child window, or the variable you used to store the window object in the parent window.
Best of lcuk.
Vmware server1.0 + Linux As4 + Oracle 10g RAC
ORACLE 10G RAC for Linux AS4 安装
作者:秋风no.1,学习测试所用,欢迎转载.
原文:http://www.chinaunix.net/jh/4/805214.html
由于本人的硬件条件所限,所以采用的是虚拟机技术,虚拟机软件采用的是vmware server 1.0
宿主机,dell 2850,配置如下
_____________________________________
Intel(R) Xeon(TM) CPU 2.80GHz 两颗
内存2G
硬盘144G
os linux as 3
虚拟服务器 2台,配置如下
______________________________________
Intel(R) Xeon(TM) CPU 2.80GHz 1颗
内存1G
硬盘15G
os linux as 4
1.安装vmware server软件
从www.vmware.com下载vmware server 1.0 for linux软件,安装过程很简单,基本上是一路Enter.只是需要sn,在这里提供几个使用
928WH-Y65AW-21394-4C70J,92EY4-Y4NAT-23L07-4U7CH,9AWPN-Y400W-2179N-4K5HM
安装vmware server console,以便远程管理vmware server
2.安装虚拟服务器操作系统
我用的是OS是Redhat AS4,kernel 2.6.9-22,虚拟出两块网卡,开始安装操作系统,主机名叫ha1pub,eth0:10.1.250.17,eth1:192.168.100.100.具体过程省略.安装结束后,使用ntsysv命令,关闭掉一些不常使用的进程,只留下一下一些需要的,如ssh,ftp等等.然后关机!
然后cp ha1pub的所有配置文件到一个新的目录,在虚拟机console里面打开,就会出现一个新的系统,但是由于里面的ip信息和第一台机器的重复,进入系统后修改一下
编辑/etc/sysconfig/network文件,将ha1pub修改为ha2pub,然后修改ip,eth0:10.1.250.18,eth1:192.168.100.200.
注意,redhat系统里面,ip的配置文件ifcfg-eth文件里面,有可能包含mac地址的信息,需要删除掉,否则会mac地址重复的错误.ha2pub也关机
3.设置共享存储
由于安装RAC需要共享存储,所以必须为两台机器设置共享存储,我使用vmware-vdiskmanager命令创建一些虚拟硬盘
________________________________________________________________________
vmware-vdiskmanager -c -s 1Gb -a lsilogic -t 2 “/vmware/share/ocfs.vmdk” |用于Oracle集群注册表文件和CRS表决磁盘
________________________________________________________________________
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 “/vmware/share/asm1.vmdk” |用于Oracle的数据文件
________________________________________________________________________
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 “/vmware/share/asm2.vmdk” |用于Oracle的数据文件
________________________________________________________________________
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 “/vmware/share/asm3.vmdk” |用于Oracle的数据文件
________________________________________________________________________
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 “/vmware/share/asm4.vmdk” |用于Oracle的闪回恢复区
____________________________________________________________________
然后分别在两个虚拟服务器的的配置文件,ha1.vmx和ha2vmx文件里面添加如下信息
scsi1.present = “TRUE”
scsi1.virtualDev = “lsilogic”
scsi1.sharedBus = “virtual”
scsi1:1.present = “TRUE”
scsi1:1.mode = “independent-persistent”
scsi1:1.filename = “/vmware/share/ocfs.vmdk”
scsi1:1.deviceType = “disk”
scsi1:2.present = “TRUE”
scsi1:2.mode = “independent-persistent”
scsi1:2.filename = “/vmware/share/asm1.vmdk”
scsi1:2.deviceType = “disk”
scsi1:3.present = “TRUE”
scsi1:3.mode = “independent-persistent”
scsi1:3.filename = “/vmware/share/asm2.vmdk”
scsi1:3.deviceType = “disk”
scsi1:4.present = “TRUE”
scsi1:4.mode = “independent-persistent”
scsi1:4.filename = “/vmware/share/asm3.vmdk”
scsi1:4.deviceType = “disk”
scsi1:5.present = “TRUE”
scsi1:5.mode = “independent-persistent”
scsi1:5.filename = “/vmware/share/asm4.vmdk”
scsi1:5.deviceType = “disk”
disk.locking = “false”
diskLib.dataCacheMaxSize = “0”
diskLib.dataCacheMaxReadAheadSize = “0”
diskLib.DataCacheMinReadAheadSize = “0”
diskLib.dataCachePageSize = “4096”
diskLib.maxUnsyncedWrites = “0”
保存后,打开vmware console就可以看到添加的硬盘,启动ha1pub和ha2pub!随便进入一台系统,用fdisk格式化这些新添加的硬盘.
fdisk -l可以看到如下
__________________________________________________________________
Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 275 2104515 82 Linux swap
/dev/sda3 276 1958 13518697+ 83 Linux
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 261 2096451 83 Linux
Disk /dev/sdd: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 261 2096451 83 Linux
Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 261 2096451 83 Linux
Disk /dev/sdf: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdf1 1 261 2096451 83 Linux
____________________________________________________________________
修改/etc/hosts文件,如下所示
127.0.0.1 localhost(这里必须这样修改,否则RAC节点名出现在回送地址中,安装RAC期间可能会报错)
10.1.250.17 ha1pub
10.1.250.18 ha2pub
192.168.100.100 ha1prv
192.168.100.200 ha2prv
10.1.250.19 ha1vip
10.1.250.20 ha2vip
4.调整网络设置,设置共享内存和信号参数
分别在ha1pub和ha2pub上,编辑/etc/sysctl.conf文件,添加如下信息,这些信息可以根据自己的机器实际情况来调整
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
5. 配置 hangcheck-timer 内核模块
该模块是用来监控集群的状态情况,linux as4中已经安装了此模块,使用下面的命令确认
find /lib/modules -name “hangcheck-timer.o” 看看有没有,如果有,配置并加载该模块
#echo “/sbin/modprobe hangcheck-timer” >> /etc/rc.local
#modprobe hangcheck-timer
#grep Hangcheck /var/log/messages | tail -2
Jul 31 15:01:49 ha2pub kernel: Hangcheck: starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds).
如果看到上面的信息,说明模块的设置工作正确
6. 在两个节点上创建oracle用户和目录
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
以oracle用户登陆,分别建立两个目录
mkdir /home/oracle/app 用于安装oracle 数据库
mkdir /home/oracle/orcl 用于Oracle 集群文件系统 (OCFS) 的挂载点
修改oracle用户的.bash_profile文件如下所示
__________________________________________________________________
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=/home/oracle/app/oracle/product/10.2.0/crs/
export ORACLE_SID=orcl1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
________________________________________________________________________
注意,在第二个节点上,修改SID=orcl2
7.建立节点之间的互信
我采用的是ssh,具体过程有很多文档说明,这里省略.分别要建立root用户,oracle用户的互信.
然后在分别以root用户,oracle在两个节点上执行如下命令
ssh localhost
ssh ha1pub
ssh ha2pub
ssh ha1prv
ssh ha2prv
8.安装配置ocfs2
从http://oss.oracle.com/projects/ocfs2/下载与自己操作系统版本相符合的ocfs,ocfs console
比如我的内核是2.6.9-22.EL,于是我下载的就是ocfs2-2.6.9-22.EL-1.2.2-1.i686.rpm,这点非常重要
安装很简单,把该下载的包都下载了rpm安装就ok了
8.1 ocfs2的配置
先使用下面命令禁用SElinux
#system-config-securitylevel &
然后在集群中的每个节点上生成和配置 /etc/ocfs2/cluster.conf
可以使用ocfs2console命令调出图形界面,将ha1pub和ha2pub两个节点都加入,点击apply,然后退出.
在/etc/ocfs2/目录下面将有cluster.conf文件,内容应该如下
______________________________________________________
node:
ip_port = 7777
ip_address = 10.1.250.17
number = 0
name = ha1pub
cluster = ocfs2
node:
ip_port = 7777
ip_address = 10.1.250.18
number = 1
name = ha2pub
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2
________________________________________________________
接着编辑 /etc/init.d/o2cb, 删除开始带 #的配置行
然后 /etc/init.d/o2cb offline ocfs2
/etc/init.d/o2cb unload ocfs2
/etc/init.d/o2cb configure ocfs2 输入y就ok了
8.2 创建ocfs2文件系统
mkfs.ocfs2 -b 4k -C 32k -L oradatafiles /dev/sdb1
然后挂载ocfs2文件系统
mount -t ocfs2 -o datavolume /dev/sdb1 /home/oracle/orcl
修改/etc/fstab,添加
/dev/sdb1 /home/oracle/orcl ocfs2 _netdev,datavolume 0 0
8.3 调O2CB的心跳阀值
修改文件/etc/sysconfig/o2cb将O2CB_HEARTBEAT_THRESHOLD 设置为 301
修改文件 /etc/sysconfig/o2cb 后,需要更改 o2cb 配置。同样,应在集群的所有节点上执行以下操作。
# umount /home/oracle/orcl/
# /etc/init.d/o2cb unload
# /etc/init.d/o2cb configure
reboot两个节点
9. 安装,配置自动存储管理ASM2.0
可以从http://www.oracle.com/technology … x/asmlib/rhel4.html这里下载相关rpm包
rpm安装过程省略
执行/etc/init.d/oracleasm configure
默认用户输入oracle,默认组输入dba,其他都y,y就可以了
9.1创建ASM磁盘
在一个节点上执行
/etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
/etc/init.d/oracleasm createdisk VOL2 /dev/sdd1
/etc/init.d/oracleasm createdisk VOL3 /dev/sde1
/etc/init.d/oracleasm createdisk VOL4 /dev/sdf1
创建好后,执行/etc/init.d/oracleasm listdisks可以看到
VOL1
VOL2
VOL3
VOL4
然后在另外一个节点上执行
/etc/init.d/oracleasm scandisks
完成后执行
/etc/init.d/oracleasm listdisks应该可以看到和的一个节点相同的内容
10. 安装Oracle 10G cluster软件
从oracle网站下载10201_clusterware_linux32
以oracle用户登录,unset掉一些环境变量,如下
$ unset ORA_CRS_HOME
$ unset ORACLE_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
开始安装cluster软件
./runInstaller -ignoreSysPrereqs
*确认安装目录是/home/oracle/app/oracle/product/10.2.0/crs/
*如果愿意可以将clustername由crs修改成其他的名称
*添加两个节点,如下所示
____________________________________________________________________
Public Node Name Private Node Name Virtual Node Name
ha1pub ha1prv ha1vip
ha2pub ha2prv ha2vip
____________________________________________________________________
*要修改一下eth0的类型,他默认的是private,修改为public
*指定OCR和mirror的路径
Specify OCR Location: /home/oracle/orcl/OCRFile
Specify OCR Mirror Location:/home/oracle/orcl/OCRFile_mirror
*指定Voting磁盘路径
Voting Disk Location: /home/oracle/orcl/CSSFile
Additional Voting Disk 1 Location:/home/oracle/orcl/CSSFile_mirror1
Additional Voting Disk 2 Location:/home/oracle/orcl/CSSFile_mirror2
*安装快结束时.会要求以root执行orainsRoot.sh和root.sh脚本,以root用户打开一个新的终端,一个一个节点顺序执行,千万不要抢时间一起执行
*执行最后一个root.sh的时候,可能会报””eth0″ is not public.Public interfaces should be used to configure virtual IPs.”这样的错误.这时候需要以root用户去执行$ORA_CRS_HOME/bin/vipca,选择两个节点,配置一下虚拟ip的信息.
至此,clusterware安装就ok了,检查一下集群节点
$ORA_CRS_HOME/bin/olsnodes -n
ha1pub 1
ha2pub 2
11. 安装Oracle 10g软件
从oracle网站下载10201_database_linux32
unset掉一些环境变量
$ unset ORA_CRS_HOME
$ unset ORACLE_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
Oracle的安装省略,既然敢玩RAC,肯定以前也安装过oracle,只是有些地方需要注意
*节点的选择上,一定要选上所有的节点
*选择 “Install database software only”,先不要建instance,等数据库安装完毕后时候dbca创建
*安装完成后,需要执行root.sh脚本,不要着急,一个节点一个节点执行
12. 建立TNS侦听
以oracle用户执行
$ netca &
*选择所有节点
*选择Listener configuration
*其他的都选择默认即可
结束后可以验证一下侦听是否已经在所有节点上运行
ps -ef|grep LISTEN
应该可以看到
/home/oracle/app/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER_HA1PUB -inherit
另外一个节点应该是
/home/oracle/app/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER_HA2PUB -inherit
13. 创建数据库实例
以oracle用户在任一节点执行
dbca &
*选择 Create a Database
*选择所有节点
*选择Custom Database
*全局数据库名输入orcl,SID也是orcl
*选择使用相同的密码对所有用户
*存储选项选择 use ASM
*修改“Create server parameter file (SPFILE)”为 /home/oracle/orcl/dbs/spfile+ASM.ora。所有其他选项可以保留其默认值。
*在ASM Disk Groups配置界面,选择Create New,会显示之前通过ASMlib创建的4个卷VOL1到VOL4
选择前三个,VOL1,VOL2,VOL3,Disk group name输入DATA,Redundancy,选择Normal,单击ok,完成后再次单击Create New.选择最后一个VOL4,Disk group name输入FLASH_RECOVERY_AREA, Redundancy选择External,单击ok,完成ASM的磁盘组创建.
*Database File Locations 选择DATA
*Recovery Configuration 选择FLASH_RECOVERY_AREA
*Database Content由于是测试,可以取消掉所有选项
*Service name 可以输入orcltest,TAF Policy选择Basic
*Database Storage 根据自己系统的硬件条件可以更改一些参数.
完成dbca,Oracle RAC就可以所已经完全安装成功了!
14. RAC的启动和关闭
如果都遵循了上面的安装步骤,那么每次节点重新启动的时候,所有服务都会自动启动,如果需要关闭或者启动某个节点,如下所示
*停止RAC
1.emctl stop dbconsole
2.srvctl stop instance -d orcl -i orcl1
3.srvctl stop asm -n ha1pub
4.srvctl stop nodeapps -n ha1pub
*启动RAC
和上面的步骤正好相反即
1.srvctl start nodeapps -n ha1pub
2.srvctl start asm -n ha1pub
3.srvctl start instance -d orcl -i orcl1
4.srvctl start dbconsole
15. RAC的验证和测试
有很多文档写的都很详细,本文就不赘述了
16. 参考文档
在 Linux 和 FireWire 上构建您自己的 Oracle RAC 10g 第 2 版集群
作者:Jeffrey Hunter
http://www.oracle.com/technology … unter_rac10gr2.html
DES in JavaScript
salt=document.CRYPT.Salt.value;
pw_salt=this.crypt(salt,document.CRYPT.PW.value);
document.CRYPT.ENC_PW.value=pw_salt[0];
document.CRYPT.Salt.value=pw_salt[1];
return false;
}
function bTU(b){
value=Math.floor(b);
return (value>=0?value:value+256);
}
function fBTI(b,offset){
value=this.byteToUnsigned(b[offset++]);
value|=(this.byteToUnsigned(b[offset++])<<8);
value|=(this.byteToUnsigned(b[offset++])<<16);
value|=(this.byteToUnsigned(b[offset++])<<24);
return value;
}
function iTFB(iValue,b,offset){
b[offset++]=((iValue)&0xff);
b[offset++]=((iValue>>>8)&0xff);
b[offset++]=((iValue>>>16)&0xff);
b[offset++]=((iValue>>>24)&0xff);
}
function P_P(a,b,n,m,results){
t=((a>>>n)^b)&m;
a^=t<<n;
b^=t;
results[0]=a;
results[1]=b;
}
function H_P(a,n,m){
t=((a<<(16-n))^a)&m;
a=a^t^(t>>>(16-n));
return a;
}
function d_s_k(key){
schedule=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
c=this.fourBytesToInt(key,0);
d=this.fourBytesToInt(key,4);
results=new Array(0,0);
this.PERM_OP(d,c,4,0x0f0f0f0f,results);
d=results[0];c=results[1];
c=this.HPERM_OP(c,-2,0xcccc0000);
d=this.HPERM_OP(d,-2,0xcccc0000);
this.PERM_OP(d,c,1,0x55555555,results);
d=results[0];c=results[1];
this.PERM_OP(c,d,8,0x00ff00ff,results);
c=results[0];d=results[1];
this.PERM_OP(d,c,1,0x55555555,results);
d=results[0];c=results[1];
d=(((d&0x000000ff)<<16)|(d&0x0000ff00)|((d&0x00ff0000)>>>16)|((c&0xf0000000)>>>4));
c&=0x0fffffff;
s=0;t=0;
j=0;
for(i=0;i<this.ITERATIONS;i++){
if(this.shifts2[i]){
c=(c>>>2)|(c<<26);
d=(d>>>2)|(d<<26);
}else{
c=(c>>>1)|(c<<27);
d=(d>>>1)|(d<<27);
}
c&=0x0fffffff;
d&=0x0fffffff;
s=this.skb[0][c&0x3f]|this.skb[1][((c>>>6)&0x03)|((c>>>7)&0x3c)]|this.skb[2][((c>>>13)&0x0f)|((c>>>14)&0x30)]|this.skb[3][((c>>>20)&0x01)|((c>>>21)&0x06)|((c>>>22)&0x38)];
t=this.skb[4][d&0x3f]|this.skb[5][((d>>>7)&0x03)|((d>>>8)&0x3c)]|this.skb[6][(d>>>15)&0x3f]|this.skb[7][((d>>>21)&0x0f)|((d>>>22)&0x30)];
schedule[j++]=((t<< 16)|(s&0x0000ffff))&0xffffffff;
s=((s>>>16)|(t&0xffff0000));
s=(s<<4)|(s>>>28);
schedule[j++]=s&0xffffffff;
}
return schedule;
}
function D_E(L,R,S,E0,E1,s){
v=R^(R>>>16);
u=v&E0;
v=v&E1;
u=(u^(u<<16))^R^s[S];
t=(v^(v<<16))^R^s[S+1];
t=(t>>>4)|(t<<28);
L^=this.SPtrans[1][t&0x3f]|this.SPtrans[3][(t>>>8)&0x3f]|this.SPtrans[5][(t>>>16)&0x3f]|this.SPtrans[7][(t>>>24)&0x3f]|this.SPtrans[0][u&0x3f]|this.SPtrans[2][(u>>>8)&0x3f]|this.SPtrans[4][(u>>>16)&0x3f]|this.SPtrans[6][(u>>>24)&0x3f];
return L;
}
function bdy(schedule,Eswap0,Eswap1) {
left=0;
right=0;
t=0;
for(j=0;j<25;j++){
for(i=0;i<this.ITERATIONS*2;i+=4){
left=this.D_ENCRYPT(left, right,i,Eswap0,Eswap1,schedule);
right=this.D_ENCRYPT(right,left,i+2,Eswap0,Eswap1,schedule);
}
t=left;
left=right;
right=t;
}
t=right;
right=(left>>>1)|(left<<31);
left=(t>>>1)|(t<<31);
left&=0xffffffff;
right&=0xffffffff;
results=new Array(0,0);
this.PERM_OP(right,left,1,0x55555555,results);
right=results[0];left=results[1];
this.PERM_OP(left,right,8,0x00ff00ff,results);
left=results[0];right=results[1];
this.PERM_OP(right,left,2,0x33333333,results);
right=results[0];left=results[1];
this.PERM_OP(left,right,16,0x0000ffff,results);
left=results[0];right=results[1];
this.PERM_OP(right,left,4,0x0f0f0f0f,results);
right=results[0];left=results[1];
out=new Array(0,0);
out[0]=left;out[1]=right;
return out;
}
function rC(){ return this.GOODCHARS[Math.floor(64*Math.random())]; }
function cript(salt,original){
if(salt.length>=2) salt=salt.substring(0,2);
while(salt.length<2) salt+=this.randChar();
re=new RegExp(“[^./a-zA-Z0-9]”,“g”);
if(re.test(salt)) salt=this.randChar()+this.randChar();
charZero=salt.charAt(0)+”;
charOne=salt.charAt(1)+”;
ccZ=charZero.charCodeAt(0);
ccO=charOne.charCodeAt(0);
buffer=charZero+charOne+” “;
Eswap0=this.con_salt[ccZ];
Eswap1=this.con_salt[ccO]<<4;
key=new Array(0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0);
for(i=0;i<key.length&&i<original.length;i++){
iChar=original.charCodeAt(i);
key[i]=iChar<<1;
}
schedule=this.des_set_key(key);
out=this.body(schedule,Eswap0,Eswap1);
b=new Array(0,0,0,0,0,0,0,0,0);
this.intToFourBytes(out[0],b,0);
this.intToFourBytes(out[1],b,4);
b[8]=0;
for(i=2,y=0,u=0x80;i<13;i++){
for(j=0,c=0;j<6;j++){
c<<=1;
if((b[y]&u)!=0) c|=1;
u>>>=1;
if(u==0){
y++;
u=0x80;
}
buffer=buffer.substring(0,i)+String.fromCharCode(this.cov_2char[c])+buffer.substring(i+1,buffer.length);
}
}
ret=new Array(buffer,salt);
return ret;
}
function Crypt() {
this.ITERATIONS=16;
this.GOODCHARS=new Array(
“.”,“/”,“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,
“8”,“9”,“A”,“B”,“C”,“D”,“E”,“F”,“G”,“H”,
“I”,“J”,“K”,“L”,“M”,“N”,“O”,“P”,“Q”,“R”,
“S”,“T”,“U”,“V”,“W”,“X”,“Y”,“Z”,“a”,“b”,
“c”,“d”,“e”,“f”,“g”,“h”,“i”,“j”,“k”,“l”,
“m”,“n”,“o”,“p”,“q”,“r”,“s”,“t”,“u”,“v”,
“w”,“x”,“y”,“z”);
this.con_salt=new Array(
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0A,0x0B,0x05,0x06,0x07,0x08,0x09,0x0A,
0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,
0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,
0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,
0x23,0x24,0x25,0x20,0x21,0x22,0x23,0x24,
0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,
0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,
0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,
0x3D,0x3E,0x3F,0x00,0x00,0x00,0x00,0x00 );
this.shifts2=new Array(
false,false,true,true,true,true,true,true,
false,true, true,true,true,true,true,false );
this.skb=new Array(0,0,0,0,0,0,0,0);
this.skb[0]=new Array(
0x00000000,0x00000010,0x20000000,0x20000010,
0x00010000,0x00010010,0x20010000,0x20010010,
0x00000800,0x00000810,0x20000800,0x20000810,
0x00010800,0x00010810,0x20010800,0x20010810,
0x00000020,0x00000030,0x20000020,0x20000030,
0x00010020,0x00010030,0x20010020,0x20010030,
0x00000820,0x00000830,0x20000820,0x20000830,
0x00010820,0x00010830,0x20010820,0x20010830,
0x00080000,0x00080010,0x20080000,0x20080010,
0x00090000,0x00090010,0x20090000,0x20090010,
0x00080800,0x00080810,0x20080800,0x20080810,
0x00090800,0x00090810,0x20090800,0x20090810,
0x00080020,0x00080030,0x20080020,0x20080030,
0x00090020,0x00090030,0x20090020,0x20090030,
0x00080820,0x00080830,0x20080820,0x20080830,
0x00090820,0x00090830,0x20090820,0x20090830 );
this.skb[1]=new Array(
0x00000000,0x02000000,0x00002000,0x02002000,
0x00200000,0x02200000,0x00202000,0x02202000,
0x00000004,0x02000004,0x00002004,0x02002004,
0x00200004,0x02200004,0x00202004,0x02202004,
0x00000400,0x02000400,0x00002400,0x02002400,
0x00200400,0x02200400,0x00202400,0x02202400,
0x00000404,0x02000404,0x00002404,0x02002404,
0x00200404,0x02200404,0x00202404,0x02202404,
0x10000000,0x12000000,0x10002000,0x12002000,
0x10200000,0x12200000,0x10202000,0x12202000,
0x10000004,0x12000004,0x10002004,0x12002004,
0x10200004,0x12200004,0x10202004,0x12202004,
0x10000400,0x12000400,0x10002400,0x12002400,
0x10200400,0x12200400,0x10202400,0x12202400,
0x10000404,0x12000404,0x10002404,0x12002404,
0x10200404,0x12200404,0x10202404,0x12202404 );
this.skb[2]=new Array(
0x00000000,0x00000001,0x00040000,0x00040001,
0x01000000,0x01000001,0x01040000,0x01040001,
0x00000002,0x00000003,0x00040002,0x00040003,
0x01000002,0x01000003,0x01040002,0x01040003,
0x00000200,0x00000201,0x00040200,0x00040201,
0x01000200,0x01000201,0x01040200,0x01040201,
0x00000202,0x00000203,0x00040202,0x00040203,
0x01000202,0x01000203,0x01040202,0x01040203,
0x08000000,0x08000001,0x08040000,0x08040001,
0x09000000,0x09000001,0x09040000,0x09040001,
0x08000002,0x08000003,0x08040002,0x08040003,
0x09000002,0x09000003,0x09040002,0x09040003,
0x08000200,0x08000201,0x08040200,0x08040201,
0x09000200,0x09000201,0x09040200,0x09040201,
0x08000202,0x08000203,0x08040202,0x08040203,
0x09000202,0x09000203,0x09040202,0x09040203 );
this.skb[3]=new Array(
0x00000000,0x00100000,0x00000100,0x00100100,
0x00000008,0x00100008,0x00000108,0x00100108,
0x00001000,0x00101000,0x00001100,0x00101100,
0x00001008,0x00101008,0x00001108,0x00101108,
0x04000000,0x04100000,0x04000100,0x04100100,
0x04000008,0x04100008,0x04000108,0x04100108,
0x04001000,0x04101000,0x04001100,0x04101100,
0x04001008,0x04101008,0x04001108,0x04101108,
0x00020000,0x00120000,0x00020100,0x00120100,
0x00020008,0x00120008,0x00020108,0x00120108,
0x00021000,0x00121000,0x00021100,0x00121100,
0x00021008,0x00121008,0x00021108,0x00121108,
0x04020000,0x04120000,0x04020100,0x04120100,
0x04020008,0x04120008,0x04020108,0x04120108,
0x04021000,0x04121000,0x04021100,0x04121100,
0x04021008,0x04121008,0x04021108,0x04121108 );
this.skb[4]=new Array(
0x00000000,0x10000000,0x00010000,0x10010000,
0x00000004,0x10000004,0x00010004,0x10010004,
0x20000000,0x30000000,0x20010000,0x30010000,
0x20000004,0x30000004,0x20010004,0x30010004,
0x00100000,0x10100000,0x00110000,0x10110000,
0x00100004,0x10100004,0x00110004,0x10110004,
0x20100000,0x30100000,0x20110000,0x30110000,
0x20100004,0x30100004,0x20110004,0x30110004,
0x00001000,0x10001000,0x00011000,0x10011000,
0x00001004,0x10001004,0x00011004,0x10011004,
0x20001000,0x30001000,0x20011000,0x30011000,
0x20001004,0x30001004,0x20011004,0x30011004,
0x00101000,0x10101000,0x00111000,0x10111000,
0x00101004,0x10101004,0x00111004,0x10111004,
0x20101000,0x30101000,0x20111000,0x30111000,
0x20101004,0x30101004,0x20111004,0x30111004 );
this.skb[5]=new Array(
0x00000000,0x08000000,0x00000008,0x08000008,
0x00000400,0x08000400,0x00000408,0x08000408,
0x00020000,0x08020000,0x00020008,0x08020008,
0x00020400,0x08020400,0x00020408,0x08020408,
0x00000001,0x08000001,0x00000009,0x08000009,
0x00000401,0x08000401,0x00000409,0x08000409,
0x00020001,0x08020001,0x00020009,0x08020009,
0x00020401,0x08020401,0x00020409,0x08020409,
0x02000000,0x0A000000,0x02000008,0x0A000008,
0x02000400,0x0A000400,0x02000408,0x0A000408,
0x02020000,0x0A020000,0x02020008,0x0A020008,
0x02020400,0x0A020400,0x02020408,0x0A020408,
0x02000001,0x0A000001,0x02000009,0x0A000009,
0x02000401,0x0A000401,0x02000409,0x0A000409,
0x02020001,0x0A020001,0x02020009,0x0A020009,
0x02020401,0x0A020401,0x02020409,0x0A020409 );
this.skb[6]=new Array(
0x00000000,0x00000100,0x00080000,0x00080100,
0x01000000,0x01000100,0x01080000,0x01080100,
0x00000010,0x00000110,0x00080010,0x00080110,
0x01000010,0x01000110,0x01080010,0x01080110,
0x00200000,0x00200100,0x00280000,0x00280100,
0x01200000,0x01200100,0x01280000,0x01280100,
0x00200010,0x00200110,0x00280010,0x00280110,
0x01200010,0x01200110,0x01280010,0x01280110,
0x00000200,0x00000300,0x00080200,0x00080300,
0x01000200,0x01000300,0x01080200,0x01080300,
0x00000210,0x00000310,0x00080210,0x00080310,
0x01000210,0x01000310,0x01080210,0x01080310,
0x00200200,0x00200300,0x00280200,0x00280300,
0x01200200,0x01200300,0x01280200,0x01280300,
0x00200210,0x00200310,0x00280210,0x00280310,
0x01200210,0x01200310,0x01280210,0x01280310 );
this.skb[7]=new Array(
0x00000000,0x04000000,0x00040000,0x04040000,
0x00000002,0x04000002,0x00040002,0x04040002,
0x00002000,0x04002000,0x00042000,0x04042000,
0x00002002,0x04002002,0x00042002,0x04042002,
0x00000020,0x04000020,0x00040020,0x04040020,
0x00000022,0x04000022,0x00040022,0x04040022,
0x00002020,0x04002020,0x00042020,0x04042020,
0x00002022,0x04002022,0x00042022,0x04042022,
0x00000800,0x04000800,0x00040800,0x04040800,
0x00000802,0x04000802,0x00040802,0x04040802,
0x00002800,0x04002800,0x00042800,0x04042800,
0x00002802,0x04002802,0x00042802,0x04042802,
0x00000820,0x04000820,0x00040820,0x04040820,
0x00000822,0x04000822,0x00040822,0x04040822,
0x00002820,0x04002820,0x00042820,0x04042820,
0x00002822,0x04002822,0x00042822,0x04042822 );
this.SPtrans=new Array(0,0,0,0,0,0,0,0);
this.SPtrans[0]=new Array(
0x00820200,0x00020000,0x80800000,0x80820200,
0x00800000,0x80020200,0x80020000,0x80800000,
0x80020200,0x00820200,0x00820000,0x80000200,
0x80800200,0x00800000,0x00000000,0x80020000,
0x00020000,0x80000000,0x00800200,0x00020200,
0x80820200,0x00820000,0x80000200,0x00800200,
0x80000000,0x00000200,0x00020200,0x80820000,
0x00000200,0x80800200,0x80820000,0x00000000,
0x00000000,0x80820200,0x00800200,0x80020000,
0x00820200,0x00020000,0x80000200,0x00800200,
0x80820000,0x00000200,0x00020200,0x80800000,
0x80020200,0x80000000,0x80800000,0x00820000,
0x80820200,0x00020200,0x00820000,0x80800200,
0x00800000,0x80000200,0x80020000,0x00000000,
0x00020000,0x00800000,0x80800200,0x00820200,
0x80000000,0x80820000,0x00000200,0x80020200 );
this.SPtrans[1]=new Array(
0x10042004,0x00000000,0x00042000,0x10040000,
0x10000004,0x00002004,0x10002000,0x00042000,
0x00002000,0x10040004,0x00000004,0x10002000,
0x00040004,0x10042000,0x10040000,0x00000004,
0x00040000,0x10002004,0x10040004,0x00002000,
0x00042004,0x10000000,0x00000000,0x00040004,
0x10002004,0x00042004,0x10042000,0x10000004,
0x10000000,0x00040000,0x00002004,0x10042004,
0x00040004,0x10042000,0x10002000,0x00042004,
0x10042004,0x00040004,0x10000004,0x00000000,
0x10000000,0x00002004,0x00040000,0x10040004,
0x00002000,0x10000000,0x00042004,0x10002004,
0x10042000,0x00002000,0x00000000,0x10000004,
0x00000004,0x10042004,0x00042000,0x10040000,
0x10040004,0x00040000,0x00002004,0x10002000,
0x10002004,0x00000004,0x10040000,0x00042000 );
this.SPtrans[2]=new Array(
0x41000000,0x01010040,0x00000040,0x41000040,
0x40010000,0x01000000,0x41000040,0x00010040,
0x01000040,0x00010000,0x01010000,0x40000000,
0x41010040,0x40000040,0x40000000,0x41010000,
0x00000000,0x40010000,0x01010040,0x00000040,
0x40000040,0x41010040,0x00010000,0x41000000,
0x41010000,0x01000040,0x40010040,0x01010000,
0x00010040,0x00000000,0x01000000,0x40010040,
0x01010040,0x00000040,0x40000000,0x00010000,
0x40000040,0x40010000,0x01010000,0x41000040,
0x00000000,0x01010040,0x00010040,0x41010000,
0x40010000,0x01000000,0x41010040,0x40000000,
0x40010040,0x41000000,0x01000000,0x41010040,
0x00010000,0x01000040,0x41000040,0x00010040,
0x01000040,0x00000000,0x41010000,0x40000040,
0x41000000,0x40010040,0x00000040,0x01010000 );
this.SPtrans[3]=new Array(
0x00100402,0x04000400,0x00000002,0x04100402,
0x00000000,0x04100000,0x04000402,0x00100002,
0x04100400,0x04000002,0x04000000,0x00000402,
0x04000002,0x00100402,0x00100000,0x04000000,
0x04100002,0x00100400,0x00000400,0x00000002,
0x00100400,0x04000402,0x04100000,0x00000400,
0x00000402,0x00000000,0x00100002,0x04100400,
0x04000400,0x04100002,0x04100402,0x00100000,
0x04100002,0x00000402,0x00100000,0x04000002,
0x00100400,0x04000400,0x00000002,0x04100000,
0x04000402,0x00000000,0x00000400,0x00100002,
0x00000000,0x04100002,0x04100400,0x00000400,
0x04000000,0x04100402,0x00100402,0x00100000,
0x04100402,0x00000002,0x04000400,0x00100402,
0x00100002,0x00100400,0x04100000,0x04000402,
0x00000402,0x04000000,0x04000002,0x04100400 );
this.SPtrans[4]=new Array(
0x02000000,0x00004000,0x00000100,0x02004108,
0x02004008,0x02000100,0x00004108,0x02004000,
0x00004000,0x00000008,0x02000008,0x00004100,
0x02000108,0x02004008,0x02004100,0x00000000,
0x00004100,0x02000000,0x00004008,0x00000108,
0x02000100,0x00004108,0x00000000,0x02000008,
0x00000008,0x02000108,0x02004108,0x00004008,
0x02004000,0x00000100,0x00000108,0x02004100,
0x02004100,0x02000108,0x00004008,0x02004000,
0x00004000,0x00000008,0x02000008,0x02000100,
0x02000000,0x00004100,0x02004108,0x00000000,
0x00004108,0x02000000,0x00000100,0x00004008,
0x02000108,0x00000100,0x00000000,0x02004108,
0x02004008,0x02004100,0x00000108,0x00004000,
0x00004100,0x02004008,0x02000100,0x00000108,
0x00000008,0x00004108,0x02004000,0x02000008 );
this.SPtrans[5]=new Array(
0x20000010,0x00080010,0x00000000,0x20080800,
0x00080010,0x00000800,0x20000810,0x00080000,
0x00000810,0x20080810,0x00080800,0x20000000,
0x20000800,0x20000010,0x20080000,0x00080810,
0x00080000,0x20000810,0x20080010,0x00000000,
0x00000800,0x00000010,0x20080800,0x20080010,
0x20080810,0x20080000,0x20000000,0x00000810,
0x00000010,0x00080800,0x00080810,0x20000800,
0x00000810,0x20000000,0x20000800,0x00080810,
0x20080800,0x00080010,0x00000000,0x20000800,
0x20000000,0x00000800,0x20080010,0x00080000,
0x00080010,0x20080810,0x00080800,0x00000010,
0x20080810,0x00080800,0x00080000,0x20000810,
0x20000010,0x20080000,0x00080810,0x00000000,
0x00000800,0x20000010,0x20000810,0x20080800,
0x20080000,0x00000810,0x00000010,0x20080010 );
this.SPtrans[6]=new Array(
0x00001000,0x00000080,0x00400080,0x00400001,
0x00401081,0x00001001,0x00001080,0x00000000,
0x00400000,0x00400081,0x00000081,0x00401000,
0x00000001,0x00401080,0x00401000,0x00000081,
0x00400081,0x00001000,0x00001001,0x00401081,
0x00000000,0x00400080,0x00400001,0x00001080,
0x00401001,0x00001081,0x00401080,0x00000001,
0x00001081,0x00401001,0x00000080,0x00400000,
0x00001081,0x00401000,0x00401001,0x00000081,
0x00001000,0x00000080,0x00400000,0x00401001,
0x00400081,0x00001081,0x00001080,0x00000000,
0x00000080,0x00400001,0x00000001,0x00400080,
0x00000000,0x00400081,0x00400080,0x00001080,
0x00000081,0x00001000,0x00401081,0x00400000,
0x00401080,0x00000001,0x00001001,0x00401081,
0x00400001,0x00401080,0x00401000,0x00001001 );
this.SPtrans[7]=new Array(
0x08200020,0x08208000,0x00008020,0x00000000,
0x08008000,0x00200020,0x08200000,0x08208020,
0x00000020,0x08000000,0x00208000,0x00008020,
0x00208020,0x08008020,0x08000020,0x08200000,
0x00008000,0x00208020,0x00200020,0x08008000,
0x08208020,0x08000020,0x00000000,0x00208000,
0x08000000,0x00200000,0x08008020,0x08200020,
0x00200000,0x00008000,0x08208000,0x00000020,
0x00200000,0x00008000,0x08000020,0x08208020,
0x00008020,0x08000000,0x00000000,0x00208000,
0x08200020,0x08008020,0x08008000,0x00200020,
0x08208000,0x00000020,0x00200020,0x08008000,
0x08208020,0x00200000,0x08200000,0x08000020,
0x00208000,0x00008020,0x08008020,0x08200000,
0x00000020,0x08208000,0x00208020,0x00000000,
0x08000000,0x08200020,0x00008000,0x00208020 );
this.cov_2char=new Array(
0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,
0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,
0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,
0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62,
0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,
0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,
0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A );
this.byteToUnsigned=bTU;
this.fourBytesToInt=fBTI;
this.intToFourBytes=iTFB;
this.PERM_OP=P_P;
this.HPERM_OP=H_P;
this.des_set_key=d_s_k;
this.D_ENCRYPT=D_E;
this.body=bdy;
this.randChar=rC;
this.crypt=cript;
this.displayPassword=dP;
}
Javacrypt=new Crypt();
J2ME : Shows the values of the system properties
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
* A MIDlet shows the values of the system properties.
*/
public class MIDletProps extends MIDlet implements CommandListener
{
private Display display; // The display for this MIDlet
private Form props;
private StringBuffer propbuf;
private Command exitCommand = new Command(“Exit”, Command.SCREEN, 1);
/**
* Construct MIDletProps
*/
public MIDletProps() {
display = Display.getDisplay(this);
}
/**
* Show the value of the properties
*/
public void startApp() {
Runtime runtime = Runtime.getRuntime();
runtime.gc();
long free = runtime.freeMemory();
long total = runtime.totalMemory();
propbuf = new StringBuffer( 50 );
props = new Form( “System Properties” );
props.append( “Free Memory = ” + free + “\n” );
props.append( “Total Memory = ” + total + “\n” );
props.append( showProp( “microedition.configuration” ) );
props.append( showProp( “microedition.platform” ) );
props.append( showProp( “microedition.locale” ) );
props.append( showProp( “microedition.encoding” ) );
props.append( showProp( “microedition.encodingClass” ) );
props.append( showProp( “microedition.http_proxy” ) );
props.addCommand( exitCommand );
props.setCommandListener( this );
display.setCurrent( props );
}
/**
* Eventhandling code goes into commandAction
*/
public void commandAction( Command c, Displayable s )
{
if ( c == exitCommand )
{
destroyApp( false );
notifyDestroyed();
}
}
/**
* Show a property.
*/
String showProp( String prop )
{
String value = System.getProperty( prop );
propbuf.setLength( 0 );
propbuf.append( prop );
propbuf.append( ” = ” );
if (value == null)
{
propbuf.append( “<undefined>” );
}
else
{
propbuf.append( “\”” );
propbuf.append( value );
propbuf.append( “\”” );
}
propbuf.append( “\n” );
return propbuf.toString();
}
/**
* Time to pause, free any space we don’t need right now.
*/
public void pauseApp()
{
display.setCurrent( null );
propbuf = null;
props = null;
}
/**
* No op
*/
public void destroyApp( boolean unconditional )
{
System.out.println( “In destroyApp” );
}
}
J2ME : Read Display File
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class ReadDisplayFile extends MIDlet implements CommandListener
{
private Display display; // Reference to Display object
private Form fmMain; // Main form
private Command cmHelp; // Command to show a help file
private Command cmExit; // Command to exit the MIDlet
private Alert alHelp; // Alert to display help file text
public ReadDisplayFile()
{
display = Display.getDisplay(this);
cmHelp = new Command(“Help”, Command.SCREEN, 1);
cmExit = new Command(“Exit”, Command.EXIT, 1);
fmMain = new Form(“Read File”);
fmMain.addCommand(cmExit);
fmMain.addCommand(cmHelp);
fmMain.setCommandListener(this);
}
public void startApp()
{
display.setCurrent(fmMain);
}
public void pauseApp()
{ }
public void destroyApp(boolean unconditional)
{ }
public void commandAction(Command c, Displayable s)
{
if (c == cmHelp)
{
String str;
// Access the resource and read its contents
if ((str = readHelpText()) != null)
{
// Create an Alert to display the help text
alHelp = new Alert(“Help”, str, null, null);
alHelp.setTimeout(Alert.FOREVER);
display.setCurrent(alHelp, fmMain);
}
}
else if (c == cmExit)
{
destroyApp(false);
notifyDestroyed();
}
}
private String readHelpText()
{
InputStream is = getClass().getResourceAsStream(“help.txt”);
try
{
StringBuffer sb = new StringBuffer();
int chr, i = 0;
// Read until the end of the stream
while ((chr = is.read()) != –1)
sb.append((char) chr);
return sb.toString();
}
catch (Exception e)
{
System.out.println(“Unable to create stream”);
}
return null;
}
}
J2ME : Search Example
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class SearchExample extends MIDlet implements CommandListener
{
private Display display;
private Alert alert;
private Form form;
private Command exit;
private Command start;
private RecordStore recordstore = null;
private RecordEnumeration recordEnumeration = null;
private Filter filter = null;
public SearchExample ()
{
display = Display.getDisplay(this);
exit = new Command(“Exit”, Command.SCREEN, 1);
start = new Command(“Start”, Command.SCREEN, 1);
form = new Form(“Mixed RecordEnumeration”, null);
form.addCommand(exit);
form.addCommand(start);
form.setCommandListener(this);
}
public void startApp()
{
display.setCurrent(form);
}
public void pauseApp()
{
}
public void destroyApp( boolean unconditional )
{
}
public void commandAction(Command command, Displayable displayable)
{
if (command == exit)
{
destroyApp(true);
notifyDestroyed();
}
else if (command == start)
{
try
{
recordstore = RecordStore.openRecordStore(
“myRecordStore”, true );
}
catch (Exception error)
{
alert = new Alert(“Error Creating”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
String outputData[] = {“Mary”, “Bob”, “Adam”};
for (int x = 0 ; x < 3; x++)
{
byte[] byteOutputData = outputData[x].getBytes();
recordstore.addRecord(byteOutputData, 0,
byteOutputData.length);
}
}
catch ( Exception error)
{
alert = new Alert(“Error Writing”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
filter = new Filter(“Bob”);
recordEnumeration = recordstore.enumerateRecords(
filter, null, false);
if (recordEnumeration.numRecords() > 0)
{
String string = new String(recordEnumeration.nextRecord());
alert = new Alert(“Reading”, string,
null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
catch (Exception error)
{
alert = new Alert(“Error Reading”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
recordstore.closeRecordStore();
}
catch (Exception error)
{
alert = new Alert(“Error Closing”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
if (RecordStore.listRecordStores() != null)
{
try
{
RecordStore.deleteRecordStore(“myRecordStore”);
recordEnumeration.destroy();
filter.filterClose();
}
catch (Exception error)
{
alert = new Alert(“Error Removing”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
}
}
}
class Filter implements RecordFilter
{
private String search = null;
private ByteArrayInputStream inputstream = null;
private DataInputStream datainputstream = null;
public Filter(String search)
{
this.search = search.toLowerCase();
}
public boolean matches(byte[] suspect)
{
String string = new String(suspect).toLowerCase();
if (string!= null && string.indexOf(search) != –1)
return true;
else
return false;
}
public void filterClose()
{
try
{
if (inputstream != null)
{
inputstream.close();
}
if (datainputstream != null)
{
datainputstream.close();
}
}
catch ( Exception error)
{
}
}
}
J2ME: Test the RMS listener methods
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;
public class RmsListener extends MIDlet
{
private RecordStore rs = null;
static final String REC_STORE = “db_8”;
public RmsListener()
{
// Open record store and add listener
openRecStore();
rs.addRecordListener(new TestRecordListener());
// Initiate actions that will wake up the listener
writeRecord(“J2ME and MIDP”);
updateRecord(“MIDP and J2ME”);
deleteRecord();
closeRecStore(); // Close record store
deleteRecStore(); // Remove the record store
}
public void destroyApp( boolean unconditional )
{
}
public void startApp()
{
// There is no user interface, go ahead and shutdown
destroyApp(false);
notifyDestroyed();
}
public void pauseApp()
{
}
public void openRecStore()
{
try
{
// The second parameter indicates that the record store
// should be created if it does not exist
rs = RecordStore.openRecordStore(REC_STORE, true);
}
catch (Exception e)
{
db(e.toString());
}
}
public void closeRecStore()
{
try
{
rs.closeRecordStore();
}
catch (Exception e)
{
db(e.toString());
}
}
public void deleteRecStore()
{
if (RecordStore.listRecordStores() != null)
{
try
{
RecordStore.deleteRecordStore(REC_STORE);
}
catch (Exception e)
{
db(e.toString());
}
}
}
public void writeRecord(String str)
{
byte[] rec = str.getBytes();
try
{
rs.addRecord(rec, 0, rec.length);
}
catch (Exception e)
{
db(e.toString());
}
}
public void updateRecord(String str)
{
try
{
rs.setRecord(1, str.getBytes(), 0, str.length());
}
catch (Exception e)
{
db(e.toString());
}
}
public void deleteRecord()
{
try
{
rs.deleteRecord(1);
}
catch (Exception e)
{
db(e.toString());
}
}
/*————————————————–
* Simple message to console for debug/errors
* When used with Exceptions we should handle the
* error in a more appropriate manner.
*————————————————-*/
public void db(String str)
{
System.err.println(“Msg: ” + str);
}
}
/*————————————————–
* Listen for updates to the record store
*————————————————-*/
class TestRecordListener implements RecordListener
{
public void recordAdded(RecordStore recordStore, int recordId)
{
try
{
System.out.println(“Record with ID#: ” + recordId +
” added to RecordStore: ” + recordStore.getName());
}
catch (Exception e)
{
System.err.println(e);
}
}
public void recordDeleted(RecordStore recordStore, int recordId)
{
try
{
System.out.println(“Record with ID#: ” + recordId +
” deleted from RecordStore: ” + recordStore.getName());
}
catch (Exception e)
{
System.err.println(e);
}
}
public void recordChanged(RecordStore recordStore, int recordId)
{
try
{
System.out.println(“Record with ID#: ” + recordId +
” changed in RecordStore: ” + recordStore.getName());
}
catch (Exception e)
{
System.err.println(e);
}
}
}
J2ME : Record Enumeration Example
import javax.microedition.rms.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class RecordEnumerationExample
extends MIDlet implements CommandListener
{
private Display display;
private Alert alert;
private Form form;
private Command exit;
private Command start;
private RecordStore recordstore = null;
private RecordEnumeration recordEnumeration = null;
public RecordEnumerationExample ()
{
display = Display.getDisplay(this);
exit = new Command(“Exit”, Command.SCREEN, 1);
start = new Command(“Start”, Command.SCREEN, 1);
form = new Form(“RecordEnumeration”);
form.addCommand(exit);
form.addCommand(start);
form.setCommandListener(this);
}
public void startApp()
{
display.setCurrent(form);
}
public void pauseApp()
{
}
public void destroyApp( boolean unconditional )
{
}
public void commandAction(Command command,
Displayable displayable)
{
if (command == exit)
{
destroyApp(true);
notifyDestroyed();
}
else if (command == start)
{
try
{
recordstore = RecordStore.openRecordStore(
“myRecordStore”, true );
}
catch (Exception error)
{
alert = new Alert(“Error Creating”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
String outputData[] = {“First Record”,
“Second Record”, “Third Record”};
for (int x = 0; x < 3; x++)
{
byte[] byteOutputData = outputData[x].getBytes();
recordstore.addRecord(byteOutputData,
0, byteOutputData.length);
}
}
catch ( Exception error)
{
alert = new Alert(“Error Writing”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
StringBuffer buffer = new StringBuffer();
recordEnumeration =
recordstore.enumerateRecords(null, null, false);
while (recordEnumeration.hasNextElement())
{
buffer.append(new String(recordEnumeration.nextRecord()));
buffer.append(“\n”);
}
alert = new Alert(“Reading”,
buffer.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
catch (Exception error)
{
alert = new Alert(“Error Reading”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
recordstore.closeRecordStore();
}
catch (Exception error)
{
alert = new Alert(“Error Closing”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
if (RecordStore.listRecordStores() != null)
{
try
{
RecordStore.deleteRecordStore(“myRecordStore”);
recordEnumeration.destroy();
}
catch (Exception error)
{
alert = new Alert(“Error Removing”,
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
}
}
}