Как создать таймер обратного отсчета в DCL - OpenVMS
Я написал скрипт, который будет отправлять OTP (одноразовый пароль) пользователям Mail ID. Поэтому всякий раз, когда Система отправляет OTP пользователю, я хочу запустить таймер обратного отсчета, равный 1 минуте. Но я не уверен, как запустить таймер обратного отсчета с использованием сценариев DCL.. Любая идея?
Ниже приведен скрипт, который я использую для генерации OTP... Но мне нужен таймер обратного отсчета... Можно ли отобразить обратный отсчет на экране? Пожалуйста помоги!!
$! RAND - returns a positive random number ("RANDOM") between 0 and
$! __CEIL - 1.
$! sharris-at-sdsdmvax.fb3.noaa.gov
$ RAND:
$
$ IF F$TYPE(__SEED) .EQS. ""
$ THEN
$ ! seed the random number generator, ...
$ __NOW = F$CVTIME()
$ __HOUR = 'F$EXTRACT(11,2,__NOW)'
$ __MINUTE = 'F$EXTRACT(14,2,__NOW)'
$ __SECOND = 'F$EXTRACT(17,2,__NOW)'
$ __TICK = 'F$EXTRACT(20,2,__NOW)'
$
$ __SEED == __TICK + (100 * __SECOND) + (6000 * __MINUTE) + -
(360000 * __HOUR)
$ ! the generator tends to do better with a large, odd seed, ...
$ __SEED == (__SEED .OR. 1)
$ ! clean up, ...
$ DELETEX/SYMBOL __NOW
$ DELETEX/SYMBOL __HOUR
$ DELETEX/SYMBOL __MINUTE
$ DELETEX/SYMBOL __SECOND
$ DELETEX/SYMBOL __TICK
$ ENDIF
$
$ IF F$TYPE(__CEIL) .EQS. "" THEN __CEIL = %X3FFFFFFF
$
$ __SEED == __SEED * 69069 + 1
$ RANDOM == (__SEED.AND.%X3FFFFFFF)/(%X40000000/__CEIL)
$ define sys$output MANAGERS:[EMAL]random.txt
$ sh sym RANDOM
$ deassign sys$output
$ sear MANAGERS:[EMAL]random.txt random /out=MANAGERS:[EMAL]random1.txt
$ open in MANAGERS:[EMAL]random1.txt
$ LOOP4:
$ READ/END_OF_FILE=ENDIT4 IN RANDO
$ GOTO LOOP4
$ ENDIT4:
$ close in
$ RANDOM1 = F$EXTRACT(30,8,RANDO)
$ sh sym RANDOM1
$ mail a.txt smtp%"xx@x.com" /sub="Your Password is ''RANDOM1' "
когда я запускаю вышеуказанный скрипт, мой OTP будет выглядеть следующим образом:
Your Password is 1218A57A
1 ответ
Вот основной цикл DCL, который отображает обратный отсчет. Как говорили другие, это не будет ровно через 60 секунд, но я предполагаю, что это не важно.
$ X = 60
$ 1$: WRITE SYS$OUTPUT X, " Seconds"
$ WAIT 00:00:01.00
$ X = X - 1
$ IF X .GT. 0 THEN GOTO 1$
$
Если из другого комментария было неясно, если вы по какой-то причине не сохраняете пароль в файле random.txt, вы можете упростить последний бит вашего скрипта. Скорее, чем:
$ define sys$output MANAGERS:[EMAL]random.txt
$ sh sym RANDOM
$ deassign sys$output
$ sear MANAGERS:[EMAL]random.txt random /out=MANAGERS:[EMAL]random1.txt
$ open in MANAGERS:[EMAL]random1.txt
$ LOOP4:
$ READ/END_OF_FILE=ENDIT4 IN RANDO
$ GOTO LOOP4
$ ENDIT4:
$ close in
$ RANDOM1 = F$EXTRACT(30,8,RANDO)
$ sh sym RANDOM1
$ mail a.txt smtp%"xx@x.com" /sub="Your Password is ''RANDOM1' "
Вместо:
$ RANDOM1 = F$FAO("!XL",RANDOM)
$ mail a.txt smtp%"xx@x.com" /sub="Your Password is ''RANDOM1'"