diff --git a/vms/libssh2_make_example.dcl b/vms/libssh2_make_example.dcl new file mode 100644 index 0000000..d8191f3 --- /dev/null +++ b/vms/libssh2_make_example.dcl @@ -0,0 +1,124 @@ +$! +$! +$ olddir = f$environment("default") +$ on control_y then goto YExit +$! +$ gosub Init +$ if .not. init_status then goto YExit +$! +$ if what .eqs. "ALL" +$ then +$ call MakeAll +$ else +$ call Make +$endif +$! +$YExit: +$ set noon +$! deassign exadir +$! deassign objdir +$ delete 'link_opts';* +$ set default 'olddir' +$exit + +$MakeAll: subroutine +$! +$ set noon +$Loop: +$ this = f$search("exadir:*.c;0") +$ if this .eqs. "" then goto EndLoop +$! +$ what = f$parse( this,,,"name") +$ call Make +$! +$ goto Loop +$EndLoop: +$! +$exit +$endsubroutine + + +$Make: subroutine +$! +$ set noon +$! +$ cc 'cc_include' 'cc_flags'/object=objdir:'what' exadir:'what' +$ sev = $severity +$ if sev .and. 2 +$ then +$ say "Error compiling ''what', not linked." +$ else +$ if .not. (sev .and. 1) +$ then +$ say "Compile warnings in ''what'" +$ endif +$ link/exe='what'.exe objdir:'what'.obj, 'link_opts'/opt +$ endif +$! +$! +$End: +$ delete objdir:'what'.obj;* +$exit +$endsubroutine + + +$Init: +$! +$! +$ init_status = 1 +$ thisid = f$integer( %x'f$getjpi(0,"pid")') + "''f$cvtime(,,"second")'" +$ mdir = f$environment("procedure") +$ mdir = mdir - f$parse(mdir,,,"name") - f$parse(mdir,,,"type") - f$parse(mdir,,,"version") +$ set default 'mdir' +$! +$ objdir = "[.example_objects]" +$ exadir = "[-.example]" +$! +$ objdirfile = objdir - "[." - "]" + ".dir" +$ if f$search( objdirfile ) .eqs. "" +$ then +$ create/directory 'objdir' +$ endif +$! +$ define objdir 'objdir' +$ define exadir 'exadir' +$! +$ cc_include = "/include=([],[-.include])" +$ cc_flags = "/name=shortened/show=all" +$ link_opts = "objdir:libssh2_''thisid'.opt" +$! +$! +$ what = "''p1'" +$ if what .eqs. "" .or. f$edit(p1,"trim,collapse,upcase") .eqs. "ALL" +$ then +$ what = "ALL" +$ else +$ what = f$parse(what,,,"name") +$ if f$search("exadir:''what'.c") .eqs. "" +$ then +$ write sys$output "Can't make ''what'" +$ init_status = 0 +$ endif +$ endif +$! +$ currentlib = f$search("libssh2*.exe") +$! +$ define libssh2 'currentlib' +$! +$ how = "''p2'" +$ if how .eqs. "" .or. f$edit(p2,"trim,collapse,upcase") .eqs. "STATIC" +$ then +$ open/write lout 'link_opts' +$ write lout "libssh2.olb/lib" +$ write lout "sys$share:ssl$libcrypto_shr32.exe/share" +$ write lout "sys$share:ssl$libssl_shr32.exe/share" +$ write lout "gnv$libzshr/share" +$ close lout +$ else +$ how = "SHARED" +$ open/write lout 'link_opts' +$ write lout "libssh2/share" +$ close lout +$ endif +$! +$return diff --git a/vms/libssh2_make_help.dcl b/vms/libssh2_make_help.dcl new file mode 100644 index 0000000..13b2066 --- /dev/null +++ b/vms/libssh2_make_help.dcl @@ -0,0 +1,91 @@ +$! +$! +$! +$ olddir = f$environment( "default" ) +$ on control_y then goto End +$ on error then goto End +$! +$ gosub Init +$! +$ man2help sys$input: libssh2.hlp -b 1 + +LIBSSH2 + +OpenVMS port of the public domain libssh2 library, which +provides an API to implement client SSH communciation. + +License information is available at the copying subtopic. + +$! +$ open/append mh libssh2.hlp +$ write mh helpversion +$ close mh +$! +$ man2help -a [-]readme.; libssh2.hlp -b 2 +$ man2help -a [-]authors.; libssh2.hlp -b 2 +$ man2help -a [-]copying.; libssh2.hlp -b 2 +$ man2help -a [-]news.; libssh2.hlp -b 2 +$ man2help -a [-]release-notes.; libssh2.hlp -b 2 +$ man2help -a [-]hacking.; libssh2.hlp -b 2 +$ man2help -a [-]todo.; libssh2.hlp -b 2 +$! +$ man2help -a sys$input: libssh2.hlp -b 2 + +API_Reference + +Reference of all implemented API calls in +libssh2. + +$! +$ man2help -a [-.docs]*.3 libssh2.hlp -b 3 +$! +$ library/help/create libssh2.hlb libssh2.hlp +$! +$End: +$ set default 'olddir' +$exit +$! +$!------------------------------------------------------- +$! +$Init: +$! +$ thisdir = f$environment( "procedure" ) +$ thisdir = f$parse(thisdir,,,"device") + f$parse(thisdir,,,"directory") +$ set default 'thisdir' +$! +$ say = "write sys$output" +$! +$ pipe search [-.include]*.h libssh2_version_major/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job majorv &l ) +$ pipe search [-.include]*.h libssh2_version_minor/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job minorv &l ) +$ pipe search [-.include]*.h libssh2_version_patch/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job patchv &l ) +$! +$ majorv = f$trnlnm("majorv") +$ minorv = f$integer(f$trnlnm("minorv")) +$ patchv = f$integer( f$trnlnm("patchv")) +$! +$ helpversion = "This help library is based on build version ''majorv'.''minorv'.''patchv' of libssh2." +$! +$ deassign/job majorv +$ deassign/job minorv +$ deassign/job patchv +$! +$ if f$search( "man2help.exe" ) .eqs. "" +$ then +$ cc man2help +$ link man2help +$ endif +$! +$ man2help := $'thisdir'man2help.exe +$! +$ if f$search("libssh2.hlp") .nes. "" +$ then +$ delete libssh2.hlp;* +$ endif +$ if f$search("libssh2.hlb") .nes. "" +$ then +$ delete libssh2.hlb;* +$ endif +$return diff --git a/vms/libssh2_make_kit.dcl b/vms/libssh2_make_kit.dcl new file mode 100644 index 0000000..2166ecc --- /dev/null +++ b/vms/libssh2_make_kit.dcl @@ -0,0 +1,222 @@ +$! +$ olddir = f$environment("default") +$ on error then goto End +$! +$ gosub Init +$! +$ call WriteProductDescriptionFile +$ call WriteProductTextFile +$! +$! backup tree +$! +$ backup [-...]*.*;0/excl=([]*.exe,*.obj,*.opt,*.hlp,*.hlb,*.bck,*.com,*.pcsi*) - + libssh2-'versionname''datename'_src.bck/save +$ purge libssh2-'versionname''datename'_src.bck +$! +$! backup examples +$! +$ backup [-.example]*.c;0 libssh2_examples-'versionname''datename'.bck/save +$ dire libssh2_examples-'versionname''datename'.bck +$ purge libssh2_examples-'versionname''datename'.bck +$! +$ set default [-] +$! +$ defdir = f$environment( "default" ) +$ thisdev = f$parse(defdir,,,"device","no_conceal") +$ thisdir = f$parse(defdir,,,"directory","no_conceal") - "][" - "][" - "][" - "][" +$! +$ libssh2_kf = thisdev + thisdir +$ libssh2_kf = libssh2_kf - "]" + ".]" +$! +$ set default 'mdir' +$! +$ define/translation_attributes=concealed libssh2_kf 'libssh2_kf' +$! +$ product package libssh2 - + /base='arch' - + /producer=jcb - + /source=[] - ! where to find PDF and PTF + /destination=[] - ! where to put .PCSI file + /material=libssh2_kf:[000000...] - ! where to find product material + /version="''vms_majorv'.''minorv'-''patchv'''datename'" - + /format=sequential +$! +$End: +$! +$ set noon +$ if f$search("*.pcsi$desc;*") .nes. "" then delete *.pcsi$desc;* +$ if f$search("*.pcsi$text;*") .nes. "" then delete *.pcsi$text;* +$ if f$search("libssh2-''versionname'''datename'_src.bck;*") .nes. "" then delete libssh2-'versionname''datename'_src.bck;* +$ if f$search("libssh2_examples-''versionname'''datename'.bck;*") .nes. "" then delete libssh2_examples-'versionname''datename'.bck;* +$! +$ if f$trnlnm("libssh2_kf") .nes. "" then deassign libssh2_kf +$ set default 'olddir' +$! +$exit +$! +$!-------------------------------------------------------------------------------- +$! +$Init: +$ set process/parse=extended +$! +$ say = "write sys$output" +$! +$ mdir = f$environment("procedure") +$ mdir = mdir - f$parse(mdir,,,"name") - f$parse(mdir,,,"type") - f$parse(mdir,,,"version") +$! +$ set default 'mdir' +$! +$ pipe search [-.include]*.h libssh2_version_major/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job majorv &l ) +$ pipe search [-.include]*.h libssh2_version_minor/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job minorv &l ) +$ pipe search [-.include]*.h libssh2_version_patch/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job patchv &l ) +$! +$ majorv = f$trnlnm("majorv") +$ minorv = f$integer(f$trnlnm("minorv")) +$ patchv = f$integer( f$trnlnm("patchv")) +$! +$ deassign/job majorv +$ deassign/job minorv +$ deassign/job patchv +$! +$ vms_majorv = f$trnlnm("vms_majorv") +$ if vms_majorv .eqs. "" then vms_majorv = majorv +$! +$ arch = "UNKNOWN" +$ if f$getsyi("arch_type") .eq. 2 then arch = "AXPVMS" +$ if f$getsyi("arch_type") .eq. 3 then arch = "I64VMS" +$! +$ if arch .eqs. "UNKNOWN" +$ then +$ say "Unsupported or unknown architecture, only works on Alpha and Itanium" +$ exit 2 +$ endif +$! +$! is this a proper release or a daily snapshot? +$! crummy, but should work. +$! +$ daily = "TRUE" +$ firstdash = f$locate("-",mdir) +$ restdir = f$extract( firstdash + 1, 80, mdir) +$ seconddash = f$locate("-", restdir) +$ if seconddash .ge. f$length( restdir ) +$ then +$ daily = "FALSE" +$ datename = "" +$ else +$ datename = "D" + f$extract(seconddash+1,8,restdir) +$ endif +$! +$ if daily +$ then +$ productname = "JCB ''arch' LIBSSH2 V''vms_majorv'.''minorv'-''patchv'''datename'" +$ else +$ productname = "JCB ''arch' LIBSSH2 V''vms_majorv'.''minorv'-''patchv'" +$ endif +$! +$ productfilename = "JCB-''arch'-LIBSSH2-" + f$fao("V!2ZL!2ZL-!2ZL!AS-1", f$integer(vms_majorv),minorv,patchv,datename) +$! +$ versionname = "''vms_majorv'_''minorv'_''patchv'" +$! +$return +$! +$!-------------------------------------------------------------------------------- +$! +$WriteProductDescriptionFile: subroutine +$! +$ open/write pd 'productfilename'.PCSI$DESC +$! +$ write pd "product ''productname' full ;" +$ write pd " software DEC ''arch' VMS ;" +$ write pd " if (not <software DEC ''arch' VMS version minimum V8.3>) ; +$ write pd " error NEED_VMS83 ;" +$ write pd " end if ;" +$ write pd " software HP ''arch' SSL version minimum V1.3;" +$ write pd " if (not <software HP ''arch' SSL version minimum V1.3>) ; +$ write pd " error NEED_SSL ;" +$ write pd " end if ;" +$ write pd " execute preconfigure (""set process/parse_type=extended"");" +$ write pd " execute postinstall (""set process/parse_type=extended""," +$ write pd " ""rename pcsi$destination:[gnv]usr.dir usr.DIR""," +$ write pd " ""rename pcsi$destination:[gnv.usr]include.dir include.DIR""," +$ write pd " ""rename pcsi$destination:[gnv.usr.include]libssh2.dir libssh2.DIR""," +$ write pd " ""rename pcsi$destination:[gnv.usr.include.libssh2]libssh2.h libssh2.h""," +$ write pd " ""rename pcsi$destination:[gnv.usr.include.libssh2]libssh2_publickey.h libssh2_publickey.h""," +$ write pd " ""rename pcsi$destination:[gnv.usr.include.libssh2]libssh2_sftp.h libssh2_sftp.h""," +$ write pd " ""rename pcsi$destination:[gnv.usr.include.libssh2]libssh2_config.h libssh2_config.h""," +$ write pd " ""rename pcsi$destination:[gnv.usr]lib.dir lib.DIR""," +$ write pd " ""rename pcsi$destination:[gnv.usr.lib]gnv$libssh2_''versionname'.exe gnv$libssh2_''versionname'.exe""," +$ write pd " ""rename pcsi$destination:[gnv.usr.share.doc.libssh2]libssh2.hlb libssh2.hlb"");" +$ write pd " information RELEASE_NOTES phase after ;" +$ write pd " option EXAMPLE default 0 ;" +$ write pd " directory ""[gnv.usr.share.doc.libssh2.examples]"" ;" +$ write pd " file ""[gnv.usr.share.doc.libssh2.examples]libssh2_examples-''versionname'''datename'.bck"";" +$ write pd " end option ;" +$ write pd " option SOURCE default 0 ;" +$ write pd " directory ""[gnv.common_src]"" ;" +$ write pd " file ""[gnv.common_src]libssh2-''versionname'''datename'_src.bck"";" +$ write pd " end option ;" +$ write pd " directory ""[gnv]"" ;" +$ write pd " directory ""[gnv.usr]"" ;" +$ write pd " directory ""[gnv.usr.lib]"" ;" +$ write pd " directory ""[gnv.usr.include]"" ;" +$ write pd " directory ""[gnv.usr.include.libssh2]"" ;" +$ write pd " directory ""[gnv.usr.share]"" ;" +$ write pd " directory ""[gnv.usr.share.doc]"" ;" +$ write pd " directory ""[gnv.usr.share.doc.libssh2]"" ;" +$ write pd " file ""[gnv.usr.include.libssh2]libssh2.h"" source ""[include]libssh2.h"";" +$ write pd " file ""[gnv.usr.include.libssh2]libssh2_publickey.h"" source ""[include]libssh2_publickey.h"";" +$ write pd " file ""[gnv.usr.include.libssh2]libssh2_sftp.h"" source ""[include]libssh2_sftp.h"";" +$ write pd " file ""[gnv.usr.include.libssh2]libssh2_config.h"" source ""[vms]libssh2_config.h"";" +$ write pd " file ""[gnv.usr.share.doc.libssh2]libssh2.hlb"" source ""[vms]libssh2.hlb"";" +$ write pd " file ""[gnv.usr.share.doc.libssh2]libssh2-''versionname'.news"" source ""[000000]NEWS."";" +$ write pd " file ""[gnv.usr.share.doc.libssh2]libssh2-''versionname'.release_notes"" source ""[vms]readme.vms"";" +$ write pd " file ""[gnv.usr.lib]gnv$libssh2_''versionname'.exe"" source ""[vms]libssh2_''versionname'.exe"";" +$ write pd "end product ;" +$ close pd +$exit +$endsubroutine +$! +$!-------------------------------------------------------------------------------- +$! +$WriteProductTextFile: subroutine +$! +$ open/write pt 'productfilename'.PCSI$TEXT +$ write pt "=PRODUCT ''productname' Full" +$ write pt "1 'PRODUCER" +$ write pt "=prompt libssh2 is an open source product ported to VMS by Jose Baars" +$ write pt "This software product is provided with no warranty." +$ write pt "For license information see the LIBSSH2 help library." +$ write pt "1 'PRODUCT" +$ write pt "=prompt JCB LIBSSH2 for OpenVMS" +$ write pt "" +$ write pt "libssh2 is an open source client side library that aims to implement" +$ write pt "the SSH protocol. This is the OpenVMS port of that library." +$ write pt "Further information at http://www.libssh2.org." +$ write pt "" +$ write pt "1 NEED_VMS83" +$ write pt "=prompt OpenVMS 8.3 or later is not installed on your system." +$ write pt "This product requires OpenVMS 8.3 or later to function." +$ write pt "" +$ write pt "1 NEED_SSL" +$ write pt "=prompt HP SSL 1.3 or later is not installed on your system." +$ write pt "This product requires HP SSL 1.3 or later to function." +$ write pt "" +$ write pt "1 RELEASE_NOTES" +$ write pt "=prompt Release notes and the libssh2 help library are available in [gnv.usr.share.doc.libssh2] directory." +$ write pt "" +$ write pt "1 EXAMPLE" +$ write pt "=prompt Do you want the libssh2 C programming examples ? " +$ write pt "The libssh2 coding examples will be available in backup saveset " +$ write pt "[gnv.usr.share.doc.libssh2.examples]libssh2_examples_''versionname'.bck" +$ write pt "" +$ write pt "1 SOURCE" +$ write pt "=prompt Do you want the complete libssh2 source tree ? " +$ write pt "The libssh2 source tree will be available in backup saveset " +$ write pt "[gnv.common_src]libssh2_''versionname'''datename'_src.bck" +$close pt +$exit +$ endsubroutine + diff --git a/vms/libssh2_make_lib.dcl b/vms/libssh2_make_lib.dcl new file mode 100644 index 0000000..6d8b13b --- /dev/null +++ b/vms/libssh2_make_lib.dcl @@ -0,0 +1,344 @@ +$! +$! +$ olddir = f$environment("default") +$ on control_y then goto YExit +$! +$ gosub Init +$ if .not. init_status then goto YExit +$! +$ call CompileAll +$ call BuildTransferVectors +$ call LinkShared +$! +$ call Cleanup +$! +$YExit: +$ set noon +$! +$ deassign srcdir +$ if f$search("objdir:*.*;*") .nes. "" then delete objdir:*.*;* +$ deassign objdir +$ delete library_objects.dir;* +$! +$ set default 'olddir' +$exit +$! +$!--------------------------------------------------------------------- +$! +$Init: +$! +$! +$ init_status = 1 +$ thisid = f$integer( %x'f$getjpi(0,"pid")') +$ mdir = f$environment("procedure") +$ mdir = mdir - f$parse(mdir,,,"name") - f$parse(mdir,,,"type") - f$parse(mdir,,,"version") +$ set default 'mdir' +$! +$ objdir = "[.library_objects]" +$ srcdir = "[-.src]" +$! +$ objdirfile = objdir - "[." - "]" + ".dir" +$ if f$search( objdirfile ) .eqs. "" +$ then +$ create/directory 'objdir' +$ endif +$! +$ define objdir 'objdir' +$ define srcdir 'srcdir' +$! +$ cc_include = "/include=([],[-.include])" +$ link_opts = "objdir:libssh2_''thisid'.opt" +$! +$ pipe search [-.include]libssh2.h libssh2_version_major/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job majorv &l ) +$ pipe search [-.include]libssh2.h libssh2_version_minor/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job minorv &l ) +$ pipe search [-.include]libssh2.h libssh2_version_patch/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; - + define/job patchv &l ) +$! +$ majorv = f$trnlnm("majorv") +$ minorv = f$integer(f$trnlnm("minorv")) +$ patchv = f$integer( f$trnlnm("patchv")) +$! +$ OLBONLY = "FALSE" +$ if p1 .eqs. "OLBONLY" +$ then +$ OLBONLY = "TRUE" +$ endif +$! +$ deassign/job majorv +$ deassign/job minorv +$ deassign/job patchv +$! +$return +$! +$!--------------------------------------------------------------------- +$! +$Cleanup: subroutine +$! +$ set noon +$ purge *.opt +$ purge *.olb +$ purge *.exe +$! +$exit 1 +$endsubroutine +$! +$!--------------------------------------------------------------------- +$! +$LinkShared: subroutine +$! +$! +$! +$ cversion = f$fao("!3ZL",minorv) + f$fao("!3ZL",patchv) +$! +$! General linking options in link_libssh2_version...opt +$! Vectors in link_libssh2_vectors...opt +$! +$ open/write uitv link_libssh2_version_'majorv'_'minorv'_'patchv'.opt +$ write uitv "GSMATCH=LEQUAL,''majorv',''cversion'" +$ write uitv "IDENTIFICATION=""LIBSSH2 ''majorv'.''minorv'.''patchv'""" +$ write uitv "sys$share:ssl$libcrypto_shr32.exe/share" +$ write uitv "sys$share:ssl$libssl_shr32.exe/share" +$ write uitv "gnv$libzshr/share" +$ close uitv +$! +$ link/shared/exe=libssh2_'majorv'_'minorv'_'patchv'.exe - + libssh2.olb/lib, - + link_libssh2_version_'majorv'_'minorv'_'patchv'.opt/opt, - + link_libssh2_vectors_'majorv'_'minorv'_'patchv'.opt/opt +$! +$exit +$endsubroutine +$! +$!--------------------------------------------------------------------- +$! +$CompileAll: subroutine +$! +$ set noon +$! +$ if f$search("objdir:*.obj;*") .nes "" +$ then +$ delete objdir:*.obj;* +$ endif +$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes "" +$ then +$ delete [.cxx_repository]cxx$demangler_db.;* +$ endif +$! +$! Compile all .c files in [-.src], first as_is +$! and then as default all uppercase names +$! and add the resulting object to object libraries +$! libssh2_up.olb and libssh2_as_is.olb. +$! +$ case = 0 +$ if OLBONLY then case = 1 +$CaseLoop: +$! +$ if case .eq. 0 +$ then!camel case names +$ cc_flags = "/names=(shortened,as_is)" +$ objlib = "libssh2_asis.olb" +$ endif +$! +$ if case .eq. 1 +$ then!uppercase names +$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes "" +$ then +$ rename [.cxx_repository]cxx$demangler_db.; *.lowercase +$ purge [.cxx_repository]cxx$demangler_db.lowercase +$ endif +$! +$ cc_flags = "/names=(shortened)" +$ objlib = "libssh2_up.olb" +$ endif +$! +$ if f$search("''objlib';*") .nes. "" then delete 'objlib';* +$ library/create 'objlib' +$! +$Loop: +$ this = f$search("srcdir:*.c;0") +$ if this .eqs. "" then goto EndLoop +$! +$ what = f$parse( this,,,"name") +$! +$ call CompileAndAdd +$! +$ goto Loop +$EndLoop: +$ case = case + 1 +$ delete objdir:*.obj;* +$ if case .lt 2 then goto CaseLoop +$! +$ rename libssh2_up.olb libssh2.olb +$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes "" +$ then +$ rename [.cxx_repository]cxx$demangler_db.; *.uppercase +$ purge [.cxx_repository]cxx$demangler_db.uppercase +$ endif +$! +$ if OLBONLY then exit 4 +$! +$! For each function that is too long, create a global symbol +$! low$'shortened-uppercase-name' with as value lowercase shortened +$! name in it, so we can add the proper lower or mixed case +$! shortened name later when building the transfer vectors +$! for the shared image. +$! This is to prevent two very long similar function names +$! that are shortened getting mixed up when sorted alphabetically. +$! +$ inputfile = "[.cxx_repository]cxx$demangler_db.lowercase" +$ gosub GetShortened +$! +$ inputfile = "[.cxx_repository]cxx$demangler_db.uppercase" +$ gosub GetShortened +$! +$exit +$! +$GetShortened: +$! +$ open/read s 'inputfile' +$ namecount = 0 +$ReadLoop: +$! +$ read/end=endreadloop s regel +$! +$ shortname = f$element(0,"$",regel) + "$" +$ longname = f$element(1,"$",regel) +$! +$ symvalue = "" +$! +$ if shortname .eqs. f$edit(shortname,"upcase") +$ then +$! this is an uppercase shortname, add it +$ symname = "u$''longname'" +$ symvalue = "''shortname'" +$ low$'shortname' == l$'longname' +$! +$ delete/symbol l$'longname' +$! +$ else +$! this is an lowercase shortname +$ symname = "l$''longname'" +$ symvalue = "''shortname'" +$ 'symname' = "''symvalue'" +$ endif +$! +$ namecount = namecount + 1 +$! +$ goto ReadLoop +$EndReadLoop: +$! +$close s +$return +$! +$endsubroutine +$! +$!--------------------------------------------------------------------- +$! +$CompileAndAdd: subroutine +$! +$ on error then goto End +$! +$ cc /warn=disable=longextern/lis=objdir:/show=all 'cc_include' 'cc_flags'/object=objdir:'what'.obj srcdir:'what'.c +$ library/insert 'objlib' objdir:'what'.obj +$! +$End: +$exit +$endsubroutine +$! +$!--------------------------------------------------------------------- +$! +$BuildTransferVectors: subroutine +$! +$! Do a balanced read of the uppercase library names +$! and the mixed case library names, and build the +$! transfer vectors with uppercase entry points +$! with an alternative in mixed case. +$! For shortened names, use the low$* symbols +$! to avoid being fooled by the sort. +$! +$ thislib = "libssh2.olb" +$ library/lis=libu.'thisid'/names libssh2.olb +$ library/lis=lib_asisu.'thisid'/names libssh2_asis.olb +$! +$! case blind sort of all modules in both the uppercase +$! as the case sensitive object library. +$! +$ sort libu.'thisid' lib.'thisid'/spec=sys$input +/COLLATING_SEQUENCE=(SEQUENCE= ("A" - "Z","0"-"9","_"), FOLD) +$ sort lib_asisu.'thisid' lib_asis.'thisid'/spec=sys$input +/COLLATING_SEQUENCE=(SEQUENCE= ("A" - "Z","0"-"9","_"), FOLD) +$! +$ open/read in lib.'thisid' +$ open/read inasis lib_asis.'thisid' +$ open/write uit link_libssh2_vectors_'majorv'_'minorv'_'patchv'.opt +$! +$ write uit "CASE_SENSITIVE=YES" +$ write uit "SYMBOL_VECTOR= ( -" +$! +$ mode = 0 +$ uitregel = "" +$! +$ReadLoop: +$! +$ read/end=ReadAsis in regel +$ReadAsis: +$ read/end=EndReadLoop inasis asisregel +$! +$ regel = f$edit( regel, "trim,compress" ) +$ asisregel = f$edit( asisregel, "trim,compress" ) +$! +$ if f$element(0," ",regel) .eqs. "Module" .or. - + f$extract(0,1,regel) .eqs. "_" .or. - + f$element(1," ",regel) .nes. " " .or. - + regel .eqs. "" +$ then +$ goto ReadLoop +$ endif +$! +$ if uitregel .nes. "" .and. mode .eq. 1 +$ then +$ write uit "''uitregel'=PROCEDURE, -" +$ write uit "''uitasis'/''uitregel'=PROCEDURE, -" +$! +$ uitregel = "" +$ uitasis = "" +$ endif +$! +$ uitregel = regel +$ if f$type( low$'uitregel' ) .nes. "" +$ then +$ uitasis = low$'uitregel' +$ delete/symbol/global low$'uitregel' +$ else +$ uitasis = asisregel +$ endif +$! +$ mode = 1 +$! +$ goto ReadLoop +$EndreadLoop: +$! +$! To get the closing brace after the last procedure +$! keyword. +$! +$ if uitregel .nes. "" +$ then +$ write uit "''uitregel'=PROCEDURE, -" +$ write uit "''uitasis'/''uitregel'=PROCEDURE)" +$ endif +$! +$ write uit "CASE_SENSITIVE=NO" +$! +$ close in +$ close inasis +$ close uit +$! +$ delete lib*.'thisid';* +$! +$exit +$endsubroutine +$! +$!--------------------------------------------------------------------- +$! diff --git a/vms/man2help.c b/vms/man2help.c new file mode 100644 index 0000000..e09678d --- /dev/null +++ b/vms/man2help.c @@ -0,0 +1,506 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> + +#include <starlet.h> +#include <lib$routines.h> +#include <ssdef.h> +#include <descrip.h> +#include <rms.h> + +typedef struct manl{ + struct manl *next; + char *filename; +}man, *manPtr; + +typedef struct pf_fabnam{ + struct FAB dfab; + struct RAB drab; + struct namldef dnam; + char expanded_filename[NAM$C_MAXRSS + 1]; +} pfn, *pfnPtr; + +/*----------------------------------------------------------*/ + +fpcopy( char *output, char *input, int len ) +{ +char *is, *os; +int i; + +if ( len ){ + for ( is = input, os = output, i = 0; i < len ; ++i, ++is, ++os){ + *os = *is; + } + *os = 0; +}else{ + output[0] = 0; +} +} + + +/*----------------------------------------------------------*/ +/* give part of ilename in partname. See code for proper + value of i ( 0 = node, 1 = dev, 2 = dir,3 = name etc. +*/ + +int fnamepart( char *inputfile, char *part, int whatpart ) +{ +pfnPtr pf; +int status; +char ipart[6][256], *i, *p; + +pf = calloc( 1, sizeof( pfn ) ); + +pf->dfab = cc$rms_fab; +pf->drab = cc$rms_rab; +pf->dnam = cc$rms_naml; + +pf->dfab.fab$l_naml = &pf->dnam; + +pf->dfab.fab$l_fna = (char *) -1; +pf->dfab.fab$l_dna = (char *) -1; +pf->dfab.fab$b_fns = 0; +pf->dfab.fab$w_ifi = 0; + +pf->dnam.naml$l_long_defname = NULL; //inputfile; +pf->dnam.naml$l_long_defname_size = 0;//strlen( inputfile ); + +pf->dnam.naml$l_long_filename = inputfile; +pf->dnam.naml$l_long_filename_size = strlen( inputfile); + +pf->dnam.naml$l_long_expand = pf->expanded_filename; +pf->dnam.naml$l_long_expand_alloc = NAM$C_MAXRSS ; + +pf->dnam.naml$b_nop |= NAML$M_SYNCHK | NAML$M_PWD; + +status = sys$parse( &pf->dfab, 0,0); +if ( !(status&1) ){ + free( pf ); + return( status ); +} + +fpcopy ( ipart[0], pf->dnam.naml$l_long_node , pf->dnam.naml$l_long_node_size); +fpcopy ( ipart[1], pf->dnam.naml$l_long_dev , pf->dnam.naml$l_long_dev_size); +fpcopy ( ipart[2], pf->dnam.naml$l_long_dir , pf->dnam.naml$l_long_dir_size); +fpcopy ( ipart[3], pf->dnam.naml$l_long_name , pf->dnam.naml$l_long_name_size); +fpcopy ( ipart[4], pf->dnam.naml$l_long_type , pf->dnam.naml$l_long_type_size); +fpcopy ( ipart[5], pf->dnam.naml$l_long_ver , pf->dnam.naml$l_long_ver_size); + +for( i = ipart[ whatpart ], p = part; *i; ++i, ++p){ + if ( p == part ){ + *p = toupper( *i ); + }else{ + *p = tolower( *i ); + } +} +*p = 0; + +free( pf ); +return(1); +} +/*----------------------------------------------------------*/ + +int find_file(char *filename,char *gevonden,int *findex) +{ +int status; +struct dsc$descriptor gevondend; +struct dsc$descriptor filespec; +char gevonden_file[NAM$C_MAXRSS + 1]; + +filespec.dsc$w_length = strlen(filename); +filespec.dsc$b_dtype = DSC$K_DTYPE_T; +filespec.dsc$b_class = DSC$K_CLASS_S; +filespec.dsc$a_pointer = filename; + +gevondend.dsc$w_length = NAM$C_MAXRSS; +gevondend.dsc$b_dtype = DSC$K_DTYPE_T; +gevondend.dsc$b_class = DSC$K_CLASS_S; +gevondend.dsc$a_pointer = gevonden_file; + +status=lib$find_file(&filespec,&gevondend,findex,0,0,0,0); + +if ( (status & 1) == 1 ){ + strcpy(gevonden,strtok(gevonden_file," ")); +}else{ + gevonden[0] = 0; +} + +return(status); +} + + +/*--------------------------------------------*/ + +manPtr addman( manPtr *manroot,char *filename ) +{ +manPtr m,f; + +m = calloc( 1, sizeof( man) ); +if ( !m ) return( NULL ); + +m->filename = strdup( filename ); + +if ( *manroot == NULL ){ + *manroot = m; +}else{ + for( f = *manroot; f->next ; f = f->next ); + f->next = m; +} +return(m); +} + +/*--------------------------------------------*/ +void freeman( manPtr *manroot ) +{ +manPtr m,n; + +for( m = *manroot; m ; m = n ){ + free( m->filename ); + n = m->next; + free ( m ); +} +*manroot = NULL; +} + +/*--------------------------------------------*/ + +int listofmans( char *filespec, manPtr *manroot ) +{ +manPtr r; +int status; +int ffindex=0; +char gevonden[NAM$C_MAXRSS + 1]; + +while(1){ + status = find_file( filespec, gevonden, &ffindex ); + + if ( (status&1) ){ + r = addman( manroot, gevonden ); + if ( r == NULL ) return(2); + }else{ + if ( !( status&1)) break; + } +} + +lib$find_file_end( &ffindex); +if ( status == RMS$_NMF) status = 1; + + +return( status ); +} + +/*--------------------------------------------*/ + +int convertman ( char *filespec, FILE *hlp , int base_level ) +{ +FILE *man; +char *in, *uit; +char *m,*h; +size_t len, thislen, maxlen= 50000; +int bol,mode, return_status=1; +char subjectname[ NAM$C_MAXRSS + 1 ]; + +in = calloc( 1, maxlen + 1 ); +uit = calloc( 1, maxlen + 1 ); + +if ( in == NULL || uit == NULL ) return(2); + +man = fopen( filespec, "r"); +if ( man == NULL ) return(vaxc$errno); + +for( len = 0; !feof( man ) && len < maxlen ; len += thislen ){ + thislen = fread( in + len, 1, maxlen - len, man ); +} + +fclose (man); + +m = in; +h = uit; + +*(m + len ) = 0; + +for ( mode = 0, bol = 1 ; *m; ++m ){ + + switch ( mode ){ + case 0: + switch(*m){ + case '.': + if ( bol ){ + mode = 1; + }else{ + *h = *m; + ++h; + } + break; + case '\\': + if ( bol ){ + *h = ' ';++h; + *h = ' ';++h; + } + mode = 2; + break; + default: + if ( bol ){ + *h = ' ';++h; + *h = ' ';++h; + } + *h = *m; + ++h; + break; + } + break; + case 1: /* after . at bol */ + + switch(*m){ + case '\\': + while( *m != '\n' && *m != '\r' && *m )++m; + mode = 0; + break; + case 'B': + ++m; + *h = ' ';++h; + mode = 0; + break; + case 'I': + /* remove preceding eol */ + if ( *(m+1) != 'P' ){ + --h; + while ( (*h == '\n' || *h == '\r') && h > uit )--h; + ++h; + } + + /* skip .Ix */ + for(;*m != ' ' && *m != '\n' && *m != '\r'; ++m); + + /* copy line up to EOL */ + + for(;*m != '\n' && *m != '\r' && *m; ++m, ++h)*h = *m; + + /* if line ends in ., this is an EOL */ + + if ( *(h-1) == '.'){ + --h; + --m; + }else{ + /* if line does not end in ., skip EOL in source */ + + if ( *(m+1) == '\n' || *(m+1) == '\r')++m; + } + mode = 0; + break; + case 'S': + if ( *(m+1) == 'H' ){ + *h = '\n';++h; + if ( strncmp( m+3 ,"NAME",4) == 0 || + strncmp( m+3 ,"SYNOPSIS",8) == 0 || + strncmp( m+3 ,"DESCRIPTION",11) == 0 ){ + while( *m != '\n' && *m != '\r')++m; + mode = 0; + }else{ + ++m; + + /* write help level, and flag it */ + + *h = '0' + base_level + 1;++h; + return_status |= 2; + + *h = ' ';++h; + + /* skip H (or whatever after S) and blank */ + ++m;++m; + + for(;*m != '\n' && *m != '\r' && *m; ++m, ++h){ + + /* write help label in lowercase, skip quotes */ + /* fill blanks with underscores */ + + if ( *m != '\"' ){ + *h = tolower( *m ); + if (*h == ' ') *h = '_'; + }else{ + --h; + } + } + + /* Add a linefeed or two */ + + *h = *m;++h; + *h = *m;++h; + + mode = 0; + } + } + break; + case 'T': + if ( *(m+1) == 'H' ){ + *h = '0' + base_level; ++h; + return_status |= 2; + *h = ' ';++h; + for ( m = m + 3; *m != ' ' && *m ; ++m, ++h ){ + *h = *m; + } + while( *m != '\n' && *m != '\r' && *m )++m; + mode = 0; + } + break; + default: + ++m; + mode = 0; + break; + } + break; + case 2: /* after \ skip two characters or print the backslash */ + switch(*m){ + case '\\': + *h = *m; + ++h; + mode = 0; + break; + default: + ++m; + mode = 0; + break; + } + break; + } /*end switch mode */ + + bol = 0; + if ( *m == '\n' || *m == '\r') bol = 1; + +}/* end for mode */ + +*h = 0; + + +if ( (return_status&2) ){ + fprintf( hlp, "%s\n\n", uit); +}else{ + fnamepart( filespec, subjectname,3); + if ( *subjectname ){ + fprintf( hlp, "%d %s\n\n%s\n\n", base_level, subjectname, uit); + }else{ + /* No filename (as is the case with a logical), use first word as subject name */ + char *n,*s; + + for(n = in; isspace( *n );++n); + for(s = subjectname; !(isspace( *n )); ++n,++s)*s = *n; + *s = 0; + + fprintf( hlp, "%d %s\n\n%s\n\n", base_level, subjectname, uit); + } +} + +/* + printf( "read %d from %s, written %d to helpfile, return_status = %d\n", + len, filespec, strlen(uit), return_status ); +*/ + +free( m ); +free( h ); + +return ( 1); +} + +/*--------------------------------------------*/ + +int convertmans( char *filespec, char *hlpfilename, int base_level, int append ) +{ +int status=1; +manPtr manroot=NULL, m; +FILE *hlp; + +if ( append ){ + hlp = fopen( hlpfilename,"a+"); +}else{ + hlp = fopen( hlpfilename,"w"); +} + +if ( hlp == NULL ) return( vaxc$errno ); + +status = listofmans( filespec, &manroot ); +if ( !(status&1) ) return( status ); + +for ( m = manroot ; m ; m = m->next ){ + status = convertman( m->filename, hlp , base_level ); + if ( !(status&1) ){ + fprintf(stderr,"Convertman of %s went wrong\n", m->filename); + break; + } +} +freeman( &manroot ); +return( status ); +} + +/*--------------------------------------------*/ +void print_help() +{ + fprintf( stderr, "Usage: [-a] [-b x] convertman <manfilespec> <helptextfile>\n" ); + fprintf( stderr, " -a append <manfilespec> to <helptextfile>\n" ); + fprintf( stderr, " -b <baselevel> if no headers found create one with level <baselevel>\n" ); + fprintf( stderr, " and the filename as title.\n" ); +} +/*--------------------------------------------*/ + +main ( int argc, char **argv ) +{ +int status; +int i,j; +int append, base_level, basechange; +char *manfile=NULL; +char *helpfile=NULL; + +if ( argc < 3 ){ + print_help(); + return( 1 ) ; +} + +append = 0; +base_level = 1; +basechange = 0; + +for ( i = 1; i < argc; ++i){ + if ( argv[i][0] == '-' ){ + for( j = 1; argv[i][j] ; ++j ){ + switch( argv[i][j] ){ + case 'a': + append = 1; + break; + case 'b': + if ( (i+1) < argc ){ + base_level = atoi( argv[ i + 1 ] ); + basechange = 1; + } + break; + } + } + if ( basechange){ + basechange = 0; + i = i + 1; + } + }else{ + if ( manfile == NULL ){ + manfile = strdup( argv[i]); + } else if ( helpfile == NULL ){ + helpfile = strdup( argv[i]); + } else { + fprintf( stderr, "Unrecognized parameter : %s\n", argv[i]); + } + } +} + + +/* fprintf( stderr,"manfile: %s, helpfile: %s, append: %d, base_level : %d\n", + manfile, helpfile, append, base_level); +*/ + +status = convertmans( manfile, helpfile, base_level, append ); + +free( manfile ); +free( helpfile ); + +return( status ); +} + + diff --git a/vms/readme.vms b/vms/readme.vms new file mode 100644 index 0000000..ea11ec3 --- /dev/null +++ b/vms/readme.vms @@ -0,0 +1,319 @@ +*These are the porting notes to OpenVMS, as of 7 April 2010 +by Jose Baars. This file will be installed as +libssh2*.release_notes by the product install kit. + + +LIBSSH2 +------- + +LIBSSH2 is a client-side library written in C that aims to +implement the SSH2 protocol. It is an open source project, +to be found at http://libssh2.org. + +GNV +--- + +The library uses the GNV prefix, on advise of the kind supporter +of the GNV project, John Malmberg. + +Installing the PCSI kit +======================= + +Prerequisites +------------- +- VMS version 8.3 minimal. + See the remarks at prerequisites for building the kit +- TCP/IP stack, both TCP/IP services and Multinet should work. + See the remarks at prerequisites for building the kit +- HP OPENSSL V1.3 minimal. + See the remarks at prerequisites for building the kit +- JEM ZLIB V1.2-3E1 minimal. + See the remarks at prerequisites for building the kit + +The first three dependencies are tested at installation time, and +installation will fail if any these products are not installed. +The ZLIB dependency is not tested by the product installation +procedure, as libssh2 will probably be installed as part of +multiple libraries including zlib. + +Install +------- + + +The kit will install gnv$libssh2.exe in a directory tree that might +already be available on your system if you have installed other gnv* +libraries or utilities. + +The directory tree for gnv$libssh2.exe will be like this: + +[gnv] -- [usr] -- [include] -- [libssh2] include files for libssh2 + [lib] gnv$libssh2_x_y_z.exe + [share] -- [doc] -- [libssh2] libssh2.hlb, + release notes (this file), + libssh2 release notes + +optional: + [example] libssh2_examples-x_y_z.bck + [common_src] libssh2-x_y_z_src.bck + +By default, it will install the shared image and include files to +SYS$COMMON:[GNV...]. + +You can override this destination by specifying the destination +directory after /DESTINATION= on the product install command line. +This is particularly of use when installing the library on a cluster +without a common system disk. + +Please ignore the following warnings, as the kit is not signed : + +%PCSI-I-CANNOTVAL, cannot validate dev:[dir]JCB-AXPVMS-LIBSSH2-V0102-05D20100402-1.PCSI +-PCSI-I-NOTSIGNED, product kit is not signed and therefore has no manifest file + +Optionally, you can install a backup saveset with some programming examples, +or a backupo saveset with the complete libssh2 source tree. + +you will need to answer 'NO' to the question +'Do you want the default for all options'. + +and 'YES' to either or both the following questions: + + Do you want the libssh2 C programming examples ? [NO] + + Do you want the complete libssh2 source tree ? [NO] + + +Post installation tasks +----------------------- + +Although we will try to maintain upward compatibility of libssh2, +this can not be guaranteed by the libssh2 project itself for OpenVMS, +nor eternally by us. + +To use libssh2 effectively, you will have to define a system logical +to point to the shared image. If you are willing to take the gamble, +define this logical in your systartup like so: + +$ define/system/executive gnv$libssh2 dev:[dir..]gnv$libssh2_x_y_z.exe + +Optionally, you can install the executbale like so: + +$ mc sysgen install dev:[dir..]gnv$libssh2_x_y_z.exe/open/share/header + +Link your programs against gnv$libssh2, and when upgrading libssh2 +test thoroughly. + +If you want to be extra cautious define a system logical like this: + +$ define/system/executive gnv$libssh2_x_y_z dev:[dir..]gnv$libssh2_x_y_z.exe + +Link programs against gnv$libssh2_x_y_z, and when upgrading libssh2 +link against new versions. + +It is probably more convenient in the last case to link against the object +library provided in the source backup saveset. Both an uppercase and a +mixed case object library, called libssh2.olb and libssh2_asis.olb +are provided. + + +Compiling and linking against libssh2 +------------------------------------- + +The shared image library has a vector table with both uppercase and +mixed case entry points, allowing to link directly against the shared +image wether you need the /NAMES=AS_IS or not. + +To link successfully, you MUST use /NAMES=shortened, as some function +names in libssh2 are longer than the VMS maximum of 32 characters. + +If you chose to install the examples, you can unpack the backup +saveset by + +backup/sel=*.c device:[gnv.usr.share.doc.libssh2.examples]libssh2_examples-x_y_z.bck - + [] + +They can by compiled and linked by these commands ( provided you have defined +the gnv$libssh2 logical) : + +$ cc/include=dev:[gnv.usr.include.libssh2] xxx.c/names=shortened +$ link/opt=sys$input: xxx.obj +gnv$libssh2/share + + + + +Building gnv$libssh2 +==================== + +You can build gnv$libssh2 yourself, which may have advantages, as the library is +in full development, very regularly new features are added. + +For production use, it is probably advisable to use a stable version, and +link against that. To check out new features, statically linking against +the object library is probably more practical, to avoid compatibility +issues. + + +Prerequisites +------------- + +You will need to have the following available: + +- An Alpha or Itanium VMS system. Due to dependencies on zlib, ssl and ODS-5, + support on VAXen would be cumbersome at least. + +- VMS version 8.3 minimal. This is a requirement of gnv$zlibshr.exe against + which shared image library libssh2 is linked. If you use another zlib + to link against, you can make it work under lower versions of VMS. + I have made it work on VMS 7.3-2 with not a lot of difficulty. + Also, if you are not interested in compression, you can choose not + to link against zlib at all; in that case comment out the + #define LIBSSH2_HAVE_ZLIB in libssh2_config.h. + +- TCP/IP services or Multinet for OpenVMS. + TCPWare has not been tested. + +- The HP OpenSSL product. Of course, with tweaking, you can probably link + it against the OpenSSL library, but that is not what I have used. + +- A C compiler. I don't know any other working C compilers than + the DEC/Compac/HP-C compiler on VMS. + +- An ODS-5 disk. With tweaking you'll get it to work on an ODS-2 + disk, but it is unpractical to do so. + +- A version of VMSTAR that understands ODS-5 disks and extended + filenames. Look here: + http://ftp.process.com/ftp/vms-freeware/fileserv/vmstar.zip + +- gunzip, available for instance at Steven M Schweda's website: + http://antinode.info/ftp/gzip/gzip-1_3_12b_vms/gzip-1_3_12b_vms.zip + +Optional: + +- curl, to be found at http://curl.haxx.se + You might want to use curl to download the libssh2 kit directly + to you VMS machine. Interestingly, sftp in curl is implemented using + libssh2, soon to be expected on VMS as well, hopefully. + +Downloading libssh2 +------------------- + +At the website of libssh2, you can find stable and daily gzipped +tarballs. if you have a computer connected to internet you can +download a daily build yourself by a procedure that looks a lot like +this ( fill out your own proxy user/password, set up right symbols to +gunzip, vmstar and curl and set up the libssh2 build version): + +$ libssh2_version = "1.2.6" +$! +$ proxy_line = " ""-U"" ""''proxy_userpass'"" ""-x"" ""''proxy_hostport'"" " +$! +$ currentday = f$cvtime(,,"date") - "-" - "-" +$! +$ set def mydev:[mydir.libssh2] +$! +$ if f$search("libssh2-''libssh2_version'-''currentday'.tar.gz") .nes. "" +$ then +$ delete libssh2-'libssh2_version'-'currentday'.tar.gz;* +$ endif +$! +$ curl 'proxy_line' "http://libssh2.org/snapshots/libssh2-''libssh2_version'-''currentday'.tar.gz" - + -o libssh2-'libssh2_version'-'currentday'.tar.gz +$! +$! +$ if f$search("libssh2-''libssh2_version'-''currentday'.tar.;") .nes. "" +$ then +$ delete libssh2-'libssh2_version'-'currentday'.tar.;* +$ endif +$! +$ gunzip libssh2-'libssh2_version'-'currentday'.tar.gz +$! +$ tarfile = f$search("libssh2-''libssh2_version'-''currentday'.tar.;") +$ vmstar xf 'tarfile' + +Downloading a stable build will need you to get rid of the currentday. + +After the download, you should have a directory tree with a toplevel +directory called [libssh2-x.y.z-yyyymmdd]. +One of the subdirectories is called vms. + +Getting the libssh2 sources from the source backup in the binary kit +-------------------------------------------------------------------- + +During installation of the binary kit, you are given the option +of installing the sources. If chosen, a backup saveset with +the complete libssh2 directory is made available in +[gnv.common_src]. + +By restoring this backup saveset, you end up with the same +set of files as by the direct download from libssh2.org. + + +Building the library +-------------------- + +To avoid all kinds of misunderstandings caused by firewalls thinking that +a .com file must be an MS-DOS executable, all command procedures are called +.dcl. + +Go to the vms subdirectory in the download tree, and issue the following +command: + +@libssh2_make_lib.dcl + +This should produce libssh2_x_y_z.exe in this same vms directory. + + + +Building the examples +--------------------- + +A number of examples are also part of the full libssh2 delivery. +You can compile and link them either against the object library +produced when building the shared image, or against the shared image +produced in the step before. + +You can compile only one of the examples by giving only the +name part of the filename of the example as p1 to the +build procedure: + +@libssh2_make_example.dcl + +or for instance + +@libssh2_make_example.dcl sftp + +By default, libssh2_make_example.dcl links to the object libraries +produced by the libssh2_make_lib.dcl procedure. If you want to link +against the shared image library made in the same procedure, invoke +the procedure like so: + +@libssh2_make_example.dcl sftp "SHARED" + +The procdure defines a process logical gnv$libssh2 pointing to the shared +image library in the directory, which obviously will not survive a logout. + + +Building the help library +------------------------- + +The man pages can be converted to a VMS help library by issuing +this command : + +@libssh2_make_help.dcl + +It uses a simple but fairly effective c program man2help.c +to achieve this. + +Building a PCSI kit +------------------- + +When you have built the shared library and the help library, +you can build a PCSI kit by issueing this command: + +@libssh2_make_kit.dcl + + + + +