home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / timesync.zip / timesync.cmd next >
OS/2 REXX Batch file  |  2001-04-09  |  9KB  |  329 lines

  1. /******************************************************
  2. Webé┼PCé╠Ä₧ìÅìçéφé╣ü⌠ for OS/2
  3.                       Ver 1.0    2001.Apr.09 by Achain
  4. ******************************************************/
  5.  
  6. /********************************************************
  7. É┌æ▒ɵWebâyü[âWé╠É▌ÆΦ
  8.   ô·Ä₧é≡ô╟é▌Åoé╖Weâyü[âWé≡É▌ÆΦé╡é▄é╖üDâTü[âoü[é╠Ä₧ìÅé¬é┐éßé±é╞
  9.   É│é╡é¡É▌ÆΦé│éΩé─é¿éΦüCé⌐é┬âAâNâZâXé╔Ä₧è╘é╠é⌐é⌐éτé╚éóâyü[âWé≡
  10.   ùÿùpé╡é▄é╡éσéñüD
  11.   ùßüF http://www.google.com/  é≡ùpéóéΘÅΩìçé═
  12.         server = 'www.google.com'
  13.         port   = 80
  14.         page   = '/'
  15.   é╞é╡é▄é╖üD
  16. ********************************************************/
  17. server      = 'www.google.com'
  18. port        = 80
  19. page        = '/'
  20. /********************************************************
  21. http proxyé╠É▌ÆΦ
  22.   http proxy é≡Ägùpé╖éΘÅΩìçé═
  23.         proxy     = 'âzâXâgû╝éαé╡é¡é═IPâAâhâîâX'
  24.         proxyport = â|ü[âgö╘ìå
  25.   é╞é╡é▄é╖üDhttp proxyé≡Ägùpé╡é╚éóÅΩìçé═
  26.         proxy     = ''
  27.         proxyport = ôKôûé╚ÉöÄÜ
  28.   é╞é╡é─é¡é╛é│éóüD
  29. ********************************************************/
  30. proxy       = ''
  31. proxyport   = 8080
  32. /********************************************************
  33. âOâèâjâbâWòWÅÇÄ₧é⌐éτé╠Ä₧è╘ì╖é╠É▌ÆΦ
  34.   ô·û{é╚éτ +9 é╔é╚éΦé▄é╖üD
  35. ********************************************************/
  36. timeoffset  = +9
  37. /********************************************************/
  38.  
  39.  
  40.  
  41. /********************************************************/
  42. /* âüâCâôâïü[â`âô                                       */
  43. /********************************************************/
  44.  
  45. /* REXX Socketsè╓ÉöîQé≡âìü[âhé╖éΘ */
  46. if RxFuncQuery('SockLoadFuncs') then do
  47.   call RxFuncAdd 'SockLoadFuncs','RxSock','SockLoadFuncs'
  48.   call SockLoadFuncs
  49. end
  50.  
  51. parse arg argv
  52. argv = translate(argv)
  53.  
  54. /* ò╧Éöé╠Åëè·ë╗ */
  55. recbuf   = ''          /* Ä≤ÉMâoâbâtâ@ */
  56. rectxt   = ''          /* ìsâoâbâtâ@ */
  57. crlf     = '0d0a'x     /* ëⁿìsâRü[âh */
  58. status   = 0
  59.  
  60. /* Ctrl+Cé╚é╟é╔éµéΘÆåÆfÄ₧é╔EndProcessé╔ö≥é╘éµéñé╔é╖éΘ */
  61. signal on halt name EndProcess
  62.  
  63. /* É┌æ▒ɵâzâXâgé╠Åεò±é≡ÅÇö⌡é╖éΘ */
  64. if proxy \= '' then do
  65.     /* proxyé¬ï≤ò╢ÄÜù±é┼é╚é»éΩé╬http proxyé╞î⌐é╚é╡é─é╗éΩé≡Ägùpé╖éΘ */
  66.     hostname = proxy
  67.     hostport = proxyport
  68. end
  69. else do
  70.     /* É┌æ▒âTü[âoü[é╔â_âCâîâNâgé╔É┌æ▒é╖éΘ */
  71.     hostname = server
  72.     hostport = port
  73. end
  74.  
  75. /* É┌æ▒ɵâzâXâgû╝é¬ÉöÄÜé╞âsâèâIâhé╠é▌é╚éτIPâAâhâîâX */
  76. if verify(hostname, '0123456789.') = 0 then
  77.     rc = SockGetHostByAddr(hostname, 'host.!')
  78. else
  79.     rc = SockGetHostByName(hostname, 'host.!')
  80.  
  81. if rc = 0 then do
  82.     say 'Unknown host [' || hostname || ']'
  83.     exit 1
  84. end
  85.  
  86. /* â\âPâbâgé≡ùpê╙é╖éΘ */
  87. sock = SockSocket('AF_INET','SOCK_STREAM',0 )
  88. if sock < 0 then do
  89.     say 'SocketError'
  90.     exit 2
  91. end
  92.  
  93. /* WebâTü[âoü[é╔É┌æ▒é╖éΘ */
  94. address.!family = 'AF_INET'
  95. address.!port = hostport
  96. address.!addr = host.!addr
  97. rc = SockConnect(sock, 'address.!')
  98. if rc < 0 then do
  99.   say 'Cannot connect host [' || hostname || ']'
  100.   rc = SockSoClose(sock)
  101.   exit 3
  102. end
  103.  
  104. /* æùÉMé╖éΘâfü[â^é≡ÅÇö⌡é╖éΘ */
  105. if proxy \= '' then 
  106.     sdata = 'HEAD http://'||server||':'||port||page||' HTTP/1.0'||crlf
  107. else
  108.     sdata = 'HEAD '||page||' HTTP/1.0'||crlf
  109.  
  110. sdata = sdata || 'Connection: close' || crlf
  111. sdata = sdata || 'User-Agent: TimerSync/2 (OS/2; U)' || crlf
  112. sdata = sdata || 'Host: ' || server || crlf
  113. sdata = sdata || 'Accept: */*' || crlf
  114. sdata = sdata || 'Accept-Language: en' || crlf
  115. sdata = sdata || 'Accept-Charset: iso-8859-1,*,utf-8' || crlf
  116.  
  117. /* âfü[â^é≡æùÉMé╖éΘ */
  118. rc = SendString(sdata)
  119.  
  120. /* âfü[â^é≡Ä≤ÉMé╖éΘ */
  121. receivedDateTime = 0
  122. do forever
  123.     rc = RecvString()
  124.     if rc = -1 then exit 4
  125.     if rectxt = '' then LEAVE
  126.     /* Ä≤ÉMâfü[â^é╠Æåé╠ô·Ä₧âfü[â^é≡éαé╞é╔PCé╠Ä₧ìÅé≡É▌ÆΦé╖éΘ */
  127.     rc = GetDateTime(argv)
  128.     receivedDateTime = receivedDateTime | rc
  129. end
  130.  
  131. if receivedDateTime = 0 then do
  132.     say 'Data from host does not contain Data: line'
  133.     status = 5
  134. end
  135.  
  136. EndProcess:
  137. /* Æ╩ÉMé≡Ä╒Æfé╡üDâ\âPâbâgé≡öjèⁿé╖éΘ */
  138. rc = SockShutDown(sock, 2)
  139. rc = SockSoClose(sock)
  140.  
  141. /* âvâìâOâëâÇÅIù╣ */
  142. exit status
  143.  
  144. /******************************************************
  145.   Ä≤ÉMé╡é╜âfü[â^é⌐éτô·Ä₧âfü[â^é≡ÆTé╡üCî⌐é┬é⌐é┴é╜ÅΩìçé═
  146.   é╗éΩé≡éαé╞é╔PCé╠Ä₧ìÅé≡É▌ÆΦé╖éΘâTâuâïü[â`âô
  147.   òKùvé╚é╠é═üCâTü[âoü[é⌐éτÄ≤ÉMé╡é╜ò╢ÄÜù±é╠Æåé╠
  148.   "Date: Sat, 07 Apr 2001 16:04:06 GMT" é╞éóéñìsé┼éáéΘüD
  149.   ìsé¬î⌐é┬é⌐éΦÄ₧ìÅÉ▌ÆΦé≡é╡é╜éτû▀éΦÆlé═1
  150.   ìsé¬î⌐é┬é⌐éτé╚é⌐é┴é╜éτû▀éΦÆlé═0
  151. ******************************************************/
  152. GetDateTime:
  153. procedure expose rectxt timeoffset
  154. parse arg argv
  155. po = pos('Date: ', rectxt)
  156. if po = 0 then return 0
  157.  
  158. /* ìsé¬î⌐é┬é⌐é┴é╜éτò¬ë≡é╖éΘ */
  159. ct.mday   = format(substr(rectxt, po + 11, 2))
  160. ct.smon   = substr(rectxt, po + 14, 3)
  161. ct.year   = format(substr(rectxt, po + 18, 4))
  162. ct.hour   = format(substr(rectxt, po + 23, 2))
  163. ct.min    = format(substr(rectxt, po + 26, 2))
  164. ct.sec    = format(substr(rectxt, po + 29, 2))
  165. /* îÄé╠û╝æOé≡ÉöÄÜé╔ò╧è╖é╖éΘ */
  166. select
  167.     when ct.smon = 'Jan' then ct.mon = 1
  168.     when ct.smon = 'Feb' then ct.mon = 2
  169.     when ct.smon = 'Mar' then ct.mon = 3
  170.     when ct.smon = 'Apr' then ct.mon = 4
  171.     when ct.smon = 'May' then ct.mon = 5
  172.     when ct.smon = 'Jun' then ct.mon = 6
  173.     when ct.smon = 'Jul' then ct.mon = 7
  174.     when ct.smon = 'Aug' then ct.mon = 8
  175.     when ct.smon = 'Sep' then ct.mon = 9
  176.     when ct.smon = 'Oct' then ct.mon = 10
  177.     when ct.smon = 'Nov' then ct.mon = 11
  178.     when ct.smon = 'Dec' then ct.mon = 12
  179. otherwise
  180. end
  181.  
  182. /* GMTé≡âìü[âJâïâ^âCâÇé╔é╖éΘ */
  183. call GetLocalTimeFromGMT
  184.  
  185. cdate = date('S')
  186. cdate = insert('-', cdate, 4)
  187. cdate = insert('-', cdate, 7)
  188. ctime = time('N')
  189. st.date = ct.year || '-' || ct.mon || '-' || ct.mday
  190. st.time = ct.hour || ':' || ct.min || ':' || ct.sec
  191. say 'adjust date/time from ['cdate' 'ctime'] to ['st.date' 'st.time']'
  192. if argv \= 'DUMMY' then do
  193.     '@date ' || st.date
  194.     '@time ' || st.time
  195.     say 'Adjusted.'
  196. end
  197. return 1
  198.  
  199. /******************************************************
  200.   GMTé≡âìü[âJâïâ^âCâÇé╔é╖éΘâTâuâïü[â`âô
  201. ******************************************************/
  202. GetLocalTimeFromGMT:
  203. procedure expose ct. timeoffset
  204. mdays.1  = 31
  205. mdays.2  = 28 + GetYearLeaped(ct.year)
  206. mdays.3  = 31
  207. mdays.4  = 30
  208. mdays.5  = 31
  209. mdays.6  = 30
  210. mdays.7  = 31
  211. mdays.8  = 31
  212. mdays.9  = 30
  213. mdays.10 = 31
  214. mdays.11 = 30
  215. mdays.12 = 31
  216.  
  217. ct.hour = ct.hour + timeoffset
  218. cmonth = ct.mon
  219. if ct.hour >= 24 then do
  220.     ct.hour = ct.hour - 24
  221.     ct.mday = ct.mday + 1
  222.     if ct.mday > mdays.cmonth then do
  223.         ct.mday = 1
  224.         ct.mon = ct.mon + 1
  225.         if ct.mon > 12 then do
  226.             ct.mon = 1
  227.             ct.year = ct.year + 1
  228.         end
  229.     end
  230. end
  231. if ct.hour < 0 then do
  232.     ct.hour = ct.hour + 24
  233.     ct.mday = ct.mday - 1
  234.     if ct.mday < 1 then do
  235.         cmonth = cmonth - 1
  236.         if cmonth < 1 then do
  237.             cmonth = 12
  238.             ct.year = ct.year - 1
  239.         end
  240.         ct.mon = cmonth
  241.         ct.mday = mdays.cmonth
  242.     end
  243. end
  244.  
  245. ct.mday = right(ct.mday, 2, '0')
  246. ct.mon  = right(ct.mon,  2, '0')
  247. ct.year = right(ct.year, 4, '0')
  248. ct.hour = right(ct.hour, 2, '0')
  249. ct.min  = right(ct.min,  2, '0')
  250. ct.sec = right(ct.sec,  2, '0')
  251. return 0
  252.  
  253.  
  254. /******************************************************
  255.   ë[öNé≡ö╗ÆΦé╖éΘâuâïü[â`âô
  256.  
  257.   ôné│éΩé╜É╝ù∩öNé¬ë[öNé╚éτ1é≡ò╘é╖üD
  258.   é╗éΩê╚èOé╠ÅΩìçé═0é≡ò╘é╖üD
  259. ******************************************************/
  260. GetYearLeaped:
  261. procedure
  262. parse arg year
  263. leaped = 0
  264.  
  265. if year // 4 = 0 then do
  266.   if year // 100 = 0 then do
  267.     if year // 400 = 0 then do
  268.       leaped = 1
  269.     end
  270.     else leaped = 0
  271.   end
  272.   else leaped = 1
  273. end
  274. else leaped = 0
  275. return leaped
  276.  
  277. /******************************************************
  278.   âlâbâgâÅü[âNé⌐éτêΩìsé≡Ä≤ÉMé╖éΘâTâuâïü[â`âô
  279.  
  280.   Ä≤ÉMé╡é╜êΩìsé≡âOâìü[âoâïò╧Éö rectxt é╔èiö[é╖éΘüD
  281.   É│Åφé╔Ä└ìsé┼é½é╜éτû▀éΦÆlé═0
  282.   âGâëü[é¬ö¡É╢é╡é╜ÅΩìçé═É┌æ▒é≡ò┬é╢üCû▀éΦÆlé═-1
  283. ******************************************************/
  284. RecvString:
  285. if sock < 0 then return -1
  286. do forever
  287.   /* Ä≤ÉMâoâbâtâ@é╠Æåé⌐éτëⁿìsâRü[âhé≡ÆTé╖ */
  288.   if pos(crlf, recbuf) == 0 then do
  289.     /* ëⁿìsâRü[âhé¬î⌐é┬é⌐éΘé▄é┼âfü[â^é≡Ä≤ÉMé╡üC */
  290.     txt = ''
  291.     rc = SockRecv(sock, 'txt', 4096)
  292.     if rc <= 0 then do
  293.       rc = SockSoClose(sock)
  294.       sock = -1
  295.       return -1
  296.     end
  297.     /*  Ä≤ÉMâoâbâtâ@é╔Æ╟ë┴é╡é─éóé¡ */
  298.     recbuf = recbuf || txt
  299.   end
  300.   else do
  301.     /* ëⁿìsâRü[âhé¬î⌐é┬é⌐é┴é╜éτüCé╗é╠ÄΦæOé▄é┼êΩìsé≡Ä≤ÉM
  302.        âoâbâtâ@é⌐éτÉ╪éΦÅoé╡é─rectxté╔èiö[é╡é─ö▓é»éΘ */
  303.     parse var recbuf rectxt (crlf) recbuf
  304.     leave
  305.   end
  306. end
  307. return 0
  308.  
  309.  
  310. /******************************************************
  311.   âlâbâgâÅü[âNé╔êΩìsé≡æùÉMé╖éΘâTâuâïü[â`âô
  312.  
  313.   ê°Éöé┼ôné│éΩé╜ò╢ÄÜù±é╔ëⁿìsâRü[âhé≡òtë┴é╡é─æùÉMé╖éΘüD
  314.   É│Åφé╔Ä└ìsé┼é½é╜éτû▀éΦÆlé═0
  315.   âGâëü[é¬ö¡É╢é╡é╜ÅΩìçé═É┌æ▒é≡ò┬é╢üCû▀éΦÆlé═-1
  316. ******************************************************/
  317. SendString:
  318. if sock < 0 then return -1
  319. parse arg buf
  320. /* ôné│éΩé╜ò╢ÄÜù±é╠ì┼îπé╔ëⁿìsâRü[âhé≡òtë┴é╡æùÉMé╖éΘ */
  321. rc = SockSend(sock, buf || crlf)
  322. if rc <= 0 then do
  323.   rc = SockSoClose(sock)
  324.   sock = -1
  325.   return -1
  326. end
  327. return 0
  328.  
  329.