# config

name: css
value:
  /* General settings for the entire page */
  body {
    margin: 0ex 0ex;
    padding: 0px;
    background-color: #fef3bc;
    font-family: sans-serif;
  }

  /* The project logo in the upper left-hand corner of each page */
  div.logo {
    display: inline;
    text-align: center;
    vertical-align: bottom;
    font-weight: bold;
    font-size: 2.5em;
    color: #a09048;
  }

  /* The page title centered at the top of each page */
  div.title {
    display: table-cell;
    font-size: 2em;
    font-weight: bold;
    text-align: left;
    padding: 0 0 0 5px;
    color: #a09048;
    vertical-align: bottom;
    width: 100%;
  }

  /* The login status message in the top right-hand corner */
  div.status {
    display: table-cell;
    text-align: right;
    vertical-align: bottom;
    color: #a09048;
    padding: 5px 5px 0 0;
    font-size: 0.8em;
    font-weight: bold;
  }

  /* The header across the top of the page */
  div.header {
    display: table;
    width: 100%;
  }

  /* The main menu bar that appears at the top of the page beneath
  ** the header */
  div.mainmenu {
    padding: 5px 10px 5px 10px;
    font-size: 0.9em;
    font-weight: bold;
    text-align: center;
    letter-spacing: 1px;
    background-color: #a09048;
    color: black;
  }

  /* The submenu bar that *sometimes* appears below the main menu */
  div.submenu, div.sectionmenu {
    padding: 3px 10px 3px 0px;
    font-size: 0.9em;
    text-align: center;
    background-color: #c0af58;
    color: white;
  }
  div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
  div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited {
    padding: 3px 10px 3px 10px;
    color: white;
    text-decoration: none;
  }
  div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover {
    color: #a09048;
    background-color: white;
  }

  /* All page content from the bottom of the menu or submenu down to
  ** the footer */
  div.content {
    padding: 1ex 5px;
  }
  div.content a { color: #706532; }
  div.content a:link { color: #706532; }
  div.content a:visited { color: #704032; }
  div.content a:hover { background-color: white; color: #706532; }

  /* Some pages have section dividers */
  div.section {
    margin-bottom: 0px;
    margin-top: 1em;
    padding: 3px 3px 0 3px;
    font-size: 1.2em;
    font-weight: bold;
    background-color: #a09048;
    color: white;
  }

  /* The "Date" that occurs on the left hand side of timelines */
  div.divider {
    background: #e1d498;
    border: 2px #a09048 solid;
    font-size: 1em; font-weight: normal;
    padding: .25em;
    margin: .2em 0 .2em 0;
    float: left;
    clear: left;
  }

  /* The footer at the very bottom of the page */
  div.footer {
    font-size: 0.8em;
    margin-top: 12px;
    padding: 5px 10px 5px 10px;
    text-align: right;
    background-color: #a09048;
    color: white;
  }

  /* Hyperlink colors */
  div.footer a { color: white; }
  div.footer a:link { color: white; }
  div.footer a:visited { color: white; }
  div.footer a:hover { background-color: white; color: #558195; }

  /* <verbatim> blocks */
  pre.verbatim {
     background-color: #f5f5f5;
     padding: 0.5em;
  }

  /* The label/value pairs on (for example) the ci page */
  table.label-value th {
    vertical-align: top;
    text-align: right;
    padding: 0.2ex 2ex;
  }


name: header
value:
  <html>
  <head>
  <title>$<project_name>: $<title></title>
  <link rel="alternate" type="application/rss+xml" title="RSS Feed"
        href="$home/timeline.rss">
  <link rel="stylesheet" href="$home/style.css?tan" type="text/css"
        media="screen">
  </head>
  <body>
  <div class="header">
    <div class="logo">
      <img src="$home/logo" alt="logo">
    </div>
    <div class="title">$<title></div>
    <div class="status">
      <div class="logo"><nobr>$<project_name></nobr></div><br/>
      <nobr><th1>
       if {[info exists login]} {
         puts "Logged in as $login"
       } else {
         puts "Not logged in"
       }
    </th1></nobr></div>
  </div>
  <div class="mainmenu">
  <th1>
  html "<a href='$home$index_page'>Home</a>\n"
  if {[anycap jor]} {
    html "<a href='$home/timeline'>Timeline</a>\n"
  }
  if {[hascap oh]} {
    html "<a href='$home/dir?ci=tip'>Files</a>\n"
  }
  if {[hascap o]} {
    html "<a href='$home/brlist'>Branches</a>\n"
    html "<a href='$home/taglist'>Tags</a>\n"
  }
  if {[hascap r]} {
    html "<a href='$home/reportlist'>Tickets</a>\n"
  }
  if {[hascap j]} {
    html "<a href='$home/wiki'>Wiki</a>\n"
  }
  if {[hascap s]} {
    html "<a href='$home/setup'>Admin</a>\n"
  } elseif {[hascap a]} {
    html "<a href='$home/setup_ulist'>Users</a>\n"
  }
  if {[info exists login]} {
    html "<a href='$home/login'>Logout</a>\n"
  } else {
    html "<a href='$home/login'>Login</a>\n"
  }
  </th1></div>


name: project-description
value:
  Work on a successor of the struct/ module in
  <a href="http://tcllib.sourceforge.net/">Tcllib</a>
  using
  <a href="http://jcw.github.com/critcl/">Critcl 3.1</a>
  for C implementations, and expecting Tcl8.5 + TclOO
  for the pure-Tcl implementations of the data structures.

  Major API changes are allowed, and expected.


# reportfmt

title: All Tickets
cols:
  #ffffff Key:
  #f2dcdc Active
  #e8e8e8 Review
  #cfe8bd Fixed
  #bde5d6 Tested
  #cacae5 Deferred
  #c8c8c8 Closed

sqlcode:
  SELECT
    CASE WHEN status IN ('Open','Verified') THEN '#f2dcdc'
         WHEN status='Review' THEN '#e8e8e8'
         WHEN status='Fixed' THEN '#cfe8bd'
         WHEN status='Tested' THEN '#bde5d6'
         WHEN status='Deferred' THEN '#cacae5'
         ELSE '#c8c8c8' END AS 'bgcolor',
    substr(tkt_uuid,1,10) AS '#',
    datetime(tkt_mtime) AS 'mtime',
    type,
    status,
    subsystem,
    title
  FROM ticket


# event

type: ci
user: andreask
comment:
  Copied the stack code from the critcl 3.1 examples over, as well as the tcllib files. Together these serve as starting point for a struct::stack reboot. Main issue is how to share (or not) documentation, benchmarks and testsuite between the various implementations.


type: ci
user: aku
comment:
  Reworked the struct::stack C code, using critcl::class to simplify coding. Found a bug in critcl::class, re handling of namespaced package names.


type: ci
user: aku
ecomment:
  c::slice : Fixed bugs in [36af44a201] build recipe changes. Tweaked the documentation a bit, and regenerated.

comment:
  c::slice : Fixed bugs in [36af44a201] build recipe changes. Tweaked the documentaiton a bit, and regenerated.


type: ci
user: aku
comment:
  c::stack : Documentation added, build recipes fixed, and request proper version of critcl::class to fix the package name bug.


type: ci
user: andreask
comment:
  struct::stack: Extended with Tcl level policy to make the class command part of the main (struct) ensemble.


type: ci
user: aku
comment:
  struct::stack : Moved to newer critcl, critcl::class to get latest bugfixes for various generated error messages.


type: ci
user: aku
comment:
  c::slice, c::stack : Reworked install recipe to allow use of critcl executable, not just package. Also allow specification of a config to build for. Added empty test recipes.


type: ci
user: aku
comment:
  struct::stack : Updated build recipes like for the c::* packages, except that tests are functional. Modelled after crimp. Added testsuite support files. Made testsuite functional. Passes. Still has various irrelevant constraints.


type: ci
user: aku
comment:
  struct::stack : Testsuite and build recipes reworked to sharing of commonalities between C and Tcl implementations. Passes.


type: ci
user: aku
comment:
  struct::stack, C : Went to version of critcl::class providing access to constructor command for proper WrongNumArgs message, and added argument check to our constructor code. Enabled relevant tests.


type: ci
user: andreask
comment:
  Reorganized overall directory hierarchy for doc and tests. Now using matching package names everywhere.


type: ci
user: aku
comment:
  struct::stack : Refactored the documentation to share the common text blocks between Tcl and C implementations.


type: ci
user: andreask
comment:
  struct::stack : docs : Clarify a few method results. Drop knowledge of the auto-generated name format. Differs between implementations.


type: ci
user: andreask
comment:
  c::stack, struct::stack : Extended API for indexed access, and arbitrary slices. Not everything exposed to script. Coming out of the work on queues using multiple stacks internally for storage.


type: ci
user: andreask
comment:
  c::queue : Completed implementation. Builds, loads. Untested (=> Need struct::queue/C for that). No documentation.


type: ci
user: andreask
comment:
  c::slice : Major API change. Switched the order of cell/#cell arguments in create/get, to match Tcl's standard of xxxc/xxxv (arg, obj). Updated documentation, and all users (c::stack, struct::stack/C). Regenerated embedded.


type: ci
user: andreask
comment:
  struct::queue/C : First work on the c::queue binding, outline of the class. Dropped the whole old C implementation. Still keeping the critcl example code for the moment however.


type: ci
user: andreask
comment:
  Modified all build scripts to report and use explicit dependency information. Ensures that requirements of a package P are handled before P itself.


type: ci
user: aku
comment:
  struct::queue, C: Continued work on API revisal. Switched to critcl 3.1.2, for optional proc arguments. Basics work.


type: ci
user: andreask
comment:
  c::queue : Complete rewrite of cqueue_get() fixing all the bugs exposed by the tests added via [854448fc83], crashing and non. Code should be easier to read and follow now too, with regard to the various possible cases.


type: ci
user: andreask
comment:
  struct::queue, C: New method all, fixed bugs in pop. Testsuite extended, now covers the whole class. Passes.


type: ci
user: andreask
comment:
  struct::queue : get 2n argument made optional. get of single element returns that element, not list. Testsuite updates for this.


type: ci
user: andreask
comment:
  Added recipes install-c and install-tcl to the relevant build scripts. Allows installation of either the Tcl or C implementations (plus dependencies).


type: ci
user: andreask
comment:
  struct::stack, struct::queue documentation update. Document the differences to version 1. Regenerated.


type: t
user: andreas_kupries
brief: Ticket [c078588ac2]: 4 changes
comment:
  Ticket [c078588ac2] <i>struct::stack - Extend method "at" with count of elements</i> status still Open with 4 other changes


type: ci
user: andreask
comment:
  Started a branch moving the struct build code over to kettle. The two *tcl packages are moved as part of this checkin.


type: ci
user: andreask
comment:
  struct::prioqueue. Shuffled the files around, and added most of the standard scaffolding. Redone documentation.


type: ci
user: andreask
comment:
  c::queue internals rewritten, simplified, I hope. Only two stacks. A new system to shift data around (re-balancing).


type: ci
user: aku
comment:
  struct::queue/C: Alternate fix to previous commit, based on how struct::stack/C avoided the problem.


type: ci
user: aku
comment:
  struct::set/Tcl : Extended set/unset to handle no and multiple elements. Especially to not create the variable needlessly. Ditto for add.


type: ci
user: andreask
comment:
  c::set - Extended vadd/vsubtract to signal if they added/removed the item. Fixed result of contains. Fixed calculation of unions, vadd. We have to check if the item exists before inserting. The underlying tree has no compunctions about keeping duplicates.


type: ci
user: andreask
comment:
  struct::set/General - Updated core testsuite to match changes to error messages. And added testsuite entry point for struct::set/C.


type: ci
user: andreask
comment:
  Restructured the old set/c code. Created a general c::set package, using an Anderson tree as the underlying data structure, code by Julienne Walker, public domain. We cannot use Tcl_Hashtable, we do not have proper access to some data.


type: ci
user: andreask
comment:
  c::set, struct::set/C - Added numerous quick paths to detect and handle sets equal by pointer/handle.


type: ci
user: andreask
comment:
  struct::set/C - Implemented the last commands (add, subtract, set, unset). Fixed some bugs, and error messages


# ticket

tkt_uuid: c078588ac29dad17ce2375275fc95b49a764c762
type: Feature_Request
status: Open
priority: Immediate
severity: Minor
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: struct::stack - Extend method "at" with count of elements
comment:
  Method "at" currently always returns a single element, at the position of the specified index. Extend it to allow for the return of a list of elements, starting at the index. For this it has to accept a count (integer > 0), which can be optional, with a default of 1 (<=> current behavior).

  See struct::queue for a class whose "at" method has this extended signature and semantics.


