Home · Articles · Downloads · Hobby Wear · Forums · Web Links · News CategoriesSunday, January 29, 2023
Navigation
Home
Articles
Downloads
Hobby Wear
FAQ
Forums
Web Links
News Categories
Contact Us
Photo Gallery
OpenVMS Bigot
Search
Users Online
Guests Online: 13
No Members Online

Registered Members: 7,681
Newest Member: MrManul
Sponsors
Island Computer
View Thread
OpenVMS Hobbyist Program | Hobbyist Licensing | Alpha License PAK's
Author Best way to renew/update hobbyist licenses
das
Member

Posts: 8
Location: Surrey UK
Joined: 05.03.07
Posted on October 08 2007 03:37
Dear All, My hobbyist system license termination date fast approaches. I have new licences, what is the best way to apply them? I waded straight in and registered openvms-alpha:

$ LICENSE REGISTER OPENVMS-ALPHA -
/ISSUER=OPENVMS_HOBBYIST - etc.

but when I used

$license modify /include = <mynode> openvms-alpha
%LICENSE-W-AMBIG, information provided was ambiguous; multiple licenses were found for OPENVMS-ALPHA

Yes I can see that's now true - What's the best way to tidy up and use the new licences?

(<mynode> Is a one node cluster - I thought it might be easier to add to an existing cluster if I ever got hold of another system)

I'm using 7.3-1 on the Hobbyist programme with tcpip, dec windows and have access to the serial console if needed but would prefer to do it remotely.

Thanks in advance - Dominic
Author
imiller
Administrator

User Avatar

Posts: 277
Location: UK
Joined: 24.02.06
Posted on October 08 2007 04:17
specify the authorization number with /AUTH to distinguish the different licences
http://www.encompasserve.org/~miller/
Author
das
Member

Posts: 8
Location: Surrey UK
Joined: 05.03.07
Posted on October 08 2007 10:31
Fantastic - Thanks for the swift reply - Here's to another year. Thanks again - Dominic
Author Re: Best way to renew/update hobbyist licenses
brad
Member

User Avatar

Posts: 134
Location: Hopedale, MA USA
Joined: 15.12.05
Posted on October 09 2007 13:54
[quote:16c6f05ca0="das"]
[...]
Yes I can see that's now true - What's the best way to tidy up and use the new licences?
[...]
[/quote:16c6f05ca0]

I found this routine a few years ago, to disable terminated licenses; this would fulfill part of your request...

