diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 0db9230a2cb55cf33aacd09fa8afba883951daaf..405a6798fa329b527dc79282fd47c1da2cc35584 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -652,7 +652,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = @top_srcdir@/include @top_srcdir@/src +INPUT = @top_srcdir@/include @top_srcdir@/src @top_srcdir@/doc # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -903,7 +903,7 @@ HTML_FOOTER = # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this # tag will in the future become obsolete. -HTML_STYLESHEET = +HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional # user-defined cascading style sheet that is included after the standard @@ -913,7 +913,7 @@ HTML_STYLESHEET = # robust against future updates. Doxygen will copy the style sheet file to # the output directory. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = libmtime.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1321,7 +1321,7 @@ EXTRA_PACKAGES = # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! -LATEX_HEADER = ComptesRendus.tex +LATEX_HEADER = libmtime.tex # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after diff --git a/doc/examples/example.f90 b/doc/examples/example.f90 index 80c283485003c26d365240c6b2eb5c39140eee03..017d6f1a06a611f19c8cd0ae56c221111e7e3ba9 100644 --- a/doc/examples/example.f90 +++ b/doc/examples/example.f90 @@ -28,7 +28,7 @@ module mo_event_manager type(datetime), pointer :: model_reference_date => null() logical :: linitialized = .false. -!! [example_event_manager] + contains subroutine initEventManager(referenceDate) diff --git a/doc/libmtime.css b/doc/libmtime.css new file mode 100644 index 0000000000000000000000000000000000000000..b50e7cfab442f92a8a6c78a618d141bba616035b --- /dev/null +++ b/doc/libmtime.css @@ -0,0 +1,1454 @@ +/* The standard CSS for doxygen 1.8.10 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #52A59C; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px #676DB6; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #FFDD80; + border: 1px solid #52A59C; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #52A59C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #52A59C; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/include/libmtime.h b/doc/libmtime.dox similarity index 98% rename from include/libmtime.h rename to doc/libmtime.dox index a31bf4a12448becb591f1382d09a270bed32a40d..af65f5273ddfdba5f31fdc3ca13a79abd031aa3c 100644 --- a/include/libmtime.h +++ b/doc/libmtime.dox @@ -1,4 +1,4 @@ -/** @file libmtime.h Documentation header file */ +/** @file libmtime.dox Documentation header file */ /** @mainpage libmtime - A model time management library * diff --git a/doc/ComptesRendus.tex b/doc/libmtime.tex similarity index 100% rename from doc/ComptesRendus.tex rename to doc/libmtime.tex diff --git a/include/mtime_timedelta.h b/include/mtime_timedelta.h index 7742bf4de76e8c980465b75af0b01e9a202f486a..2f2c2588d1d9b163d82fef5e694c9d746652a724 100644 --- a/include/mtime_timedelta.h +++ b/include/mtime_timedelta.h @@ -49,11 +49,16 @@ struct _timedelta }; -/* Used only for storing division of two time-delta results. */ +/** + * @struct _divisionquotienttimespan + * + * @brief Struct _divisionquotienttimespan is used for storing division of two time-delta results. + */ + struct _divisionquotienttimespan { - int64_t quotient; - int64_t remainder_in_ms; + int64_t quotient; ///< Quotient of two timedeltas. + int64_t remainder_in_ms; ///< Remainder in milli seconds of two timedeltas division. }; struct _timedelta* diff --git a/src/libmtime.f90 b/src/libmtime.f90 index 426599052626dc270c376d03cb35699bb8a85a97..cd65243551281e50ab0c597d9a81bf62879fd192 100644 --- a/src/libmtime.f90 +++ b/src/libmtime.f90 @@ -119,7 +119,8 @@ contains !> !! @brief convert the calendar identifier into a human readable string !! - !! @param[out] string the calendar type verbose + !! @param[out] string the calendar type verbose + !! @param[out] errno optional, error message !! subroutine calendarToString(string, errno) !TESTED-OK character(len=max_calendar_str_len), intent(out) :: string @@ -160,8 +161,8 @@ module mtime_julianday integer, parameter :: max_julianday_str_len = 32 ! type, bind(c) :: julianday - integer(c_int64_t) :: day !> the actual Julian day - integer(c_int64_t) :: ms !> the milisecond on that particular day + integer(c_int64_t) :: day !< the actual Julian day + integer(c_int64_t) :: ms !< the milisecond on that particular day end type julianday ! !> @cond DOXYGEN_IGNORE_THIS @@ -195,6 +196,7 @@ contains !! !! @param[in] day the Julian day !! @param[in] ms an integer denoting the actual milli seconds of a day + !! @param[out] errno optional, error message !! @return ret_julianday a pointer of type(julianday) function newJulianday(day, ms, errno) result(ret_julianday) !OK-TESTED. type(julianday), pointer :: ret_julianday @@ -223,6 +225,7 @@ contains !! !! @param[in] my_julianday a pointer to type(julianday). The Julian day to be converted to a string !! @param[out] string the Julian day verbose + !! @param[out] errno optional, error message subroutine juliandayToString(my_julianday, string, errno) !OK-TESTED. type(julianday), pointer :: my_julianday character(len=max_julianday_str_len), intent(out) :: string @@ -278,6 +281,7 @@ module mtime_date module procedure newdatefromconstructandcopy end interface newdate ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_newdatefromstring(string) result(c_pointer) bind(c, name='newDate') @@ -326,6 +330,7 @@ module mtime_date end function my_datetoposixstring ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! @@ -333,6 +338,7 @@ contains !! @brief construct a new date !! !! @param[in] string an ISO 8601 conforming date string + !! @param[out] errno optional, error message !! @return ret_date a pointer of type(date) function newdatefromstring(string,errno) result(ret_date) !OK-TESTED. type(date), pointer :: ret_date @@ -344,7 +350,14 @@ contains if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 1 call c_f_pointer(c_pointer, ret_date) end function newdatefromstring - !TODO: Doxy comments. + !> + !! @brief construct a new date from raw date + !! + !! @param[in] year the year + !! @param[in] month the month + !! @param[in] day the day + !! @param[out] errno optional, error message + !! @return ret_date a pointer of type(date) function newdatefromraw_yi8(year, month, day, errno) result(ret_date) !OK-TESTED. type(date), pointer :: ret_date integer(c_int64_t), intent(in) :: year @@ -356,7 +369,14 @@ contains if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 2 call c_f_pointer(c_pointer, ret_date) end function newdatefromraw_yi8 - !TODO: Doxy comments. + !> + !! @brief construct a new date from raw date + !! + !! @param[in] year the year + !! @param[in] month the month + !! @param[in] day the day + !! @param[out] errno optional, error message + !! @return ret_date a pointer of type(date) function newdatefromraw(year, month, day, errno) result(ret_date) !OK-TESTED. type(date), pointer :: ret_date integer(c_int), intent(in) :: year, month, day @@ -367,7 +387,12 @@ contains if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 3 call c_f_pointer(c_pointer, ret_date) end function newdatefromraw - !TODO: Doxy comments.. + !> + !! @brief construct a new date from an existing by construct and copy + !! + !! @param[in] src a pointer of type(date) + !! @param[out] errno optional, error message + !! @return ret_date a pointer of type(date) function newdatefromconstructandcopy(src, errno) result(dest) !OK-TESTED type(date), pointer :: dest type(date), pointer :: src @@ -378,7 +403,7 @@ contains if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 4 call c_f_pointer(c_pointer, dest) end function newdatefromconstructandcopy - ! + !> !! @brief destructor for a date !! !! @param[in] my_date a pointer of type(date) @@ -387,7 +412,12 @@ contains call my_deallocatedate(c_loc(my_date)) my_date => null() end subroutine deallocateDate - ! + !> + !! @brief repace an existing date by a given one + !! + !! @param[in] src a pointer of type(date) + !! @param[out] dest a pointer of type(date) + !! @param[out] errno optional, error message subroutine replaceDate(dest, src, errno) !OK-TESTED. type(date), target, intent(inout) :: dest type(date), target, intent(in) :: src @@ -398,6 +428,7 @@ contains if ((.not. c_associated(dummy_ptr)) .and. present(errno)) errno = 2 * 100 + 6 end subroutine replaceDate ! + !! @param[out] errno optional, error message subroutine dateToString(my_date, string, errno) !OK-TESTED. type(date), pointer :: my_date character(len=max_date_str_len) :: string @@ -413,6 +444,7 @@ contains string(i:len(string)) = ' ' end subroutine dateToString ! + !! @param[out] errno optional, error message subroutine dateToPosixString(my_date, string, fmtstr, errno) !OK-TESTED. type(date), pointer :: my_date character(len=max_date_str_len) :: string @@ -472,6 +504,7 @@ module mtime_time module procedure newtimefromconstructandcopy end interface newtime ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_newtimefromstring(string) result(c_pointer) bind(c, name='newTime') @@ -519,9 +552,11 @@ module mtime_time end function my_timetoposixstring ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! + !! @param[out] errno optional, error message function newtimefromstring(string, errno) result(ret_time) !OK-TESTED. type(time), pointer :: ret_time character(len=*), intent(in) :: string @@ -533,6 +568,7 @@ contains call c_f_pointer(c_pointer, ret_time) end function newtimefromstring ! + !! @param[out] errno optional, error message function newtimefromraw(hour, minute, second, ms, errno) result(ret_time) !OK-TESTED. type(time), pointer :: ret_time integer(c_int), intent(in) :: hour, minute, second, ms @@ -544,6 +580,7 @@ contains call c_f_pointer(c_pointer, ret_time) end function newtimefromraw ! + !! @param[out] errno optional, error message function newtimefromconstructandcopy(src, errno) result(dest) !OK-TESTED. type(time), pointer :: dest type(time), pointer :: src @@ -561,6 +598,7 @@ contains my_time => null() end subroutine deallocateTime ! + !! @param[out] errno optional, error message subroutine replaceTime(dest,src,errno) !OK-TESTED. type(time), target, intent(in) :: src type(time), target, intent(inout) :: dest @@ -571,6 +609,7 @@ contains if ((.not.c_associated(dummy_ptr)) .and. present(errno)) errno = 3 * 100 + 5 end subroutine replaceTime ! + !! @param[out] errno optional, error message subroutine timeToString(my_time, string, errno) !OK-TESTED. type(time), pointer :: my_time character(len=max_time_str_len) :: string @@ -586,6 +625,7 @@ contains string(i:len(string)) = ' ' end subroutine timeToString ! + !! @param[out] errno optional, error message subroutine timeToPosixString(my_time, string, fmtstr, errno) !OK-TESTED. type(time), pointer :: my_time character(len=max_time_str_len) :: string @@ -701,6 +741,7 @@ module mtime_datetime module procedure datetime_ne end interface operator (/=) ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_newdatetime(string) result(c_pointer) bind(c, name='newDateTime') @@ -800,9 +841,11 @@ module mtime_datetime end function my_getdatetimefromjulianday ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! + !! @param[out] errno optional, error message function newdatetimefromstring(string, errno) result(ret_datetime) !OK-TESTED type(datetime), pointer :: ret_datetime character(len=*), intent(in) :: string @@ -814,6 +857,7 @@ contains call c_f_pointer(c_pointer, ret_datetime) end function newdatetimefromstring ! + !! @param[out] errno optional, error message function newdatetimefromraw_yi8(year, month, day, hour, minute, second, ms, errno) result(ret_datetime) !OK-TESTED type(datetime), pointer :: ret_datetime integer(c_int64_t), intent(in) :: year @@ -826,6 +870,7 @@ contains call c_f_pointer(c_pointer, ret_datetime) end function newdatetimefromraw_yi8 ! + !! @param[out] errno optional, error message function newdatetimefromraw(year, month, day, hour, minute, second, ms, errno) result(ret_datetime) !OK-TESTED type(datetime), pointer :: ret_datetime integer(c_int), intent(in) :: year, month, day, hour, minute, second, ms @@ -837,6 +882,7 @@ contains call c_f_pointer(c_pointer, ret_datetime) end function newdatetimefromraw ! + !! @param[out] errno optional, error message function newdatetimefromconstructandcopy(src, errno) result(dest) !OK-TESTED. type(datetime), pointer :: dest type(datetime), pointer :: src @@ -887,6 +933,7 @@ contains nullify(my_datetime) end subroutine deallocateDatetime ! + !! @param[out] errno optional, error message subroutine datetimeToString(my_datetime, string, errno) !OK-TESTED type(datetime), pointer :: my_datetime character(len=max_datetime_str_len) :: string @@ -902,6 +949,7 @@ contains string(i:len(string)) = ' ' end subroutine datetimeToString ! + !! @param[out] errno optional, error message subroutine datetimeToPosixString(my_datetime, string, fmtstr, errno) !OK-TESTED. type(datetime), pointer :: my_datetime character(len=max_datetime_str_len) :: string @@ -1004,6 +1052,7 @@ contains endif end function datetime_ne ! + !! @param[out] errno optional, error message function getNoOfDaysInMonthDateTime(dt, errno) !OK-TESTED. type(datetime), target :: dt integer(c_int) :: getNoOfDaysInMonthDateTime @@ -1013,6 +1062,7 @@ contains if (getNoOfDaysInMonthDateTime == 0 .and. present(errno)) errno = 4 * 100 + 15 end function getNoOfDaysInMonthDateTime ! + !! @param[out] errno optional, error message function getNoOfDaysInYearDateTime(dt, errno) !OK-TESTED. type(datetime), target :: dt integer(c_int) :: getNoOfDaysInYearDateTime @@ -1022,6 +1072,7 @@ contains if (getNoOfDaysInYearDateTime == 0 .and. present(errno)) errno = 4 * 100 + 16 end function getNoOfDaysInYearDateTime ! + !! @param[out] errno optional, error message function getDayOfYearFromDateTime(dt, errno) !OK-TESTED. type(datetime), target :: dt integer(c_int) :: getDayOfYearFromDateTime @@ -1031,6 +1082,7 @@ contains if (getDayOfYearFromDateTime == 0 .and. present(errno)) errno = 4 * 100 + 17 end function getDayOfYearFromDateTime ! + !! @param[out] errno optional, error message function getNoOfSecondsElapsedInMonthDateTime(dt, errno) !OK-TESTED. type(datetime), target :: dt integer(c_int64_t) :: getNoOfSecondsElapsedInMonthDateTime @@ -1040,6 +1092,7 @@ contains if (getNoOfSecondsElapsedInMonthDateTime == -1 .and. present(errno)) errno = 4 * 100 + 18 end function getNoOfSecondsElapsedInMonthDateTime ! + !! @param[out] errno optional, error message function getNoOfSecondsElapsedInDayDateTime(dt, errno) !OK-TESTED. type(datetime), target :: dt integer(c_int) :: getNoOfSecondsElapsedInDayDateTime @@ -1049,6 +1102,7 @@ contains if (getNoOfSecondsElapsedInDayDateTime == -1 .and. present(errno)) errno = 4 * 100 + 19 end function getNoOfSecondsElapsedInDayDateTime ! + !! @param[out] errno optional, error message subroutine getJulianDayFromDatetime(dt, jd, errno) !OK-TESTED. type(datetime), target :: dt type(julianday), pointer :: jd @@ -1059,6 +1113,7 @@ contains if ((.not.c_associated(dummy_ptr)) .and. present(errno)) errno = 4 * 100 + 20 end subroutine getJulianDayFromDatetime ! + !! @param[out] errno optional, error message subroutine getDatetimeFromJulianDay(jd, dt, errno) type(julianday), target :: jd type(datetime), pointer :: dt @@ -1196,6 +1251,7 @@ module mtime_timedelta module procedure getPTStringFromSecondsDouble end interface getPTStringFromSeconds ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_newtimedeltafromstring(string) result(c_pointer) bind(c, name='newTimeDelta') @@ -1371,9 +1427,11 @@ module mtime_timedelta end function my_divideDatetimeDifferenceInSeconds ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! + !! @param[out] errno optional, error message function newtimedeltafromstring(string, errno) result(ret_timedelta) !OK-TESTED. type(timedelta), pointer :: ret_timedelta character(len=*), intent(in) :: string @@ -1389,6 +1447,7 @@ contains endif end function newtimedeltafromstring ! + !! @param[out] errno optional, error message function newtimedeltafromraw(sign, year, month, day, hour, minute, second, ms, errno) result(ret_timedelta) type(timedelta), pointer :: ret_timedelta character(len=*), intent(in) :: sign @@ -1401,6 +1460,7 @@ contains call c_f_pointer(c_pointer, ret_timedelta) end function newtimedeltafromraw ! + !! @param[out] errno optional, error message function newtimedeltafromraw_yi8(sign, year, month, day, hour, minute, second, ms, errno) result(ret_timedelta) type(timedelta), pointer :: ret_timedelta character(len=*), intent(in) :: sign @@ -1414,6 +1474,7 @@ contains call c_f_pointer(c_pointer, ret_timedelta) end function newtimedeltafromraw_yi8 ! + !! @param[out] errno optional, error message function newtimedeltafromconstructandcopy(src, errno) result(dest) !OK-TESTED. type(timedelta), pointer :: dest type(timedelta), pointer :: src @@ -1524,6 +1585,7 @@ contains end function getTimeDeltaFromDateTime ! !WARNING: TD 0 is error. If you know your TD is 0, ignore the error flag. + !! @param[out] errno optional, error message function getTotalMilliSecondsTimeDelta(td, dt, errno) !OK-TESTED. integer(c_int64_t) :: getTotalMilliSecondsTimeDelta type(timedelta), target, intent(in):: td @@ -1535,6 +1597,7 @@ contains end function getTotalMilliSecondsTimeDelta ! !WARNING: TD 0 is error. If you know your TD is 0, ignore the error flag. + !! @param[out] errno optional, error message function getTotalSecondsTimeDelta(td, dt, errno) !OK-TESTED. integer(c_int64_t) :: getTotalSecondsTimeDelta type(timedelta), pointer :: td @@ -1545,6 +1608,7 @@ contains if ((getTotalSecondsTimeDelta == 0) .and. present(errno)) errno = 5 * 100 + 9 end function getTotalSecondsTimeDelta ! + !! @param[out] errno optional, error message subroutine timedeltaToString(my_timedelta, string, errno) !OK-TESTED. type(timedelta), pointer :: my_timedelta character(len=max_timedelta_str_len) :: string @@ -1815,6 +1879,7 @@ module mtime_events module procedure newEventWithDataTypes end interface newEvent ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_newevent(name, referenceDate, firstdate, lastDate, interval, offset) result(c_pointer) & @@ -1948,9 +2013,11 @@ module mtime_events end function my_geteventislastinyear ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! + !! @param[out] errno optional, error message function newEventWithString(name, referenceDate, firstdate, lastDate, interval, offset, errno) result(ret_event) !OK-TESTED. type(event), pointer :: ret_event character(len=*), intent(in) :: name @@ -1982,6 +2049,7 @@ contains call c_f_pointer(c_pointer, ret_event) end function newEventWithString ! + !! @param[out] errno optional, error message function newEventWithDataTypes(name, referenceDate, firstdate, lastDate, interval, offset, errno) result(ret_event) !OK-TESTED. type(event), pointer :: ret_event character(len=*), intent(in) :: name @@ -2012,6 +2080,7 @@ contains my_event => null() end subroutine deallocateEvent ! + !! @param[out] errno optional, error message subroutine eventToString(my_event, string, errno) !TODO:C code still incomplete. type(event), pointer :: my_event character(len=max_eventname_str_len) :: string @@ -2070,6 +2139,7 @@ contains ret = my_iseventnextinnextyears(c_loc(my_event)) end function iseventNextInNextYears ! + !! @param[out] errno optional, error message subroutine getTriggerNextEventAtDateTime(my_event,my_currentdatetime,my_datetime, errno) type(event), target, intent(in) :: my_event type(datetime), target, intent(in) :: my_currentdatetime @@ -2081,6 +2151,7 @@ contains if ((.not.c_associated(dummy_ptr)) .and. present(errno)) errno = 6 * 100 + 8 end subroutine getTriggerNextEventAtDateTime ! + !! @param[out] errno optional, error message subroutine getTriggeredPreviousEventAtDateTime(my_event,my_datetime,errno) type(event), target, intent(in) :: my_event type(datetime), target :: my_datetime @@ -2097,6 +2168,7 @@ contains ret_evtid = my_event%eventId end function getEventId ! + !! @param[out] errno optional, error message subroutine getEventName(my_event, string, errno) !OK-TESTED. type(event), pointer :: my_event character(len=max_eventname_str_len) :: string @@ -2243,6 +2315,7 @@ module mtime_eventgroups type(c_ptr) :: firstEventInGroup end type eventgroup ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_neweventgroup(name) result(c_pointer) bind(c, name='newEventGroup') @@ -2278,9 +2351,11 @@ module mtime_eventgroups end function my_geteventgroupname ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! + !! @param[out] errno optional, error message function newEventGroup(name, errno) result(ret_eventgroup) !OK-TESTED. type(eventgroup), pointer :: ret_eventgroup character(len=*), intent(in) :: name @@ -2318,6 +2393,7 @@ contains ret_grpid = my_eventgroup%eventGroupId end function getEventGroupId ! + !! @param[out] errno optional, error message subroutine getEventGroupName(my_eventgroup, string, errno) !TESTED-OK. type(eventgroup), pointer :: my_eventgroup character(len=max_groupname_str_len) :: string @@ -2379,8 +2455,10 @@ module mtime_utilities public :: getRepetitions public :: max_repetition_str_len ! + !> provides a string length for the maximum handable repetition string length input integer, parameter :: max_repetition_str_len = 132 ! + !> @cond DOXYGEN_IGNORE_THIS interface ! function my_getRepetitions(repetitionString) bind(c, name='getRepetitions') @@ -2400,6 +2478,7 @@ module mtime_utilities end subroutine my_splitRepetitionString ! end interface + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! @@ -2486,28 +2565,34 @@ module mtime ! public ! - ! integer, parameter :: no_of_sec_in_a_day = 86400 - ! integer, parameter :: no_of_sec_in_a_hour = 3600 - ! integer, parameter :: no_of_sec_in_a_minute = 60 - ! ! - ! integer, parameter :: no_of_ms_in_a_day = 86400000 - ! integer, parameter :: no_of_ms_in_half_day = 43200000 - ! integer, parameter :: no_of_ms_in_a_hour = 3600000 - ! integer, parameter :: no_of_ms_in_a_minute = 60000 - ! integer, parameter :: no_of_ms_in_a_second = 1000 - ! - integer(c_int), bind(c,name='NO_OF_SEC_IN_A_DAY') :: no_of_sec_in_a_day - integer(c_int), bind(c,name='NO_OF_SEC_IN_A_HOUR') :: no_of_sec_in_a_hour - integer(c_int), bind(c,name='NO_OF_SEC_IN_A_MINUTE') :: no_of_sec_in_a_minute +#ifdef DOXYGEN_DOCUMENTATION_ONLY + integer, parameter :: no_of_sec_in_a_day = 86400 !!< number of seconds per day, defined in C + integer, parameter :: no_of_sec_in_a_hour = 3600 !!< number of seconds per hour, defined in C + integer, parameter :: no_of_sec_in_a_minute = 60 !!< number of seconds per minute, defined in C ! - integer(c_int), bind(c,name='NO_OF_MS_IN_A_DAY') :: no_of_ms_in_a_day - integer(c_int), bind(c,name='NO_OF_MS_IN_HALF_DAY') :: no_of_ms_in_half_day - integer(c_int), bind(c,name='NO_OF_MS_IN_A_HOUR') :: no_of_ms_in_a_hour - integer(c_int), bind(c,name='NO_OF_MS_IN_A_MINUTE') :: no_of_ms_in_a_minute - integer(c_int), bind(c,name='NO_OF_MS_IN_A_SECOND') :: no_of_ms_in_a_second - ! + integer, parameter :: no_of_ms_in_a_day = 86400000 !!< number of milli-seconds per day, defined in C + integer, parameter :: no_of_ms_in_half_day = 43200000 !!< number of milli-seconds per 12 hours, defined in C + integer, parameter :: no_of_ms_in_a_hour = 3600000 !!< number of milli-seconds per hour, defined in C + integer, parameter :: no_of_ms_in_a_minute = 60000 !!< number of milli-seconds per minute, defined in C + integer, parameter :: no_of_ms_in_a_second = 1000 !!< number of milli-seconds per second, defined in C +#endif + ! + !> @cond DOXYGEN_IGNORE_THIS + integer(c_int), bind(c,name='NO_OF_SEC_IN_A_DAY') :: no_of_sec_in_a_day + integer(c_int), bind(c,name='NO_OF_SEC_IN_A_HOUR') :: no_of_sec_in_a_hour + integer(c_int), bind(c,name='NO_OF_SEC_IN_A_MINUTE') :: no_of_sec_in_a_minute + ! + integer(c_int), bind(c,name='NO_OF_MS_IN_A_DAY') :: no_of_ms_in_a_day + integer(c_int), bind(c,name='NO_OF_MS_IN_HALF_DAY') :: no_of_ms_in_half_day + integer(c_int), bind(c,name='NO_OF_MS_IN_A_HOUR') :: no_of_ms_in_a_hour + integer(c_int), bind(c,name='NO_OF_MS_IN_A_MINUTE') :: no_of_ms_in_a_minute + integer(c_int), bind(c,name='NO_OF_MS_IN_A_SECOND') :: no_of_ms_in_a_second + !> @endcond DOXYGEN_IGNORE_THIS + ! + !> provides a string length for the maximum error string length integer, parameter :: max_mtime_error_str_len = 132 ! + !> @cond DOXYGEN_IGNORE_THIS integer, parameter :: no_error = 0, & & calendar_calendartostring = 0*100 + 1, & @@ -2560,9 +2645,12 @@ module mtime & eventgroups_neweventgroup = 7*100 + 1, & & eventgroups_geteventgroupname = 7*100 + 6 + !> @endcond DOXYGEN_IGNORE_THIS ! contains ! + !! @param[in] errno error message number + !! @param[out] error_message associated error message subroutine mtime_strerror(errno, error_message) integer, intent(in) :: errno character(len=*), intent(out) :: error_message