$! Title: Disable Terminated Licenses
$
$! Synopsis: This command file disables all the terminated licenses
$! in the active license database, which is defined by
$! the current value of LMF$LICENSE.
$
$! Parameters: None
$
$! Author: Robert Deininger
$! Created: January, 2001
$
$! Version: V2.1 (generation 3)
$
$! Define some simple status codes.
$
$ lic__status = %x10000000
$ lic__success = lic__status + %x0001
$ lic__ctrly = lic__status + %x000C
$
$! Set up interrupt and error handlers.
$
$ status = lic__success
$ on control_y then goto control_y
$ on warning then goto error
$
$! Find subroutine library.
$ gosub jrddcl_init
$
$! Define some useful symbols.
$ say = "write sys$output"
$
$! The real work starts here.
$
$ tempfile1 = "terminated.lis;"
$ tempfile2 = "disable_terminated.com;"
$
$ current_ldb = f$search(f$trnlnm("lmf$license"smiley)
$
$ type sys$input

Utility to DISABLE all the terminated licenses in the active
license database...

The active database is:
$ say " ",current_ldb
$ type sys$input

This utility makes many changes to the license database. Do you
want a backup copy of the database file saved before changes
are made?
$10:
$ on warning then goto 10
$ jrdcall ask lic__answer b "Save a backup copy?" "YES" U,S
$ on warning then goto error
$
$ if lic__answer
$ then
$ current_ldb = current_ldb - f$parse(current_ldb,,,"version"smiley
$ say ""
$ copy/log 'current_ldb' 'current_ldb'
$ current_ldb = f$search(f$trnlnm("lmf$license"smiley)
$ say ""
$ say " The new highest version will be modified."
$ endif
$
$ say " Finding terminated licenses..."
$
$! Get a list of terminated licenses.
$ license list/before/terminated/full/output='tempfile1'
$
$ say " Making a command file to disable licenses..."
$
$! Open the input and output files.
$ open/read tempfile1 'tempfile1'
$ open/write tempfile2 'tempfile2'
$
$ target_string = "-----------------------"
$main_loop:
$ gosub find_string
$ if input_string .nes. ""
$ then
$! We have read the "header" line for a single license.
$! Look for expected beginnings on the next 4 lines, and save the good
$! parts.
$
$ get_string = "Issuer:"
$ gosub get_string
$ if result_string .nes. ""
$ then
$ issuer = result_string
$ else
$ goto main_loop
$ endif
$
$ get_string = "Authorization:"
$ gosub get_string
$ if result_string .nes. ""
$ then
$ authorization = result_string
$ else
$ goto main_loop
$ endif
$
$ get_string = "Product Name:"
$ gosub get_string
$ if result_string .nes. ""
$ then
$ product_name = result_string
$ else
$ goto main_loop
$ endif
$
$ get_string = "Producer:"
$ gosub get_string
$ if result_string .nes. ""
$ then
$ producer = result_string
$ else
$ goto main_loop
$ endif
$
$ ! We have the 4 important pieces of information we wanted. Generate
$ ! a LICENSE DISABLE command.
$ gosub write_command
$
$ goto main_loop
$ endif
$
$! We have processed the whole input file.
$ close tempfile1
$ write tempfile2 "$ exit"
$ close tempfile2
$
$20:
$ on warning then goto 20
$ jrdcall ask lic__answer b "Do you want to view the command file?" -
"YES" U,S
$ on warning then goto error
$
$ if lic__answer
$ then
$ type/page 'tempfile2'
$ endif
$
$30:
$ on warning then goto 30
$ jrdcall ask lic__answer b -
"Do you want to execute these commands to modify the license database?" -
"" U,S
$ on warning then goto error
$
$ if lic__answer
$ then
$ @'tempfile2'
type sys$input

Disabling is complete.

You may want to execute
$ LICENSE DELETE */STATUS=DISABLED/LOG
to completely remove all disabled licenses from the database.
$
$ else
$ say ""
$ say " Modifications cancelled."
$ endif
$
$ goto cleanup
$
$CONTROL_Y:
$ status = lic__ctrly
$ goto cleanup
$
$ERROR:
$ status = $status
$ goto cleanup
$
$CLEANUP:
$ if f$search(tempfile1) .nes. "" then delete/nolog/noconfirm 'tempfile1'*
$ if f$search(tempfile2) .nes. "" then delete/nolog/noconfirm 'tempfile2'*
$
$ if f$type(lic__answer) .nes. "" then delete/symbol/global/nolog lic__answer
$
$ exit status .or. %x10000000
$
$FIND_STRING:
$! This subroutine reads lines from tempfile1 until it obtains a line that
$! begins with target_string. It returns with input_string equal to the
$! entire input line, or the null string if the end of the file was reached
$! without finding the target.
$
$find_loop:
$ read/end_of_file=end_of_file tempfile1 input_string
$ if f$locate(target_string,input_string) .eq. 0
$ then
$ ! The current string begins with the target.
$ return ! (FIND_STRING)
$ else
$ goto find_loop
$ endif
$
$end_of_file:
$ input_string = ""
$ return ! (FIND_STRING)
$
$GET_STRING:
$! This subroutine reads a line from tempfile1, checks that it starts
$! with get_string, and returns in result_string the last part of the
$! string. The "last part" is the second element delimited by " ",
$! after the part matching get_string is removed.
$
$ read tempfile1 input_string
$ if f$locate(get_string,input_string) .eq. 0
$ then
$ ! The current string begins with the target.
$ temp = f$edit((input_string - get_string),"compress"smiley
$ result_string = f$element(1," ",temp)
$
$ else
$ say "Unexpected line. Expected ''get_string', found:"
$ say line
$ say ""
$
$ result_string = ""
$ endif
$
$ return ! (GET_STRING)
$
$WRITE_COMMAND:
$! This subroutine writes a single "license disable" command to tempfile2,
$! using the information in symbols PRODUCT_NAME, AUTHORIZATION, ISSUER,
$! and PRODUCER.
$
$ write tempfile2 "$ license disable/log ''product_name' -"
$ write tempfile2 " /authorization=''authorization' -"
$ write tempfile2 " /issuer=''issuer' -"
$ write tempfile2 " /producer=''producer'"
$ write tempfile2 "$"
$
$ return ! (WRITE_COMMAND)
$!---------------------------------------
$
$! Title: Initialize symbol pointing to main DCL library file
$
$! Synopsis:
$! This routine attempts to define the symbol JRDCALL to point to
$! my library of DCL routines. The library is either in a standard
$! file located via logical name JRD_JRDDCL (on my own systems/accounts)
$! or appended to this file (for DCL utilities that I distribute).
$! This routine rarely changes; it is convenient to append it to any DCL
$! file that uses JRDDCL.COM.
$! V1.0 (generation 1)
$
$
$JRDDCL_INIT:
$
$! Try the logical name first.
$ jrddcl_file = f$search("jrd_jrddcl"smiley
$ if jrddcl_file .eqs. "" then goto jrddcl_init_nofile
$
$ jrdcall := @'jrddcl_file'
$ jrddcl_subroutine :=
$ call jrddcl_init_try
$ if $status then return
$
$JRDDCL_INIT_NOFILE:
$
$! Look for JRDDCL routines in this file.
$ jrdcall := call jrddcl_call_entry
$ jrddcl_subroutine := subroutine
$ call jrddcl_init_try
$ if $status then return
$
$JRDDCL_INIT_NOTFOUND:
$
$! Neither method worked, give up.
$ delete/symbol jrdcall
$ delete/symbol jrddcl_subroutine
$ write sys$output "Can't find JRDDCL subroutine library."
$ write sys$output "... define logical name JRD_JRDDCL or"
$ write sys$output "... append library to this file."
$ exit
$
$JRDDCL_INIT_TRY:
$ subroutine
$ on warning then exit $status
$ jrdcall test
$ endsubroutine
$
$ exit
$!---------------------------------------
$! DCL subroutine library
$! Modelled after the example in "Writing Real Programs in DCL, 2nd
$! Edition."
$! V2.2 (generation 4)
$
$ goto jrddcl_atsign_entry
$
$! CALL entry point used when this library is appended to another DCL file.
$JRDDCL_CALL_ENTRY:
$ jrddcl_subroutine ! For CALL entry only, symbol substitution makes this
$ ! a SUBROUTINE statement.
$
$! @-sign entry used when this library is in a separate file.
$JRDDCL_ATSIGN_ENTRY:
$
$ jrddcl__status = %x10000000
$ jrddcl__success = jrddcl__status + %x0001
$ on control_y then exit jrddcl__status + %x0004
$ on warning then exit $status .or. %x10000000
$
$ display = "write sys$output"
$ if f$type(jrdcall) .nes. "STRING"
$ then
$ jrdcall = "@" + f$environment("PROCEDURE"smiley
$ endif
$ goto jrddcl_'p1'
$
$! Title: Test accessibility of the DCL library
$
$! Synopsis: This subroutine just returns a success status code. It
$! is intended to allow calling routines to verify that they know
$! how to find the library.
$
$! Parameters:
$! None.
$
$JRDDCL_TEST:
$
$ exit jrddcl__success
$
$! Title: Ask a Question
$
$! Synopsis: This subroutine asks the user a question and returns
$! the answer. The prompt for the question is composed
$! of a query string and optionally a default answer.
$
$! Parameters:
$! P2: A global symbol to receive the answer.
$! P3: The data type of the answer. B for boolean
$! (yes,no); I for integer; S for string.
$! P4: The query string for the question. It must end
$! with a punctuation character and no space.
$! P5: The default answer (optional; if not specified
$! then an answer must be entered).
$! P6: A comma-separated list of options:
$! H: Display help before asking question.
$! S: Skip a line before asking question.
$! U: Upcase the input string.
$! Z: Allow Ctrl/Z as an nswer.
$! P7: The help specifier (optional). It must be in
$! in the form "procedure [parameter...]". The
$! procedure is invoked with the @-sign command.
$
$JRDDCL_ASK:
$
$ signal = jrdcall + " signal ask"
$ if p3 .eqs. "B" .and. p5 .nes. "" .and. f$type(p5) .eqs. "INTEGER"
$ then
$ p5 = f$element(p5,"/","NO/YES"smiley
$ endif
$ if p5 .nes. ""
$ then
$ p4 = f$extract(0,f$len(p4)-1,p4) + -
" [" + p5 + "]" + f$extract(f$len(p4)-1,1,p4)
$ endif
$ if f$locate("S",p6) .ne. f$length(p6) then display ""
$ if f$locate("H",p6) .ne. f$length(p6) then @'p7'
$
$jrddcl_a10:
$ read sys$command/prompt="''p4' " input/end_of_file=a_eof
$ if input .eqs. "" then input = p5
$ input = f$edit(input,"TRIM"smiley
$ if input .eqs. ""
$ then
$ signal w inputreq "Please enter a value; there is no default."
$ else if input .eqs. "?"
$ then
$ if p7 .nes. "" then @'p7'
$ if p7 .eqs. "" then display "There is no help for this question."
$ else
$ goto jrddcl_a_'p3'
$jrddcl_a_B:
$ input = f$edit(input,"UPCASE"smiley
$ if f$locate(input,"YES"smiley .eq. 0 .or. -
f$locate(input,"NO"smiley .eq. 0
$ then
$ input = input .and. 1
$ goto jrddcl_a19
$ else
$ signal w yesnoreq "Please answer YES or NO."
$ endif
$ goto jrddcl_a15
$
$jrddcl_a_I:
$ if f$type(input) .eqs. "INTEGER"
$ then
$ input = f$integer(input)
$ goto jrddcl_a19
$ else
$ signal w intreq "The input must be an integer."
$ endif
$ goto jrddcl_a15
$
$jrddcl_a_S:
$ if f$locate("U",p6) .ne. f$length(p6)
$ then
$ input = f$edit(input,"UPCASE"smiley
$ endif
$ goto jrddcl_a19
$jrddcl_a15:
$ endif
$ endif
$ goto jrddcl_a10
$jrddcl_a_eof:
$ input = "^Z"
$ if f$locate("Z",p6) .ne. f$length(p6) then goto jrddcl_a19
$ signal i invctrlz "End-of-file is not a valid response."
$ goto jrddcl_a10
$jrddcl_a19:
$ 'p2' == input
$ exit jrddcl__success
$
$! Title: Signal an Informational or Error Message
$
$! Synopsis: This subroutine "signals" a message, producing one
$! or more message lines in the standard OpenVMS format.
$! It also exits with a status whose severity matches
$! that of the message.
$
$! Parameters:
$! P2: The message facility code.
$! P3: The message serverity (S, I, W, E, or F).
$! P4: The message identification.
$! P5: The message text.
$! Pn: Optional message lines or status codes whose
$! corresponding message lines are to me included.
$
$! Status: The severity of the exit status is equal to the
$! message severity, except in the case of warnings.
$! If the message severity is W, an informational
$! severity is included in the status so that the
$! caller's error handler is not invoked.
$
$JRDDCL_SIGNAL:
$
$ prefix = f$fao("%!AS-!AS-!AS, ",p2,p3,p4)
$ i = 4
$jrddcl_s10:
$ i = i + 1
$ if i .gt. 8 then goto jrddcl_s19
$ if p'i' .eqs. "" then goto jrddcl_s19
$ text = p'i'
$ if f$type(text) .eqs. "INTEGER"
$ then
$ text = f$message(text)
$ endif
$ if f$ext(0,1,text) .nes. "%" then text = prefix + text
$ if i .gt. 5 then text [0,1] := "-"
$ display text
$ goto jrddcl_s10
$jrddcl_s19:
$ if p3 .eqs. "W" then p3 = "I"
$ exit jrddcl__status + f$locate(p3,"WSEIF"smiley
$
$! Title: Display a Message
$
$! Synopsis: This subroutine outputs a message, producing one
$! or more message lines in the standard OpenVMS format.
$! It exits with an informational status so the caller's
$! error handler is not invoked.
$
$! Parameters:
$! P2: The message facility code.
$! P3: The message serverity (S, I, W, E, or F).
$! P4: The message identification.
$! P5: The message text.
$! Pn: Optional message lines or status codes whose
$! corresponding message lines are to me included.
$
$! Status: Always success. The caller's error handler is not
$! invoked.
$
$JRDDCL_MESSAGE:
$
$ prefix = f$fao("%!AS-!AS-!AS, ",p2,p3,p4)
$ i = 4
$jrddcl_m10:
$ i = i + 1
$ if i .gt. 8 then goto jrddcl_m19
$ if p'i' .eqs. "" then goto jrddcl_m19
$ text = p'i'
$ if f$type(text) .eqs. "INTEGER"
$ then
$ text = f$message(text)
$ endif
$ if f$ext(0,1,text) .nes. "%" then text = prefix + text
$ if i .gt. 5 then text [0,1] := "-"
$ display text
$ goto jrddcl_m10
$jrddcl_m19:
$ p3 = "I"
$ exit jrddcl__status + f$locate(p3,"WSEIF"smiley
http://www.turquoisewitch.com/~bradh
Jump to Forum:
Login
Username

Password



Not a member yet?
Click here to register.

Forgotten your password?
Request a new one here.
Member Poll
Are you going to OpenVMS Boot Camp 2016?

Yes

No

You must login to vote.
Shoutbox
You must login to post a message.

malmberg
August 04 2022
No more VAX hobbyist licenses. Community licenses for Alpha/IA64/X86_64 VMS Software Inc. Commercial VMS software licenses for VAX available from HPE.

ozboomer
July 20 2022
Just re-visiting.. No more hobbyist licenses? Is that from vmssoftware.com, no 'community' licenses?

valdirfranco
July 01 2022
No more hobbyist license...sad

mister_wavey
February 12 2022
I recall that the disks failed on the public access VMS systems that included Fafner

parwezw
January 03 2022
Anyone know what happened to FAFNER.DYNDS.ORG? I had a hobbyist account here but can longer access the site.

gtackett
October 27 2021
Make that DECdfs _2.1A_ for Vax

gtackett
October 27 2021
I'm looking for DECdfs V2.4A kit for VAX. Asking here just in case anyone is still listening.

MarkRLV
September 17 2021
At one time, didn't this web site have a job board? I would love to use my legacy skills one last time in my career.

malmberg
January 18 2021
New Hobbyist PAKs for VAX/VMS are no longer available according to reports. Only commercial licenses are reported to be for sale from HPE

dfilip
January 16 2021
Can someone please point me to hobbyist license pak? I'm looking for VAX/VMS 7.1, DECnet Phase IV, and UCX/TCPIP ... have the 7.1 media, need the license paks ... thanks!

Bart
October 16 2020
OpenVMS, and this website!

malmberg
September 05 2020
VSI community non-commercial licenses for AXP/IA64 are available now.

malmberg
September 05 2020
See the forum about licensing. Don't know if HPE hobby licenses still being issued. Commercial licenses still being sold.

silfox70
September 01 2020
I need the license for OpenVMS7.3. Where can I find them?

malmberg
August 29 2020
Eisner, which is currently being moved, got an SSH update and the keys were updated to more modern encryption standards.

Shoutbox Archive