Compare commits

..

278 Commits

Author SHA1 Message Date
Paul Beckingham
87be68e2e8 Bug Fix
- Shebang in tests/run_all was backwards.
2009-03-15 22:12:18 -04:00
Paul Beckingham
7b1dec0d77 Bug Fix - abbreviation.t
- abbreviation.t contains unit tests that fail to specify an alternate
  rc file (rc:abbrev.rc), and so instead rely on ~/.taskrc.  For a new
  installation, there is no .taskrc, so task offers to create one.
  When done in the context of a unit test, task hangs waiting for input.
2009-03-15 19:15:35 -04:00
Paul Beckingham
f8af5d999a Unit Tests - run_all
- Added script to run all unit tests and capture output.
2009-03-15 17:38:54 -04:00
Paul Beckingham
8efd8620c8 Portability - Ubuntu 8.10
- When creating a new .taskrc file, no newlines were included at EOL.
  This needs a 1.5.1 regression test.
2009-03-15 17:21:54 -04:00
Paul Beckingham
e8a795befb Unit Tests - due, export
- due.t was incorrectly reporting the number of tests it intended to
  run.
- export.t was not updated when the export command was updated to include
  recurrence information.
2009-03-15 17:01:22 -04:00
Paul Beckingham
b5690f00e2 Portabiliy - Fedora 9, Ubuntu 8
- The custom report limit "report.x.limit" was being used to limit the
  rendered rows in the table.  Instead, there should be something like
  min (limit, actual_rows) used, in Table.cpp.
  The symptom was duplicate tasks in a "task oldest" report, when there
  were less than 10 tasks.
2009-03-15 16:39:41 -04:00
Paul Beckingham
65f74da7a4 Portability - Fedora 9
- Using size_t as a result for std::string::find causes a silent error,
  reported only on Ubuntu 8.  size_t is not large enough.  The proper
  result type is std::string::size_type.  This fixes a problem with
  the command "task old" responding with "Ambiguous commane 'old' -
  could be one of oldest, oldest.description, oldest.limit, oldest.sort".
2009-03-15 16:26:20 -04:00
Paul Beckingham
429d0f3071 Portability - Fedora 9
- Compiler pointed out an expression (a || b && c) that clearly needs
  parentheses around (a || b).  Gcc on other OSes don't mention this.
2009-03-15 16:14:16 -04:00
Paul Beckingham
4baf30cf9c Portability - Ubuntu 8
- Changed unsigned int to size_t for std::string::npos comparison.
- Removed validBuiltinCommand function that is not used.
2009-03-15 16:13:02 -04:00
Paul Beckingham
a3882160fa Documentation Update
- Updated docs to reflect the 1.5.0 release date.
2009-03-15 15:12:16 -04:00
Paul Beckingham
cd85a28e98 Unit Tests - due, overdue
- Unit tests to verify that the "overdue" report is properly
  displaying tasks.
- Unit tests to verify that "due" can be defined.
2009-03-15 15:04:52 -04:00
Paul Beckingham
e33a918c24 Bug Fix - summary report
- Fixed bug in summary report where recently completed (and therefore
  not yet in the completed.data file) tasks were not included in the
  report.
2009-03-15 11:37:05 -04:00
Paul Beckingham
df82fade2c Unit Tests - bug.summry, custom.columns, next
- Added unit tests to verify that the next report returns the correct
  tasks.
- Added unit test to verify that unrecognized columns in a custom
  report are flagged.
- Added unit tests to verify that only pending and completed tasks
  are included in the summary report.
2009-03-15 11:31:27 -04:00
Paul Beckingham
2d2bd47075 Bug Fix - summary report included deleted tasks
- Applied patch from Benjamin Tegarden to exclude deleted tasks from
  the summary report.
2009-03-14 13:47:48 -04:00
Paul Beckingham
bdd1b16ba0 Documentation Update
- Updated docs to reflect recent changes.
2009-03-14 13:38:39 -04:00
Paul Beckingham
5383943fa7 Enhanced export command
- Now sanitizes output by replacing ' with " in descriptions.
- Added 'recur' attribute to exported output.
- Removed recurring, deleted and complete tasks from the export.
2009-03-14 13:36:32 -04:00
Paul Beckingham
8ac3978222 Unit Tests - dateformat, shadow
- Improved dateformat.t tests to cover all acceptable date format
  characters.
- Unit tests for shadow file update notification.
- Unit tests for shadow file updates under certain circumstances.
- Unit tests for shadow file no updates under other circumstances.
2009-03-14 12:54:11 -04:00
Paul Beckingham
c9a6d2a750 Improved GC and Shadow File Handling
- Every command now returns an output string, or at least has an
  opportunity to do so.
- TDB::gc is only performed a) when allowed, and b) when the command
  will display line numbers.
- updateShadowFile is only performed when a) shadow updates are allowed,
  and either b) when a command is guaranteed to have modified a task or
  c) when TDB:gc has already made changes.
2009-03-14 12:05:32 -04:00
Paul Beckingham
64cfc26ff3 Enhanced Stats Report
- now reports number of unique tags (given filtering)
- now reports number of unique projects (given filtering)
2009-03-14 12:04:25 -04:00
Paul Beckingham
7c87bbc19a Unit Tests - dateformat
- Unit tests determine whether the dateformat configuration variable
  determines how dates are parsed, and how dates are rendered.
2009-03-14 12:02:33 -04:00
Paul Beckingham
4a524a220e Bug Fix - default command, default unit test
- Task runs the default command when no arguments are provided, but
  when an "rc:..." argument is provided, it does not run the default
  command.
- Implemented unit tests to verify the functioning of default commands,
  default project and default priority.
2009-03-14 00:21:42 -04:00
Paul Beckingham
2216eee678 Help Consistency
- Added note about frequent releases to the shortUsage output, so it
  is now consistent with that of "version".
2009-03-13 13:12:34 -04:00
Paul Beckingham
28c97f181a Grammar
- Changed wording of the help output.
2009-03-13 10:35:17 -04:00
Paul Beckingham
0cfc9c720e Compile Bug - missing <stdlib.h>
- Added stdlib.h to Grid.cpp, thanks to Benjamin Tegardin.
2009-03-13 09:06:23 -04:00
Paul Beckingham
05b5273136 Unit Tests - oldest
- Implemented unit tests to verify that the "oldest" report does
  indeed show the oldest 10 tasks.
- Implemented unit tests to verify that the "newest" report does
  indeed show the newest 10 tasks.
2009-03-12 22:56:22 -04:00
Paul Beckingham
c35a764019 Custom Reports - oldest, newest
- Added support for the "report.X.limit" configuration variable, to
  restrict the number of rows a report generates.
- Added support for Table::render (limit) to limit the number of rows
  that are rendered.
- Removed "oldest" and "newest" report code.
- Added "oldest" and "newest" custom report details to Config.cpp
- Updated various documentation.
2009-03-12 22:34:45 -04:00
Paul Beckingham
8c95e82a63 Unit Tests - start/stop/acive
- Added unit tests to test the start and stop commands via the active
  report.
2009-03-10 23:06:02 -04:00
Paul Beckingham
79d644c257 Unit Tests - custom
- Added unit tests to verify correct functioning of custom report
  filters.
2009-03-10 22:30:15 -04:00
Paul Beckingham
2d07b08260 Custom Reports - usage
- Added defined custom reports to the usage text.  This includes the
  new "report.X.description" configuration variable.
2009-03-10 22:21:23 -04:00
Paul Beckingham
1f45e47e36 Bug Fix - history/ghistory triggered only by add
- Fixed bug whereby if a new month rolls around, and no task is added,
  no row of data is shown in the history or ghistory reports, even
  though tasks may have been completed or deleted ni the new month.
2009-03-10 16:37:35 -04:00
Paul Beckingham
dac1942cad Bug Fix - calendar
- Task now displays as many calendars will fit across the window,
  unless a lower value is specified in the "monthsperline" configuration
  variable.
- Task now obeys the "color" configuration variable when determining
  whether to add a legend to the calendar output.
2009-03-10 16:12:59 -04:00
Paul Beckingham
6d8cb5181f Bug Fix - unit test tdb.t
- Fixed two failing unit tests in tdb.t.cpp, which were both due to
  incorrect test logic, rather than a TDB bug.
2009-03-10 15:40:48 -04:00
Paul Beckingham
d174bb1143 Bug Workaround - locking
- Added support for the "locking" configuration variable that disables
  file locking.  This can be helpful to folks who use task on Solaris,
  and store their task data files on an NFS mount.
2009-03-10 15:21:29 -04:00
Paul Beckingham
dc946e175e Unit Tests - completed, delete
- Added unit tests to verify that the completed.data file is not
  created until the first report is run after the task is marked
  as done.
- Added unit tests to verify that delete/undelete work as expected.
2009-03-10 14:32:32 -04:00
Paul Beckingham
9f278b1ffc Unit Tests - export
- Added unit tests to export tasks and compare.
2009-03-10 00:22:23 -04:00
Paul Beckingham
6fade84535 Unit Tests - color.*, abbreviation
- Added unit tests for all auto coloration configuration settings.
- Tweaked colorization rule precedence to allow color.due to override
  the built-in coloration of due tasks.
2009-03-10 00:08:40 -04:00
Paul Beckingham
0ff33d1c16 Version command changes
- Added color.recurring to the list of valid config values.
- Added message to "version" command hinting that folks should look
  periodically for updated versions of task.  Task does not "call home"
  and check for updates (and never will), and so it is easy to not
  realize that there may be newer versions of task with bug fixes and
  new features.
2009-03-09 23:02:01 -04:00
Paul Beckingham
1999e38ba5 Colorization - color.recurring
- Added support for "color.recurring" configuration variable to
  colorize recurring tasks.
- Updated docs.
2009-03-09 22:12:49 -04:00
Paul Beckingham
17de9fec9f New Column - recur
- Added new column 'recur' for use in custom reports.
- Implemented Table::ascendingPeriod, Table::descendingPeriod allowing
  sorting on the recur column.
- Added unit tests to both use the new column and test the sorting.
- Code cleanup.
2009-03-09 22:01:08 -04:00
Paul Beckingham
751094cffb Documentation Update
- Added recent bug fix details.
2009-03-09 03:09:43 -04:00
Paul Beckingham
012e47267f Bug Fix - concatenated description on modify
- When a task was modified, the new description was concatenated
  without spaces.
2009-03-09 03:06:41 -04:00
Paul Beckingham
bd5e91c31f Merge branch '1.5.0' of git@github.com:pbeckingham/task into 1.5.0 2009-03-09 02:54:10 -04:00
Paul Beckingham
9e7844796b Updated Documentation
- Added 'beta' download section to main web page.
2009-03-09 02:53:44 -04:00
Paul Beckingham
209f7ffb00 Updated Documentation
- Added new platforms to NEWS file.
2009-03-09 02:52:36 -04:00
Paul Beckingham
28e997691f Unit Tests - repair
- Added auto right trim to all table rows, which is a much more
  efficient way of doing what Table::optimize was doing.
- Table::optimize is now a nop.
2009-03-08 22:56:47 -04:00
Paul Beckingham
3f418c6fdc Performance
- Made Table::optimize a public method.
- Table::optimize called only from handleReportGHistory, where it's
  needed.
- Retaining benchmark.txt, to allow further improvements.
2009-03-08 21:29:55 -04:00
Paul Beckingham
0362b41f3b Performance
- Added Timer class to display high resolution timing information.
- Found terrible bug in Table::optimize that was taking up 99.7%,
  on average, of the Table::rendering time, including sorting.  This
  fix naturally causes a 187-fold speedup of rendering.
- Changed report.cpp in handleCustomReport to only load pending tasks,
  instead of all pending tasks.  Subtle, but important difference.
2009-03-08 20:49:33 -04:00
Paul Beckingham
4fa4c5f532 Unit Tests - t.benchmark.t
- Added benchmark to measure time taken to parse 1,000,000 T records.
2009-03-08 17:59:27 -04:00
Paul Beckingham
3088e1ebe1 Unit Tests - abbreviation, filter, benchmark
- Added tests for attribute abbreviation.
- Added tests for filter permutation testing.
- Added benchmark for ongoing performance measurement.
- Mentioned test suite in docs.  Why not?
2009-03-07 02:06:13 -05:00
Paul Beckingham
6a7c66aa05 Unit Tests - color.disable color.pri config.obsolete
- Added unit tests to cover automatic colorization by priority.
- Added unit tests to cover automatic disabling of color when !isatty.
- Added unit tests to cover display of unsupported configuration
  variable in the 'version' report.
- Added support the '_forcecolor' configuration variable to allow the
  possibility of unit tests that test color support, yet redirect
  output to a file.  This configuration variable will not be
  documented.
2009-03-07 00:14:58 -05:00
Paul Beckingham
3b1d396e0a Acknowledgement
- Michael Greb acknowledged for his help in reporting several bugs in
  sufficient detail, and narrowing down the cause.
2009-03-06 21:59:25 -05:00
Paul Beckingham
463c968cac Unit Tests - undo.t
- Added unit tests for the undo command, which verify that a task may
  only be undone if a TDB::gc has not occurred.
2009-03-06 00:39:28 -05:00
Paul Beckingham
41b8b207d4 Documentation Update
- Added examples to the grammar file.
- Added recent change to ChangeLog, html/task.html.
2009-03-05 10:13:10 -05:00
Paul Beckingham
9535121c1e Performance
- Removed the unnecessary sort in the 'completed' report.  The tasks
  are already sorted.
2009-03-05 10:08:25 -05:00
Paul Beckingham
9988ecec5e Portability
- Modified util.cpp to allow clean compilation on Solaris.
2009-03-04 09:37:00 -05:00
Paul Beckingham
d573599a7e Unit Tests - subproject
- Implemented unit test to verify that the project and subproject
  filtering is working properly.
2009-03-04 00:04:09 -05:00
Paul Beckingham
d831ab335a Report Column Header
- Added "Number" to the ghistory graph title.
2009-03-03 23:13:31 -05:00
Paul Beckingham
d7a9d06360 Unit Tests - add, bug_hang, bug_period, bug_sort, nag, tag
- Implemented unit tests to verify tag manipulation
- Implemented unit tests to verify nag functionality
- Implemented unit tests to verify bug fix for hang on shadow write
- Implemented unit tests to verify bug fix for unsupported recurrence periods
- Implemented unit tests to verify bug fix for hang on sort
- Corrected typo in add.t
2009-03-03 21:19:07 -05:00
Paul Beckingham
d69d658531 Unit Tests - tag
- Added unit tests to test the +tag and -tag task modification
  feature.
2009-03-03 17:15:40 -05:00
Paul Beckingham
5c89c0f1be Documentation Update
- Modified ChangeLog and task.html to reflect new bug fixes.
2009-03-03 00:53:32 -05:00
Paul Beckingham
964d04322c Bug Fix - nag
- Implemented new nag algorithm, and debugged why it then broke.
2009-03-03 00:46:02 -05:00
Paul Beckingham
8157c729d6 Unit Tests - bug_sort
- Added a unit test to cover the bug whereby certain combinations
  of adding tasks causes Table::sort to loop indefinitely.
2009-03-03 00:08:06 -05:00
Paul Beckingham
a1b7516cf8 Sort Algorithm Fix
- The sort algorithm (Combsort11) was broken because it didn't
  consider all the possible variations of present/missing, same/
  different combinations of data, when performing a compare.  This
  led to an unstable sort, which is an infinite loop in Combsort11.
2009-03-02 23:49:13 -05:00
Paul Beckingham
1e70400143 Shadow File Rewrite
- No longer writes shadow files based on TDB onChange trigger.
- Addressed bug whereby adding a recurring task trigger a shadow
  file rewrite, which in turn performs trigger another rewrite...
2009-03-02 23:47:41 -05:00
Paul Beckingham
6e956b45ad Code Cleanup
- Fixed typo in unit test
2009-03-02 00:44:28 -05:00
Paul Beckingham
59a014d866 Unit Tests - nag
- Added unit tests to exercise the nag option.
2009-03-01 23:52:28 -05:00
Paul Beckingham
76c9d3565c Documentation Update
- Added paragraph tags.  Don't know why, but the rendering was odd.
2009-02-24 22:27:51 -05:00
Paul Beckingham
8c484a333d Documentation Update
- Added folks to AUTHORS file.
- Added Fedora Core 10, Ubuntu 8.10 Intrepid Ibex to compatibility
  list.
2009-02-23 22:59:17 -05:00
Paul Beckingham
0605161236 Updated OS Compatibility List
- Fedora Core 10
- Ubuntu 8.10 Intrepid Ibex
2009-02-23 10:38:01 -05:00
Paul Beckingham
f9272773ac Credit
- Added Carlos Yoder to AUTHORS, for his contribution.
- Added Russell Friesenhahn to AUTHORS, for his contribution.
2009-02-21 17:24:07 -05:00
Paul Beckingham
e2fca47a27 Typo
- Added missing "http://" to "www.samurize.com", at the suggestion
  of Carlos Yoder.
2009-02-20 21:08:39 -05:00
Paul Beckingham
92ba36bdec Unit Tests - add, delete, info, ///
- Began set of high-level integration tests, in Perl.
2009-02-16 23:12:04 -05:00
Paul Beckingham
72efddc066 Sample .taskrc - update
- Added default config variables for new reports.
- Removed README.1.5.0.
- Removed messages configure.ac
2009-02-16 21:35:26 -05:00
Paul Beckingham
bcf512e529 Nag Rewrite
- Now uses a better escalating scale of "importance".
2009-02-16 21:09:00 -05:00
Paul Beckingham
6d551357ff Packaging
- Began modification of script.txt in preparation for next movie!
- Added README.1.5.0 warning to configure.ac.  Do you think people
  will see it?  And then read the file?  I may need to provide an
  automated solution.
2009-02-15 23:44:58 -05:00
Paul Beckingham
0219ed4fe3 Packaging
- Added README.1.5.0 detailing the new custom report configuration
  variables that must be added.
- Added README.1.5.0 to the distribution.
- Added new custom.html documentation.
- Added warning to task.html about the README.1.5.0 changes.
2009-02-15 23:26:15 -05:00
Paul Beckingham
cc7c1819ce Sample .taskrc - update
- Added recent .taskrc file changes to the default file that is created
  when task is run the first time.
2009-02-15 22:45:50 -05:00
Paul Beckingham
1a4469d388 Error handling
- Validates specified columns in custom reports against list of good
  column names.
- Validates list of sort columns in custom reports against list of
  specified column names.
- Minor fix to grammar file.
2009-02-15 22:33:18 -05:00
Paul Beckingham
4e63d93005 Documentation Update
- Added commit ids to ChangeLog
- Added tags to respective commit ids
2009-02-15 16:54:59 -05:00
Paul Beckingham
481a0aa1eb Custom Reports - old reports removed 2009-02-15 15:13:24 -05:00
Paul Beckingham
6764a6a7ec Custom Reports - basic implementation
- Custom reports can be defined and run.
- Custom columns included.
- Custom filter applied.
- Custom sorting applied.
2009-02-15 14:54:54 -05:00
Paul Beckingham
dae268a836 Merge branch '1.5.0' of git@github.com:pbeckingham/task into 1.5.0 2009-02-14 23:18:05 -05:00
Paul Beckingham
096a4b9bdb Bug Fix - split
- Fixed bug in split functions, which was causing empty strings to be
  split into a single element list consisting of one empty string.
  The symptom was that all tasks without tags appeared to have one
  zero-length tag and the task was colored according to color.tagged.
2009-02-14 23:17:35 -05:00
Paul Beckingham
e65a45ce17 Bug Fix
- Fixed bug in split functions, which was causing empty strings to be
  split into a single element list consisting of one empty string.
  The symptom was that all tasks without tags appeared to have one
  zero-length tag and the task was colored according to color.tagged.
2009-02-14 23:13:31 -05:00
Paul Beckingham
01b3cb190c Configuration Variable - due
- Added support for the "due" configuration variable that defines
  how many days into the future when a task is considered due.
2009-02-14 20:19:47 -05:00
Paul Beckingham
6faf1e44f5 Bug Fix - lower case priorities
- Changed a call to isupper to islower.  This was preventing the
  internal modification to upper case.
- Updated ChangeLog accordingly.
2009-02-14 20:04:34 -05:00
Paul Beckingham
2307dcab8a Copyright Update
- bumped the year, on the source copyright notices.
2009-02-14 17:50:38 -05:00
Paul Beckingham
eba05513f7 Unit Tests
- Converted unit tests to use a UnitTest object, with more methods and
  and exit summary.
- Removed "fail" tests in tdb.t.cpp, because it artificially reduces
  the number of passing tests - the comments in the code suffice.
2009-02-14 17:05:50 -05:00
Paul Beckingham
2f7060ce56 Unit Tests
- Fixed long-broken unit tests that were expecting wrong values.
2009-01-31 12:08:03 -05:00
Paul Beckingham
c28c698bbf Cleanup
- Converted grammar.bnf to the EBNF used by Parser.
2009-01-28 12:09:24 -05:00
Paul Beckingham
b55eaf8f16 Cleanup
- renamed grammar.txt to grammar.bnf
2009-01-28 11:51:29 -05:00
Paul Beckingham
3d4beaf41f - Enhanced split algorithm to be non-destrutive, and therefore faster
- Added autoconf testing to detect Solaris
- Added Solaris-specific flock implementation
2008-12-14 15:18:33 -05:00
Paul Beckingham
50ccb67185 - Added builtin command detection
- Now allows override of due/overdue coloration
2008-12-14 11:09:15 -05:00
Paul Beckingham
14d3abacf4 - Beginning to fill out processing of the generalized custom report. 2008-11-19 00:33:43 -05:00
Paul Beckingham
8639e92606 - Updated release date for 1.4.3. 2008-11-11 08:53:59 -05:00
Paul Beckingham
6e1dbfb16e - Now handles the configuration variable recognition of the
new custom report variables.
2008-11-10 09:53:49 -05:00
Paul Beckingham
748300631a - Now parses the command line and can distinguish regular commands, as well as
custom reports.
2008-11-09 22:46:12 -05:00
Paul Beckingham
6d5309527c - Enabled "configure --enable-debug" to suppress optimization, therefore
allowing debugging without the debugger showing the unoptimized source
  while stepping through optimized code.
2008-11-09 01:42:30 -05:00
Paul Beckingham
aafcba436e - Clarified old statements in ChangeLog.
- Removed now obsolete ideas.txt file.
2008-11-09 00:17:45 -05:00
Paul Beckingham
28ceeac796 - Beginnings of the "task list pri:!H" inverse filtering capability.
Doesn't work, and is commented out for now.  Need a better approach
  because of the priority attribute validation of "!H" failing, and the
  Unix shell interpreting "!", thus requiring an escape, which makes the
  command ("task list pri:\!H") ugly.
2008-11-08 23:48:19 -05:00
Paul Beckingham
ecdfb31553 - "task version" command now reports unrecognized configuration variables,
which may be spelling mistakes or deprecated variables.
2008-11-08 23:32:29 -05:00
Paul Beckingham
8d920f9dc4 - Updated documentation to reflect removal of the "showage" configuration variable. 2008-11-08 22:45:27 -05:00
Paul Beckingham
5f85550664 - Removed support for the "showage" configuration variable. 2008-11-08 22:43:40 -05:00
Paul Beckingham
ee961daef6 Merge branch 'master' into 1.5.0
Conflicts:
	ChangeLog
	NEWS
	configure.ac
	html/task.html
	src/task.cpp
	src/task.h
2008-11-02 22:29:38 -05:00
Paul Beckingham
ce42ae9622 Merge branch '1.4.3' of git@github.com:pbeckingham/task into 1.4.3
Conflicts:
	ChangeLog
	html/task.html
	src/task.cpp
2008-11-02 21:50:55 -05:00
Paul Beckingham
47ffc0babc - Deleted old test file. 2008-11-02 21:43:10 -05:00
Paul Beckingham
612a183776 - Major documentation update
- New filter page
- New shadow file page
2008-11-02 21:23:34 -05:00
Paul Beckingham
396d85cd53 - Removed "usage" command. 2008-11-01 16:48:28 -04:00
Paul Beckingham
038f432752 - ChangeLog update 2008-11-01 16:38:55 -04:00
Paul Beckingham
ef886dff53 Merge branch '1.4.3' 2008-11-01 16:32:08 -04:00
Paul Beckingham
2cae1df42f - Merged 1.4.3 to master 2008-11-01 16:31:30 -04:00
Paul Beckingham
82c0fea708 - Remove debugging code. 2008-11-01 16:14:15 -04:00
Paul Beckingham
d6b30466c1 - "task ghistory" now displays a differently aligned graph, allowing
easier comparison by month of tasks added versus completed and deleted.
2008-11-01 15:44:25 -04:00
Paul Beckingham
b0e18de1b6 - Fixed bug where the onChangeCallback was being called twice for "task list" after "task do xx". 2008-10-25 02:09:31 -04:00
Paul Beckingham
b7e889339d - Added support for shadow.notify to indicate when the shadow file is updated
- Fixed description validation bug that allowed \n, \r and \f in a description, then rendered the pending.data file unparseable
2008-10-25 02:03:21 -04:00
Paul Beckingham
2a5736b876 - TDB::gc now only calls overwritePending when something changed.
- Removed TDB::gc calls from report.cpp.
- Made TDB::gc calls from task.cpp whenever necessary.
- Disabled TDB::gc calls when running a report for the sake of the shadow file.
- Shadow file overwrite now implemented using ostream, instead of cout.rdbuf trickery, for the well-being of cygwin.
2008-10-24 23:15:52 -04:00
Paul Beckingham
b176591261 - Converted reports/command to return strings 2008-10-23 00:44:21 -04:00
Paul Beckingham
c44baf913d Merge branch '1.5.0' of git@github.com:pbeckingham/task into 1.5.0
Conflicts:
	html/task.html
	src/task.cpp
2008-10-19 11:50:14 -04:00
Paul Beckingham
0987171280 - Added support for "task stop <id>" command, that removes the start time from a task.
- Updated documentation accordingly.
2008-10-19 11:47:03 -04:00
Paul Beckingham
47c02965e9 Merge branch '1.4.3' into 1.5.0
Conflicts:
	NEWS
	TUTORIAL
	configure.ac
	html/advanced.html
	html/task.html
	html/versions.html
	src/task.cpp
2008-10-18 18:19:47 -04:00
Paul Beckingham
ce561a6c43 - Instrumented version for shadow file testing. 2008-10-15 10:16:46 -04:00
Paul Beckingham
b4b389c27e - Added checks to ensure that a shadow.file value doesn't collide with either the pending.data or completed.data files. 2008-10-09 21:24:12 -04:00
Paul Beckingham
437c85da39 Merge branch '1.4.3' into 1.5.0
Conflicts:
	NEWS
	TUTORIAL
	configure.ac
	html/advanced.html
	html/task.html
	html/versions.html
	src/task.cpp
2008-10-09 21:03:29 -04:00
Paul Beckingham
62115ea988 - Removed version number from HTML titles.
- New filter.html doc.
- New shadow.html doc.
2008-10-09 18:43:13 -04:00
Paul Beckingham
3ed1269753 - Added support for plain text shadow files. 2008-10-09 18:24:35 -04:00
Paul Beckingham
a5ec1e4b27 - Added support for shadow file, shadow file command
- Added support for TDB::onChange callback
2008-10-09 17:19:57 -04:00
Paul Beckingham
a815492111 - New links page referring to task links on the web. 2008-09-26 22:30:42 -04:00
Paul Beckingham
f3aa88cf83 Merge branch 'master' into 1.5.0 2008-09-26 22:27:03 -04:00
Paul Beckingham
f26a9c67be - Built 1.4.2 and packaged it as a Mac OS X Leopard Intel binary
- Modified incorrect Debian packages in versions.html
- Added Debian and Mac packages to task.html
2008-09-26 22:25:38 -04:00
Paul Beckingham
d837a25be7 - Removed support for the "command.logging" configuration variable and
the "task usage" command.
2008-09-20 20:46:20 -04:00
Paul Beckingham
78fae5195b - Converted 1.4.2 references to 1.5.0. 2008-09-20 20:24:58 -04:00
Paul Beckingham
e7304e86ce - Forgot to bump version number in page title. 2008-09-19 13:38:44 -04:00
Paul Beckingham
d7b95cb2e1 - Removed Mac binary package references. 2008-09-18 21:37:00 -04:00
Paul Beckingham
45ed7dcdaa - Updated release date. 2008-09-18 21:03:07 -04:00
Paul Beckingham
d809b6dae7 - Added most recent change to ChangeLog. 2008-09-13 23:40:09 -04:00
Paul Beckingham
a1cc4e5774 - Task supports modifying the existing description of a task, with the
following syntax: task <id> "new description ...".
2008-09-13 23:33:53 -04:00
Paul Beckingham
21c33f7030 - Improved "version" command. 2008-09-13 13:07:57 -04:00
Paul Beckingham
2e32457032 Merge branch '1.4.2' 2008-09-12 16:47:47 -04:00
Paul Beckingham
e4ed873d60 Merge branch 'master' of git@github.com:pbeckingham/task 2008-09-12 16:47:01 -04:00
Paul Beckingham
e35dcd0e42 - Minor doc edit. 2008-09-12 16:46:22 -04:00
Paul Beckingham
ec15dc9342 - Added "#include <string.h>" to task.cpp to ensure clean build under GCC 4.3 2008-09-12 16:22:51 -04:00
Paul Beckingham
fb87039d8c - Task now supports "default.command" configuration variable (for example
it could contain "list due:tomorrow") that is the command that is run
  whenever task is invoked with no arguments.
2008-09-12 16:07:50 -04:00
Paul Beckingham
e9a71b7db9 - Fixed bug where relative dates in filters (task list due:eom,
task list due:tomorrow, task list due:23rd ...) are now properly supported.
2008-09-12 15:25:38 -04:00
Paul Beckingham
df215f228d - Task supports improved word-wrapping to the terminal width. 2008-09-12 12:48:53 -04:00
Paul Beckingham
4f8f044644 - Task now supports a default project and priority for new tasks, via
the new "default.project" and "default.priority" configuration variables
  (thanks to Vincent Fleuranceau).
2008-09-12 12:14:26 -04:00
Paul Beckingham
4380c7c712 - Task now allows mixed case attributes names (pri:, PRI:, Pri: ...) and
commands (add, ADD, Ad ...) (thanks to Vincent Fleuranceau)
2008-09-12 11:40:46 -04:00
Paul Beckingham
4abc722eff - Task now uses dashes (-----) to underline column headings when color is
disabled (thanks for Vincent Fleuranceau).
2008-09-12 11:27:25 -04:00
Paul Beckingham
11225eb599 - Applied patch from Andy Lester to correct Table sorting to use the entire
string instead of just the initial characters.
2008-09-12 10:28:14 -04:00
Paul Beckingham
e16bd057d8 Merge branch 'master' into 1.4.2 2008-08-26 09:58:42 -04:00
Paul Beckingham
29a152edb0 - Migrated 1.5.0 changes thus far into 1.4.2. 2008-08-26 09:57:46 -04:00
Paul Beckingham
e99e6832f2 - Added Debian package for 1.4.1 to docs. 2008-07-23 22:41:25 -04:00
Paul Beckingham
ff4e8dbef1 Merge branch 'master' of git@github.com:pbeckingham/task 2008-07-20 22:26:38 -04:00
Paul Beckingham
d265ac6c2d - Implemented "task undo" to counteract "task do". 2008-07-19 22:12:01 -04:00
Paul Beckingham
dc1760769f - Bumped version number to 1.5.0 2008-07-19 14:56:36 -04:00
Paul Beckingham
c6eb09cd63 - SK reports that task builds fine under Feisty Fawn 2008-07-19 14:48:46 -04:00
Paul Beckingham
e080c3168c - Package Manager file. 2008-07-18 01:56:17 -04:00
Paul Beckingham
ea06565007 - Final 1.4.1 touches. 2008-07-18 01:53:54 -04:00
Paul Beckingham
4ae189f77d - Removed TUTORIAL references in README 2008-07-17 00:37:15 -04:00
Paul Beckingham
ebf4f3cb12 - Updated ChangeLog, task.html
- Removed contents of TUTORIAL file
2008-07-16 23:51:43 -04:00
Paul Beckingham
4d1cdf0270 - For "task calendar", the month names are now centered over the month. 2008-07-16 23:42:02 -04:00
Paul Beckingham
ceffdca8a2 Merge branches '1.4.1' and '1.4.1' of imac.local:task 2008-07-13 18:06:34 -04:00
Paul Beckingham
bb7f48496a - Bumberd version number to 1.4.1 2008-07-13 13:25:35 -04:00
Paul Beckingham
da7cda3c82 Merge branch 'master' into 1.4.1 2008-07-13 10:55:38 -04:00
Paul Beckingham
31a5816fb4 - Added link to task_1.4.0-1_i386.deb from Richard Querin. 2008-07-13 10:54:42 -04:00
Paul Beckingham
a443257aaa - Fixed bug whereby descriptions could not be altered. 2008-07-11 15:19:59 -04:00
Paul Beckingham
60b7d15a1d - Fixed bug on Ubuntu whereby it wants std::string::size_type rather than unsigned int. 2008-07-11 02:05:02 -04:00
Paul Beckingham
2b646b3fa0 - Documentation update for 1.4.0 2008-07-11 01:28:35 -04:00
Paul Beckingham
86f5294436 - Fixed bug where dateformat=m/d/Y was not parsing "07/08/2008", which is technically "M/D/Y", but, come on, let's be nice.
- Altered (deprecated) TUTORIAL introductory disclaimer.
2008-07-10 01:46:08 -04:00
Paul Beckingham
fe03f91744 - Documentation reorganization - not yet complete 2008-07-10 01:23:05 -04:00
Paul Beckingham
9fcd5b1801 - Allows colons in the description, provided they are not preceded by a valid attribute name. 2008-07-10 00:16:35 -04:00
Paul Beckingham
2380c8b33a - Added new, stubbed, T::validate method for full T validation, one day. 2008-07-09 23:57:31 -04:00
Paul Beckingham
849cb65b0e - Added URL to usage, version. 2008-07-09 23:26:33 -04:00
Paul Beckingham
84d0dce20c - Updated docs with latest change. 2008-07-09 23:00:49 -04:00
Paul Beckingham
2150642f9d - Properly expands ~ characters in data.location 2008-07-09 22:56:39 -04:00
Paul Beckingham
ec8da0baaa - Updated docs, announced deprecation of TUTORIAL. 2008-07-09 03:39:29 -04:00
Paul Beckingham
cf27fa027b Merge branch 'recurrence' into 1.4.0 2008-07-09 03:29:14 -04:00
Paul Beckingham
01314c753b - Added duration.t 2008-07-09 03:28:53 -04:00
Paul Beckingham
6f7b9b7d42 - Recurring tasks! 2008-07-09 03:26:44 -04:00
Paul Beckingham
46ded4c026 Merge branch 'master' into recurrence
Conflicts:

	src/task.cpp
2008-07-08 01:48:41 -04:00
Paul Beckingham
95752390de Merge branch 'master' of git@github.com:pbeckingham/task 2008-07-08 01:46:47 -04:00
Paul Beckingham
ba342eeeb6 - Recurring faintly working without (the very necessary) mask attribute 2008-07-08 01:40:07 -04:00
Paul Beckingham
0e611eda19 - Disabled undelete for deleted recurring tasks, because it is too difficult to know what to restore. 2008-07-06 17:02:10 -04:00
Paul Beckingham
17152d8a46 - Renamed checkRecurring -> handleRecurrence 2008-07-06 03:04:54 -04:00
Paul Beckingham
947e65c1e2 - Inserted recurring task checks at appropriate points. 2008-07-06 02:47:29 -04:00
Paul Beckingham
b1aaab0a8e - "task stats" now supports recurring tasks. 2008-07-06 02:03:39 -04:00
Paul Beckingham
1712ad2cde - "task delete" now properly supports recurring tasks. 2008-07-06 02:01:51 -04:00
Paul Beckingham
79f6ef075e - Supports ::isatty call to shut off color, ncurses when stdout is not to a tty 2008-07-06 01:48:48 -04:00
Paul Beckingham
97b120de67 - Doc snapshot 2008-07-06 01:05:28 -04:00
Paul Beckingham
2181041c8c - Filtering now on all reports. 2008-07-06 01:04:27 -04:00
Paul Beckingham
e85d36cea0 - Fixed bug whereby adding a new task with "task add asdfsd pri:" resulted in gibberish values in the priority field. 2008-07-05 16:49:41 -04:00
Paul Beckingham
188b9f36f2 - Doc snapshot 2008-07-05 02:13:45 -04:00
Paul Beckingham
6c7ad2b398 - Added error checking for "recur" without "due"
- Added error checking for "until" without "recur"
- Added status setting for "task add" regarding T::recurring
2008-07-05 02:02:10 -04:00
Paul Beckingham
72c7afe1a1 - Fixed relative day tests. 2008-07-05 01:22:22 -04:00
Paul Beckingham
ef7ff55535 - Supports durations like weekly, semiannual, daily ... 2008-07-04 19:57:21 -04:00
Paul Beckingham
0d3a93ea20 - Added support for ordinal relative dates, like "23rd". 2008-07-04 18:06:44 -04:00
Paul Beckingham
42d164863a - Removed transient .deps files. 2008-07-04 17:25:36 -04:00
Paul Beckingham
06d595d944 - Date class now supports relative dates for construction (tomorrow, friday, eoy ...)
- Added unit tests for Date enhancements
- Added unit tests for duration recognition
- Task parsing now supports due: using relative dates
- Task parsing now supports recur: and until: attributes
- Task parsing now support private attributes base: and range:
2008-07-04 17:18:01 -04:00
Paul Beckingham
2d66324cb2 - Added " ago" to the info report task age. 2008-06-29 15:05:46 -04:00
Paul Beckingham
00b7a5f1b4 - Zero values no longer generate a 1-char bar in "task ghistory" 2008-06-27 18:05:02 -04:00
Paul Beckingham
d199bada33 - Removed configure. 2008-06-27 00:32:56 -04:00
Paul Beckingham
647cbab3f4 - T object support status "r" 2008-06-27 00:24:39 -04:00
Paul Beckingham
6066cc3bab - Implemented "task ghistory" command to draw a bar chart. 2008-06-27 00:15:06 -04:00
Paul Beckingham
5c91a0d963 Merge branch 'master' of git@github.com:pbeckingham/task into 1.4.0
Conflicts:

	ideas.txt
2008-06-26 23:13:49 -04:00
Paul Beckingham
1ef7b0c43a - Now allows rc:<file> override of ~/.taskrc file. 2008-06-25 01:29:42 -04:00
Paul Beckingham
be6136c1e9 - Improved the ideas details 2008-06-24 02:02:02 -04:00
Paul Beckingham
5d158d752d - Fixed bug whereby table headers were underlined when color is turned off. 2008-06-24 01:37:18 -04:00
Paul Beckingham
2d21558a5a Merge branch 'master' into 1.4.0 2008-06-24 01:23:30 -04:00
Paul Beckingham
0034534803 - Properly skips all escape sequences if no fg and bg colors are specified. 2008-06-24 01:21:40 -04:00
Paul Beckingham
3f21a0fe4d - Updated ideas with recurrence design 2008-06-22 01:33:17 -04:00
Paul Beckingham
cc9235033f - Added averages to the "task history" report. 2008-06-22 01:04:33 -04:00
Paul Beckingham
f61c849816 - Updated grammar to include new undelete command. 2008-06-22 00:37:20 -04:00
Paul Beckingham
195b5a5e0a - Implemented "task undelete" for non-GCed deleted tasks. 2008-06-22 00:32:59 -04:00
Paul Beckingham
bcae2d2b93 - Bumped version to 1.4.0 2008-06-22 00:25:16 -04:00
Paul Beckingham
3a6de7d940 - Corrected Cygwin ncurses documentation
- Added galvanizd to the AUTHOS file for recognition of above tip
2008-06-22 00:14:26 -04:00
Paul Beckingham
994f98b57a - Added new 1.3.1 .deb files from Richard Querin. 2008-06-21 23:28:19 -04:00
Paul Beckingham
44ca388b52 - Updated for 1.3.1 release. 2008-06-21 17:15:14 -04:00
Paul Beckingham
06a85c24ad - Fixed bug so that task now recreates (with permission) any missing ~/.taskrc, and recreates any missing ~/.task 2008-06-21 17:12:04 -04:00
Paul Beckingham
ceaba87ba3 - Fixed bug causing seg faults for Ubuntu users. 2008-06-21 16:38:01 -04:00
Paul Beckingham
61acf6239c - Relocated all html into it's own directory. 2008-06-21 15:33:31 -04:00
Paul Beckingham
8dc8cdeea7 - Updated docs 2008-06-21 15:28:36 -04:00
Paul Beckingham
10ef3013e3 - Rearranged top of main page. 2008-06-21 14:59:01 -04:00
Paul Beckingham
3899f5352f - Added version number in just the right place. 2008-06-21 14:43:20 -04:00
Paul Beckingham
64fbf88f48 - Updated to include 1.3.1 information.
- Modified task.css
2008-06-21 13:41:56 -04:00
Paul Beckingham
2e0964aeb8 Merge branch 'master' into 1.3.1
Conflicts:

	task.html
2008-06-21 13:35:12 -04:00
Paul Beckingham
35d878de96 - Broken out CSS file
- Broken out troubleshooting guide
- Broken out versions info
2008-06-21 12:49:30 -04:00
Paul Beckingham
d771586080 - Converted version to 1.3.1
- Added links in task.html to Richard Querin's blog
- Added link to movie
2008-06-19 23:31:36 -04:00
Paul Beckingham
6673e408a2 - Now uses "defaultwidth" configuration variable for when ncurses support is not available
- Added the new movie to the task.html page
2008-06-19 22:41:09 -04:00
Paul Beckingham
422ad576ea - Added latest bug fix details. 2008-06-19 21:23:15 -04:00
Paul Beckingham
c1a1d13aab - Updated version 1.3.0 to 1.4.0
- Applied "showage" configuration variable to long list
2008-06-19 21:21:21 -04:00
Paul Beckingham
42189ce998 - Added some idea details 2008-06-19 21:01:14 -04:00
Paul Beckingham
43287d7fc9 - Corrected AUTHORS file
- Added new commands to task.html
2008-06-18 01:08:34 -04:00
Paul Beckingham
06f6aaaded - Minor doc updates before 1.3.0 is cut. 2008-06-18 00:45:12 -04:00
Paul Beckingham
0c17986303 - Added "task oldest" command
- Added "task newest" command
2008-06-18 00:41:33 -04:00
Paul Beckingham
feb9959907 - Added new bug fixes to task.html 2008-06-18 00:08:53 -04:00
Paul Beckingham
7409e23ce0 - Displays shorter message when a command is entered incorrectly, and the full usage for "task help". 2008-06-18 00:05:51 -04:00
Paul Beckingham
4572c97c9d - Fixed bug whereby "1 wks" was being improperly pluralized 2008-06-17 23:56:39 -04:00
Paul Beckingham
9bca303113 - Factored out filtering code. 2008-06-17 23:40:37 -04:00
Paul Beckingham
7fb3ab0c3d - Marked bug as fixed. 2008-06-17 23:05:41 -04:00
Paul Beckingham
56037fe3bc - Added latest bug fix. 2008-06-17 23:03:50 -04:00
Paul Beckingham
a2f8ce41cf - Began full command line parser BNF grammar. 2008-06-17 22:54:04 -04:00
Paul Beckingham
598bd3b4ef - Fixed crash bug in Date::toString
- New ideas file.
2008-06-17 22:23:31 -04:00
Paul Beckingham
315a7d69fb - Updated ChangeLog
- Removed AdSense HTML fragment
- Created new ideas.txt file to illustrate usage of proposed features
2008-06-17 22:10:07 -04:00
Paul Beckingham
64fff6c2ff - Added Google Analytics. 2008-06-17 22:03:38 -04:00
Paul Beckingham
969ecd7b5d Merge branch 'master' into 1.3.0 2008-06-17 18:48:23 -04:00
Paul Beckingham
cede865693 - Partial fix to bug - snapshot. 2008-06-17 18:28:24 -04:00
Paul Beckingham
d68395bc51 - Fixed bug whereby if you have more than one task with a due date, 7 days gets added to the entry date of task 2..n 2008-06-17 17:52:12 -04:00
Paul Beckingham
7ec523d5ea - Removed unused std::vector forms of get/set
- Added more defaults to Config::createDefault
2008-06-16 23:37:32 -04:00
Paul Beckingham
08fc906d5f - Updated various documents. 2008-06-16 23:26:22 -04:00
Paul Beckingham
f3e995ef92 Merge branch 'damian' into 1.3.0 2008-06-16 22:26:20 -04:00
Paul Beckingham
a4304c97af - Corrected the "30 days in August" bug.
- Removed odd styling from task.html CSS.
2008-06-16 22:24:49 -04:00
Paul Beckingham
d1ef0d17d5 - Integrated Damian Glenny's changes 2008-06-15 18:38:01 -04:00
Paul Beckingham
c54cb4d6c8 - Bumped version to 1.3.0 2008-06-14 13:55:35 -04:00
Paul Beckingham
c393d47cdf - Corrected bogus .gitignore entry that blocked src/tests/Makefile. 2008-06-13 01:51:51 -04:00
Paul Beckingham
3525b6db2c - Added Bruce Israel for his suggestion of subprojects. 2008-06-13 01:25:38 -04:00
Paul Beckingham
d50efe5e27 - Updated versions 2008-06-13 01:18:53 -04:00
Paul Beckingham
2c0a1ddb3a - Added new feature for 1.2.0 2008-06-13 01:15:49 -04:00
Paul Beckingham
d7ac37783c - Updated documentation to include subproject discussions.
- Added Richard Querin to the AUTHORS file for his contribution of ideas and a .deb package.
2008-06-13 01:02:17 -04:00
Paul Beckingham
03bb50c4ea - Corrected copyright display. 2008-06-13 00:19:54 -04:00
Paul Beckingham
1535010ac9 - "Age" column is now optional for the "list" and "next" reports. 2008-06-13 00:18:28 -04:00
Paul Beckingham
8d90035bbc - Now properly parses dates according to specified date format. 2008-06-12 23:58:58 -04:00
Paul Beckingham
fd7bb9daa9 - Support subprojects. 2008-06-11 02:19:00 -04:00
Paul Beckingham
88b12bc66a - Added caseless keyword comparison to the autocolorization rules. 2008-06-11 01:47:11 -04:00
Paul Beckingham
a8ac82ca22 - Added "What's new in 1.2.0" section. 2008-06-11 01:45:07 -04:00
Paul Beckingham
438f3cb134 - Added caseless comparison when searching keywords in the description. 2008-06-11 01:40:01 -04:00
Paul Beckingham
131693f617 - Fixed bug whereby the "dateformat" configuration variable was being used to display dates, but not parse them. 2008-06-11 01:14:22 -04:00
Paul Beckingham
07d1f63e31 - Bumped version to 1.2.0 2008-06-10 22:59:43 -04:00
Paul Beckingham
73286e8662 - Cleaned up visible copyright.
- Added a "what's new" list to task.html
2008-06-07 23:29:32 -04:00
Paul Beckingham
95c3f78c68 - Added tags to the "long" report. 2008-06-07 23:13:07 -04:00
Paul Beckingham
90df505982 - Added Google AdSense to the task.html page. 2008-06-07 22:53:18 -04:00
Paul Beckingham
e8b7114ce8 - Added the ability to control date formats via the 'dateformat' configuration variable. 2008-06-07 17:09:09 -04:00
Paul Beckingham
714d9c5544 - Included new changes 2008-06-07 13:28:27 -04:00
Paul Beckingham
f2ba9f796b - Bumped version to 1.1.0 2008-06-07 13:23:59 -04:00
Paul Beckingham
e025ecc3d4 - Configurable extra white space via "blanklines" configuration variable. 2008-06-07 13:23:39 -04:00
Paul Beckingham
ccd2b9fc44 - Added Cygwin to the platform list.
- Added missing items to the TUTORIAL file.
- Converted TUTORIAL to HTML, in task.html.
2008-06-06 01:38:37 -04:00
Paul Beckingham
6cb902c499 - Home page update. 2008-06-05 21:08:37 -04:00
Paul Beckingham
d216d40121 - Now points to 1.0.1 2008-06-04 21:22:45 -04:00
Paul Beckingham
08f4ead97e - Fixed bug whereby the UUID generated by the custom generator was not terminated.
- Fixed bug whereby random numbers were used by the custom UUID generator, but srandom/srand was not called first.
2008-06-04 21:00:23 -04:00
Paul Beckingham
f3de5c0711 - Added bare-bones task.html to point to the latest version. 2008-06-04 19:26:35 -04:00
125 changed files with 13919 additions and 8223 deletions

4
.gitignore vendored
View File

@@ -1,4 +1,3 @@
Makefile.in
aclocal.m4
autom4te.cache
auto.h*
@@ -6,8 +5,9 @@ config.h.in
config.status
src/.deps
src/Makefile
src/task
*/task
stamp-h1
Makefile
configure
config.log
www.xls

26
AUTHORS
View File

@@ -1,6 +1,28 @@
Principal Author
Principal Author:
Paul Beckingham, paul@beckingham.net
Contributing Authors
Contributing Authors:
Damian Glenny
Andy Lester
H. İbrahim Güngör
Stefan Dorn
Michael Greb
Benjamin Tegarden
With thanks to:
Eugene Kramer
Srijith K
Richard Querin
Bruce Israel
Thomas Engel
Nishiishii
galvanizd
Stas Antons
Vincent Fleuranceau
T. Charles Yun
ArchiMark
Carlos Yoder
Russell Friesenhahn
Paolo Marsi
Eric Farris

174
ChangeLog
View File

@@ -1,9 +1,160 @@
1.1.0 (?)
- Command line specification of alternate .taskrc file
------ reality -----------------------------------
------ current release ---------------------------
1.0.0 (6/3/2008)
1.5.0 (3/15/2009)
+ Removed deprecated TUTORIAL file.
+ Removed "showage" configuration variable.
+ "task stop" can now remove the start time from a started task.
+ "task ghistory" now displays a differently aligned graph, allowing
easier comparison by month of tasks added versus completed and deleted.
+ "task version" command now reports unrecognized configuration variables,
which may be spelling mistakes or deprecated variables.
+ "configure --enable-debug" now supported to suppress compiler optimization
to allow debugging.
+ Allow lower case priorities, and automatically upper case them.
+ Added support for "due" configuration variable which defines the number
of days in the future when a task is considered due.
+ Added support for custom reports, comprised of a set of column names and
sort order, with optional filtering in the configuration file. This
means user-defined reports can be written, and the reports currently
in the configuration file can be renamed. Several of task's built in
reports have been converted to user-defined reports.
+ New online documentation for custom reports.
+ New algorithm for determining when the "nag" message is displayed.
+ Fixed bug where task hangs with a certain combination of recurring tasks
and shadow files.
+ Fixed bug with the task sort algorithm, which led to an unstable sequence
when there were only a handful of tasks.
+ Performance enhanced by eliminating unnecessary sorting.
+ Task now has a large (and growing) test suite and bug regression tests
to help ensure higher quality releases.
+ Fixed bug that caused performance hit during table rendering.
+ Fixed bug that concatenated a modified description without spaces.
+ Added new column 'recur' that displays the recurrence period of any
recurring tasks. This column can be added to any custom report.
+ Added support for "color.recurring" configuration variable which
specifies the color of recurring tasks.
+ Added support for "locking" configuration variable that controls whether
file locking is used.
+ Task export feature now includes recurrence information, removes nested
quotes, and limits output to pending tasks.
+ Task no longer includes deleted tasks in the summary report (thanks to
Benjamin Tegarden).
+ Fixed bug that prevented the summary report from properly reporting
recently completed tasks.
------ old releases ------------------------------
1.4.3 (11/1/2008) 8639e9260646c8c9224e0fc47e5d2443b46eecfc
+ Fixed misleading task count at bottom on "info" report.
+ Added support for a shadow file that contains a plain text task report,
with the "shadow.file" and "shadow.command" configuration variables
The shadow file is automatically updated whenever the task database
changes. Useful for integrating with "Samurize"
+ Task now displays a message whenever a shadow file is updated, if the
"shadow.notify" configuration variable is set "on"
+ Bug: adding a task with a \n, \r or \f in it now fails properly
+ Removed "usage" command, and support for "command.logging" configuration
variable.
+ Added documentation for Shadow files.
+ Added documentation for task filters.
1.4.2 (9/18/2008) e7304e86ce9bb80978c7055fd2a9e999619a6fb8
+ "task undo" can now retract a "task done" command, provided no reports
have been run (and therefore TDB::gc run)
+ Task now correctly sorts on entire strings, instead of just the first
character (thanks to Andy Lester)
+ Task now uses dashes (-----) to column underlines when color is disabled
(thanks to Vincent Fleuranceau)
+ Task now allows mixed case attribute names (pri:, PRI:, Pri: ...) and
commands (add, ADD, Add ...) (thanks to Vincent Fleuranceau)
+ Task now supports a default project and priority for new tasks, via
the new "default.project" and "default.priority" configuration variables
(thanks to Vincent Fleuranceau)
+ Task supports improved word-wrapping to the terminal width
+ Task now supports "default.command" configuration variable (for example
it could contain "list due:tomorrow") that is the command that is run
whenever task is invoked with no arguments.
+ Task supports modifying the existing description of a task, with the
following syntax: task <id> "new description ...".
+ Bug: Now properly supports relative dates in filters (task list due:eom,
task list due:tomorrow, task list due:23rd ...)
+ Bug: Source now properly includes <string.h> in order to build clean
using gcc 4.3 (thanks to H. İbrahim Güngör)
1.4.1 (7/18/2008) e080c3168c6064628ab85b21bd859d9875a3a9a7
+ Bug: Descriptions can not be altered with "task 123 New description"
+ Tweak: For "task calendar" month names are now centered over the month
+ Removed TUTORIAL file contents in favor of online version
+ Provided Mac .pkg binary
1.4.0 (7/10/2008) 60b7d15a1d22e064acf0974c5d7eabbb57dd8071
+ New recurring tasks feature
+ "task undelete" can now undelete erroneously deleted tasks, provided no
reports have been run (and therefore TDB::gc run)
+ Added averages to the "task history" report
+ Added ability to override ~/.taskrc with rc:<file>
+ Added bar chart history report "task ghistory"
+ Added task filtering on all reports
+ Automatically shuts off color, curses when output is not a tty
+ Supports relative due: dates (tomorrow, wednesday, 23rd, eom ...)
+ Supports the ~ character in .taskrc data.location
+ Allows colons on the description, provided what is to the left of the colon
is not a standard attribute name
+ Bug: Fixed where Esc[0m sequences were being emitted for no good reason
+ Bug: Fixed underlined table headers when color is turned off
+ Bug: Adding a blank priority resulted in an assigned garbage value
+ Bug: Fixed parsing of date "07/08/2008" when using dateformat "m/d/Y"
1.3.1 (6/21/2008) 3a6de7d9402f2609a773a73b16eff97b14a32869
+ New configuration variable, "defaultwidth" that determines the width
of tables when ncurses support is not available
+ Bug: "showage" configuration variable should apply to all reports, not
just the ones based on "list"
+ Bug: Fixed segmentation faults on Ubuntu when the "dateformat"
configuration variables was missing. This was a code bug, and should
have affected more platforms
+ Bug: Task now will recreate a missing ~/.taskrc file, OR a missing
~/.task directory
1.3.0 (6/18/2008) 6673e408a223af98c38779c20b08524042c0edfa
+ "task calendar" now displays multiple months per line, adjustable by the
"monthsperline" configuration variable. Feature added by Damian Glenny
+ "task export" can now filter tasks like the reports
+ Factored out code to filter tasks
+ Displays shorter message when a command is entered incorrectly, and the
full usage for "task help"
+ "task oldest" shows the oldest tasks
+ "task newest" shows the newest tasks
+ Bug: Segmentation fault when no "dateformat" configuration variable
specified
+ Bug: Fixed bug whereby if you have more than one task with a due date, 7
days gets added to the entry date of task 2..n
+ Bug: Fixed bug whereby "1 wks" was being improperly pluralized
1.2.0 (6/13/2008) c393d47cdfe7e197a31e94f4bb764474fa05ad8d
+ Bug: "dateformat" configuration variable used to display dates, but
not parse them
+ "task list x" now performs a caseless comparison between "x" and the
description
+ Task sub projects supported
+ "showage" confguration determines whether "Age" column appears on the
"list" and "next" reports
+ Improved TUTORIAL
1.1.0 (6/7/2008) 73286e86628725b346db2a25fbcd4bd68efb9b3a
+ "blanklines" configuration to stop displaying unnecessary white
space and thus work better on small-screen devices
+ "dateformat" configuration now determines how dates are formatted
+ Better formatting of "task tags" output
+ http://www.beckingham.net/task.html home page set up
+ Added tags to the "task long" report
1.0.1 (6/4/2008) d216d401217027d93581808fc8944ab7d6b85fb0
+ Bug: UUID generator not properly terminating string.
+ Bug: srandom/srand not called prior to UUID generation.
1.0.0 (6/3/2008) f3de5c07118c597091a05c7d7fe8bdeae95474c1
+ New movie made, uploaded
+ Bug: assertion fails on mobile for t v
+ Bug: configure.ac does not properly determine ncurses availability
@@ -16,19 +167,19 @@
+ Added rules for colorization by tag, project and keyword
+ Added legend to "task calendar"
0.9.9 (5/27/2008)
0.9.9 (5/27/2008) 2ecf50032226c91b406f247417a063dc17c8e324
+ Autoconf/automake behaving properly.
+ Clean build on OS X 10.5.
+ Clean build on Ubuntu 8.0.
+ Clean build on Fedora Core 8.
+ Clean build on Fedora Core 9.
0.9.8 (5/25/2008)
0.9.8 (5/25/2008) 18fd59a1edb20e5c68d086a97fae5fa9f6bb348a
+ Added "task color" command.
+ Removed unnecessary files.
+ Completed documentation.
0.9.7 (5/24/2008)
0.9.7 (5/24/2008) 25dc4150947a3e612c8118838d04b3bbe68441f7
+ Migrated old compiler flags into Makefile.am
+ Added ncurses endwin function check to configure.ac
+ Set up structure for AUTHORS file.
@@ -69,7 +220,7 @@
+ Added more missing files.
+ Added all source code.
+ Generic OSS files added.
+ Initial commit.
+ Initial commit on Github.
0.9.3 (4/6/2008)
+ Added "task completed" command.
@@ -80,7 +231,7 @@
+ "task" duplicated to "task_rel" for preparation of a fork.
0.9.1 (4/1/2008)
+ Blank attributes read are longer be written out.
+ Blank attributes read are no longer written out.
+ Completed "task export" command.
+ Added configuration values to "task version" command.
+ Consolidated header files, removed unnecessary ones.
@@ -108,9 +259,12 @@
+ File locking
+ retain deleted tasks
+ "task info ID" report showing all metadata
+ File format v2, including UUID
[Development hiatus while planning for T, TDB API, new features and the future
of the project. Seeded to two testers for feedback, suggestions.]
of the project. Seeded to two testers for feedback, suggestions. Development
deliberately stopped to allow extended use of task, allowing command logging and
regular usage to determine which features were needed or unnecessary.]
0.6.0 Reports (12/27/2006)
+ "task history"

View File

@@ -1,9 +1,11 @@
Developers may wish to change task, and here is a high-level guide to the files
included.
task.{cpp,h} Functions that implement the task commands, and main.
task.{cpp,h} Implements main, high level processing.
command.cpp Implements all non-report task commands.
report.cpp Implements all task reports.
parse.cpp Parses the command line.
TDB.{cpp,h} The task database, performs all file I/O
TDB.{cpp,h} The task database, performs all file I/O.
T.{cpp,h} Represents a single task - parses a record from TDB, and also
composes record for TDB. Provides accessors for tasks.
Grid.{cpp,h} Implements a sparse 2D array, provides data storage for the

View File

@@ -1,3 +1,3 @@
SUBDIRS = src
EXTRA_DIST = TUTORIAL DEVELOPERS
EXTRA_DIST = DEVELOPERS

595
Makefile.in Normal file
View File

@@ -0,0 +1,595 @@
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/auto.h.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
depcomp install-sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = auto.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = src
EXTRA_DIST = DEVELOPERS
all: auto.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
auto.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/auto.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status auto.h
$(srcdir)/auto.h.in: $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f auto.h stamp-h1
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) auto.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) auto.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) auto.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) auto.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d $(distdir) || mkdir $(distdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile auto.h
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-tags distcleancheck \
distdir distuninstallcheck dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-dvi install-dvi-am install-exec install-exec-am \
install-html install-html-am install-info install-info-am \
install-man install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

6
NEWS
View File

@@ -1,4 +1,4 @@
Welcome to Task 1.0.0.
Welcome to Task 1.5.0.
Task has been built and tested on the following configurations:
@@ -6,8 +6,12 @@ Task has been built and tested on the following configurations:
- OS X 10.5 Leopard
- Fedora Core 8
- Fedora Core 9
- Fedora Core 10
- Ubuntu 7 Feisty Fawn
- Ubuntu 8 Hardy Heron
- Ubunto 8.10 Intrepid Ibex
- Solaris 10
- Cygwin 1.5.25-14
While Task has undergone testing, bugs are sure to remain. If you encounter a
bug, please contact me at task@beckingham.net. Here is what you could do, in

27
README
View File

@@ -3,20 +3,20 @@ Thank you for taking a look at task. Task is a GTD utility featuring:
- Robust C++ implementation
- Tags
- Colorful, tabular output
- Reports
- Reports, graphs
- Lots of commands
- Low-level API
- Abbreviations for all commands, options
- Multi-user file locking
- Clean architecture allowing quick addition of new features
- Recurring tasks
It is intended that features, mainly in the form of reports will be added
frequently, with best practices and useful reports evolving from usage patterns.
Task is scope-limited to GTD functionality only.
You may want to jump straight to the TUTORIAL file, or perhaps watch the old
task movie on YouTube:
You may want to watch the old task movie on YouTube:
http://www.youtube.com/watch?v=l68LCl6BYvs
@@ -24,18 +24,21 @@ or the new improved one:
http://www.youtube.com/watch?v=D2Kn4DMOVSw
Either will give you a fairly good idea of what task is capable of, and whether
it fits in to your way of working. As a command line application, task is not
for everyone and some of you may prefer to not proceed. The movie or TUTORIAL
file are the quickest way for you to make that decision.
Either will give you a fairly good idea of what task is capable of, and
whether it fits in to your way of working. As a command line application,
task is not for everyone and some of you may prefer to not proceed. The
movie or online tutorial file are the quickest way for you to make that
decision. The online tutorial can be found at:
http://www.beckingham.net/task.html
Task is based on ideas presented in the todo.sh script, found on:
http://todotxt.org
Task has a few more features than todo.sh, but fundamentally, they are both
working toward the same goals, which is to help you follow basic Getting Things
Done (GTD) principles.
Task has many more features than todo.sh, but fundamentally, they are
both working toward the same goals, which is to help you follow basic
Getting Things Done (GTD) principles.
All feedback is welcome, in addition to any bug reports or patches to:
@@ -43,6 +46,6 @@ All feedback is welcome, in addition to any bug reports or patches to:
Got an idea for an enhancement? Send a message!
I have found that task makes me more productive and organized. I hope task can
do the same for you.
I have found that task makes me more productive and organized.
I hope task can do the same for you.

654
TUTORIAL
View File

@@ -1,654 +0,0 @@
Task program tutorial, for version 1.0.0
----------------------------------------
This guide shows how to quickly set up the task program, and become proficient
with it.
Contents:
Quick Setup
Simple Usage
Advanced Usage
Interacting with the Shell
Configuring Task
Colors
Quick Setup
-----------
Build the task program according to the directions in the INSTALL file. This
transcript illustrates a typical installation:
% ls
task-1.0.0.tar.gz
% gunzip task-1.0.0.tar.gz
% tar xf task-1.0.0.tar
% cd task-1.0.0
% ./configure
...
% make
...
% make install # (may require sudo, depending on --prefix)
You need to make sure that the installed task program is in your PATH
environment variable.
Task reads a configuration file - called .taskrc in your home directory - and
stores pending and completed tasks in in a directory specified in the
configuration file.
The simplest way to get a configuration file and task directory is to run task.
On startup, task will check to see if it can find the configuration file and
task directory, and if not found, will ask you whether it may create both.
% task version
A configuration file could not be found in /Users/paul/.taskrc
Would you like a sample .taskrc created, so task can proceed? (y/n) y
Done.
[then task will show version information]
Simple Usage
------------
Let us begin by adding some tasks:
% task add Book plane ticket
% task add Rent a tux
% task add Reserve a rental car
% task add Reserve a hotel room
That's it. You'll notice immediately that task has a very minimalist
interface. Let us take a look at those tasks:
% task ls
ID Project Pri Description
1 Book plane ticket
2 Rent a tux
3 Reserve a rental car
4 Send John a birthday card
The 'ls' command provides the most minimal list of tasks. Each task has been
given an id number, and you can see that there are no projects or priorities
assigned. Wait a minute - I own a tux, I don't need to rent one. Let us delete
task 2:
% task 2 delete
Permanently delete task? (y/n) y
Task wants you to confirm deletions. To remove the confirmation, edit your
.taskrc file and change the line:
confirmation=yes
to have a value of "no".
While the use of projects and priorities are not essential to benefitting from
task, they can be very useful when the list of tasks grows large. Let's assign
a project to these tasks:
% task 1 project:Wedding
% task 3 project:Wedding
% task 4 project:Family
% task ls
ID Project Pri Description
3 Family Send John a birthday card
2 Wedding Reserve a rental car
1 Wedding Book plane ticket
Notice that the id numbers have changed. When tasks get deleted, or have their
attributes changed (project, for example), the ids are prone to change. But the
id numbers will remain valid until the next 'ls' command is run. You should
only use the ids from the most recent 'ls' command. The ids change, because
task is always trying to use small numbers so that it is easy for you to enter
them correctly. Now that projects are assigned, we can look at just the Wedding
project tasks:
% task ls project:Wedding
ID Project Pri Description
1 Wedding Book plane ticket
2 Wedding Reserve a rental car
Any command arguments after the 'ls' are used for filtering the output. We
could also have requested:
% task ls ticket plane
ID Project Pri Description
1 Wedding Book plane ticket
Now let's prioritize. Priorities can be H, M or L (High, Medium, Low).
% task ls
ID Project Pri Description
3 Family Send John a birthday card
2 Wedding Reserve a rental car
1 Wedding Book plane ticket
% task 1 priority:H
% task 2 prior:M
% task 3 pr:H
Ambiguous attribute 'pr' - could be either of project, priority
% task 3 pri:H
% task ls
ID Project Pri Description
3 Family H Send John a birthday card
1 Wedding H Book plane ticket
2 Wedding M Reserve a rental car
Notice that task supports the abbreviation of words such as priority, project.
Priority can be abbreviated to pri, but not pr, because it is ambiguous. Now
that tasks have been prioritized, you can see that the tasks are being sorted
by priority, with the highest priority tasks at the top.
These attributes can all be provided when the task is added, instead of
applying them afterwards, as shown. The following command shows how to set all
the attributes at once:
% task add project:Wedding priority:H Book plane ticket
The 'ls' command provides the least information for each task. The 'list'
command provides more:
% task list
ID Project Pri Due Active Age Description
3 Family H 4 mins Send John a birthday card
1 Wedding H 5 mins Book plane ticket
2 Wedding M 5 mins Reserve a rental car
Notice that a task can have a due date, and can be active. The task lists are
sorted by due date, then priority. Let's add due dates:
% task 3 due:6/25/2008
% task 1 due:7/31/2008
% task list
ID Project Pri Due Active Age Description
3 Family H 6/25/2008 6 mins Send John a birthday card
1 Wedding H 7/31/2008 7 mins Book plane ticket
2 Wedding M 7 mins Reserve a rental car
If today's date is 6/23/2008, then task 3 is due in 2 days. It will be colored
yellow if your terminal supports color. To change this color, edit your
.taskrc file, and change the line to one of these alternatives:
color.due=red
color.due=on_blue
color.due=red on_blue
color.due=bold_red on_blue
Where color is one of the following:
black
blue
red
green
cyan
magenta
yellow
white
All colors are specified in this way. Take a look in .taskrc for all the other
color rules that you control.
Tagging tasks is a good way to group them, aside from specifying a project. To
add a tag to a task:
% task <id> +tag
The plus sign indicates that this is a tag. Any number of tags may be applied
to a task, and then used for searching. Tags are just single words that are
labels.
% task list
ID Project Pri Due Active Age Description
3 Family H 6/25/2008 8 mins Send John a birthday card
1 Wedding H 7/31/2008 9 mins Book plane ticket
2 Wedding M 9 mins Reserve a rental car
% task 1 +phone
% task 2 +phone
% task 3 +shopping
% task 3 +john
% task list +phone
ID Project Pri Due Active Age Description
1 Wedding H 7/31/2008 9 mins Book plane ticket
2 Wedding M 9 mins Reserve a rental car
To remove a tag from a task, use the minus sign:
% task 3 -john
Advanced Use
------------
Here are the other commands, in some detail. Note that the command:
% task
with no arguments will generate a help message that lists all these commands.
% task projects
---------------
This report generates a list of all the different projects that you are using
along with a count of the pending tasks for each project. For example:
% task projects
Project Tasks
Errands 1
Birthdays 3
Car 2
% task summary
--------------
This report lists all the projects and a summary of their task status.
% task summary
Project Remaining Avg age Complete 0% 100%
Errands 1 3 days 50% XXXXXXXXXXXXXXXX
Birthdays 3 7 mths 0%
Car 2 2 wks 25% XXXXXXXXX
This shows the project, the remaining tasks, the average age of each task,
the percentage completed (remaining vs total) and a bar indicating that
percentage.
% task delete <id>
------------------
There are two ways of getting rid of tasks - mark them as done, or delete
them.
% task done <id>
----------------
This is how a task is marked as done.
% task list ...
---------------
The list report will show the active status, and age of the task in addition
to the columns that "task ls" shows. It is just a more detailed list.
% task long ...
---------------
The long report will show the entry date and start date of a task, in
addition to the columns that the "task list" shows.
% task start <id>
-----------------
This marks a task as started (and therefore active), which is shown in the
"list" report:
% task list
ID Project Pri Due Active Age Description
12 Errand L Remember to deposit check
...
% task start 12
% task list
ID Project Pri Due Active Age Description
12 Errand L * 3 days Remember to deposit check
...
% task active
-------------
Shows all active tasks, that is, the tasks for which the "task start ..."
command was run, as shown above.
% task overdue
--------------
Simply lists all the task that have a due date that is past, in "list"
format.
% task history
--------------
This report shows you an overview of how many tasks were added, completed and
deleted, by month. It looks like this:
% task history
Year Month Added Completed Deleted Net
2008 March 21 16 0 5
April 13 11 1 1
May 8 14 3 -9
This shows that for the three months that task has been used, March and April
saw the total number of tasks increase, but in May the number decreased as
more task were completed than added.
% task calendar
---------------
This report shows a calendar of the current month, with any task due or
overdue dates marked on it. Color is used to mark these dates.
% task calendar
May 2008
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
% task next
-----------
This report shows you the tasks you should probable work on next. Task will
scan all the tasks and will pick two task from each project to report. Those
two tasks will be chosen in order of overdue, due soon, High, Medium or Low
priority. Essentially task chooses the two most important task for each
project and displays them ordered in the usual way.
If you wish to show a different number of tasks per project, modify the entry
in .taskrc:
next=2
To be your preferred number.
% task <id> ...
---------------
When a task id is specified, everything applies to just that task. Suppose
we needed to correct a task:
% task ls
ID Project Pri Description
12 Errand L Remember to deposit chekc
...
% task 12 Remember to deposit bonus check
% task ls
ID Project Pri Description
12 Errand L Remember to deposit bonus check
...
% task /from/to/
----------------
If a task has been entered with a typo, it can be easily corrected by this
command. For example:
% task ls
ID Project Pri Description
12 Errand L Remember to deposit chekc
...
% task 12 /chekc/check/
% task ls
ID Project Pri Description
12 Errand L Remember to deposit check
...
This command makes single corrections to a task description.
% task tags
-----------
This command will generate a list of all the tags that are currently in use
by task.
% task info <id>
----------------
This command gives detailed information about a single task. It will tell
you when the task was entered, when started, its status, tags, and more.
% task stats
------------
This command generates a list of statistics about your task usage, such as
the average time it takes to complete a task, how often new tasks are added,
and more.
% task completed
----------------
This generates a list of all tasks that have been completed, sorted by their
completion date.
% task export <file name>
-------------------------
This instructs task to write out a CSV format dump of all tasks, both pending
and completed, to the file specified. This is how you might view tasks in a
spreadsheet.
% task colors
-------------
This command displays all the colors that task supports.
% task usage
------------
If logging has been enabled by the "command.logging=on" directive in the
.taskrc file, then task will record every command that is run. When this
command is run, task will display a count of how many times each command was
used.
This command is for the purpose of seeing whether command are actually used.
% task version
--------------
This can be used to show the version number of task, and to display all the
current configuration settings, as read from the .taskrc file.
Interacting with the Shell
--------------------------
Certain characters are interpreted by the shell. For example, the "&". If
you wish to include the & in a task description, you need to escape it, so
the shell doesn't interpret it. For example:
% task add Buy bread & milk
This command is an error because of the &. The shell will consider this to
be two commands:
% task add Buy bread &
% milk
The shell treats the & character as an indicator that the command is complete
and should be run in the background. Then the shell considers "milk" to be a
command all by itself. Which it is not. One way to get around this is to
individually escape the & character:
% task add Buy bread \& milk
Another is to quote the entire description, with either ' or " characters:
% task add "Buy bread & milk"
Task itself interprets the commands, and it too can make mistakes. For
example, any colon : character will be interpreted by task as a delimiter
between an attribute name and its value. Currently there is no workaround
for this.
% task <id> fg:... bg:...
-------------------------
Not strictly a command, the setting of the fg and bg (foreground and
background) attributes determines the colors used to represent the task.
Valid foreground colors are:
Valid background colors are:
Note that these are not just colors, but combinations of colors and
attributes.
Note also that this capability does depend on whether your terminal program
can display these colors.
Configuring Task
----------------
Task recognizes several entries in the .taskrc file for configuration
purposes. Valid entries are of the form:
name=value
Valid examples are:
data.location This is a path to the directory containing all the task
files. By default, it is set up to be ~/.task, for
example: /Users/paul/.task
command.logging May be "on" or "off", defaulting to "off". This
determines whether task records commands. This is not
generally useful, except while developing task.
confirmation May be "yes" or "no", and determines whether task will
ask for confirmation before deleting a task.
nag This may be a string of text, or blank. It is used as
a prompt when a task is completed that is not considered
high priority. The "task next" command lists important
tasks, and completing one of those does not generate
this nagging. Default value is:
Note: try to stick to high priority tasks.
See "task next".
next Is a number, defaulting to 2, which is the number of
tasks for each project that are shown in the "task next"
command.
curses Determines whether task uses ncurses to establish the
size of the window you are using, for text wrapping.
color May be "on" or "off". Determines whether task uses
color.
color.overdue These are the coloration rules. They correspond to a
color.due particular attribute of a task, such as it being due, or
color.pri.H being active, and specifies the automatic coloring of
color.pri.M that task.
color.pri.L
color.pri.none The value may be one optional foreground color (see
color.active below) and one optional background color.
color.tagged
For example, the value may be:
bold_red on_bright_yellow
color.tag.X Colors any task that has the tag X.
color.project.X Colors any task assigned to project X.
color.keyword.X Colors any task where the description contains X.
Colors
------
Task supports color in several places. In cases where you may specify a
color, a foreground, a background, or a combination foreground and background
color may be used. The following are valid foreground colors:
bold underline bold_underline
black bold_black underline_black bold_underline_black
red bold_red underline_red bold_underline_red
green bold_green underline_green bold_underline_green
yellow bold_yellow underline_yellow bold_underline_yellow
blue bold_blue underline_blue bold_underline_blue
magenta bold_magenta underline_magenta bold_underline_magenta
cyan bold_cyan underline_cyan bold_underline_cyan
white bold_white underline_white bold_underline_white
and the following are valid background colors:
on_black on_bright_black
on_red on_bright_red
on_green on_bright_green
on_yellow on_bright_yellow
on_blue on_bright_blue
on_magenta on_bright_magenta
on_cyan on_bright_cyan
on_white on_bright_white

View File

@@ -1,36 +0,0 @@
Some considerable time ago - longer than I had hoped - I demonstrated an
alternate implementation of the todo script, called task, in the form of a
YouTube movie:
http://www.youtube.com/watch?v=l68LCl6BYvs
A lot has happened since then, and the task program has been slowly improving
thanks to feedback from some early testers, and continuous use by me. Today,
I have uploaded a new movie:
http://www.youtube.com/watch?v=D2Kn4DMOVSw
This movie includes most of the changes and improvements to task, but behind
the scenes are the biggest changes. There was a rewrite of the underlying
storage mechanism yielding a clean API for the front end, and the code was
reviewed for portability and converted to use GNU autoconf/automake.
Task has been released under GPL, and so far has been tested on:
Max OS X 10.4 (Tiger)
Max OS X 10.5 (Leopard)
Fedora 8
Fedora 9
Ubuntu 8 (Hardy Heron)
Solaris 10
Task has been making me more organized and productive for some time now.
Perhaps some of you might find it useful, and I welcome feedback of all kinds.
You can find the task source code at:
http://www.beckingham.net/task-1.0.0.tar.gz
Thank you.
Paul Beckingham

281
binary/COPYING.txt Normal file
View File

@@ -0,0 +1,281 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS

51
binary/README.txt Normal file
View File

@@ -0,0 +1,51 @@
Thank you for taking a look at task. Task is a GTD utility featuring:
- Robust C++ implementation
- Tags
- Colorful, tabular output
- Reports, graphs
- Lots of commands
- Low-level API
- Abbreviations for all commands, options
- Multi-user file locking
- Clean architecture allowing quick addition of new features
- Recurring tasks
It is intended that features, mainly in the form of reports will be added
frequently, with best practices and useful reports evolving from usage patterns.
Task is scope-limited to GTD functionality only.
You may want to watch the old task movie on YouTube:
http://www.youtube.com/watch?v=l68LCl6BYvs
or the new improved one:
http://www.youtube.com/watch?v=D2Kn4DMOVSw
Either will give you a fairly good idea of what task is capable of, and
whether it fits in to your way of working. As a command line application,
task is not for everyone and some of you may prefer to not proceed. The
movie or online tutorial file are the quickest way for you to make that
decision. The online tutorial can be found at:
http://www.beckingham.net/task.html
Task is based on ideas presented in the todo.sh script, found on:
http://todotxt.org
Task has many more features than todo.sh, but fundamentally, they are
both working toward the same goals, which is to help you follow basic
Getting Things Done (GTD) principles.
All feedback is welcome, in addition to any bug reports or patches to:
task@beckingham.net
Got an idea for an enhancement? Send a message!
I have found that task makes me more productive and organized.
I hope task can do the same for you.

View File

@@ -2,7 +2,36 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT(task, 1.0.0, bugs@beckingham.net)
AC_INIT(task, 1.5.0, bugs@beckingham.net)
CFLAGS="${CFLAGS=}"
CXXFLAGS="${CXXFLAGS=}"
# this macro is used to get the arguments supplied
# to the configure script (./configure --enable-debug)
# Check if we have enable debug support.
AC_MSG_CHECKING(whether to enable debugging)
debug_default="yes"
AC_ARG_ENABLE(debug, [ --enable-debug=[no/yes] turn on debugging
[default=$debug_default]],, enable_debug=$debug_default)
# Yes, shell scripts can be used
if test "$enable_debug" = "yes"; then
CXXFLAGS="$CFLAGS -Wall -pedantic -ggdb3 -DDEBUG"
AC_MSG_RESULT(yes)
else
CXXFLAGS="$CFLAGS -O3"
AC_MSG_RESULT(no)
fi
# Check for OS.
OS=`uname|sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
if test "$OS" = "sunos"; then
AC_MSG_NOTICE([OS Solaris detected])
AC_DEFINE([SOLARIS], [], [Compiling on Solaris])
else
AC_MSG_NOTICE([OS Non-Solaris detected])
AC_DEFINE([LINUX], [], [Compiling on Non-Solaris])
fi
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/task.cpp])
AC_CONFIG_HEADER([auto.h])
@@ -12,6 +41,8 @@ AC_PROG_CXX
AC_PROG_CC
AC_LANG(C++)
AC_SUBST(CFLAGS)
# Checks for libraries.
AC_CHECK_LIB(ncurses,initscr)
AC_CHECK_LIB(ncurses,endwin)
@@ -19,7 +50,7 @@ AC_CHECK_LIB(ncurses,endwin)
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h sys/file.h sys/stat.h sys/time.h unistd.h])
AC_CHECK_HEADERS([string vector map])
AC_CHECK_HEADERS([sstream string vector map])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
@@ -33,8 +64,11 @@ AC_STRUCT_TM
AC_FUNC_MKTIME
AC_FUNC_SELECT_ARGTYPES
AC_CHECK_FUNCS([select])
AC_CHECK_FUNC(flock, [AC_DEFINE([HAVE_FLOCK], [1], [Found flock])])
#AC_CHECK_FUNC(flock, [AC_DEFINE([HAVE_FLOCK], [1], [Found flock])])
AC_CHECK_FUNC(uuid_unparse_lower, [AC_DEFINE([HAVE_UUID], [1], [Found uuid_unparse_lower])])
AC_CHECK_FUNC(random, [AC_DEFINE([HAVE_RANDOM], [1], [Found random])])
AC_CHECK_FUNC(srandom, [AC_DEFINE([HAVE_SRANDOM], [1], [Found srandom])])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

40
grammar.bnf Normal file
View File

@@ -0,0 +1,40 @@
# This is a full BNF grammar for the task command line. It is intended that a
# future release of task will incorporate a complete lexer/parser implementing
# this grammar, which will allow for more sophisticated command lines, for
# example:
#
# task delete 1 2 4-7
# task add pri:H pro:X -- pro pri 1 ///
#
command ::= simple_command
| filter_command filter?
| id_command
| "export" file
| <id>
| <id> <substitution> ;
simple_command ::= "version" | "help" | "projects" | "tags" | "next" | "stats"
| "color" ;
filter_command ::= "summary" | "history" | "calendar" | "active" | "overdue"
| "oldest" | "newest" | "add" | "list" | "long" | "ls"
| "completed" ;
id_command ::= "delete" | "undelete" | "info" | "start" | "end" | "done"
| "undo" ;
filter ::= filter_part+ ;
filter_part ::= tag_add | tag_remove | attribute | word ;
tag_add ::= "+" word ;
tag_remove ::= "-" word ;
attribute ::= word ":" word ;
word ::=
file ::=
id ::= digit+ ;
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
substitution ::= "/" word+ "/" word* "/" ;

131
html/30second.html Normal file
View File

@@ -0,0 +1,131 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>30-Second Tutorial</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="simple">30-second Tutorial</a></h2>
<div class="content">
<p>
For the excessively lazy.
Add two tasks:
</p>
<pre><code>% task add Read task documents later
% task add priority:H Pay bills</code></pre>
<p>
Easy. See that second one has a High priority? Now let's look at those tasks:
</p>
<pre><code>% task ls
ID Project Pri Description
2 H Pay bills
1 Read task documents later</code></pre>
<p>
They are ordered by priority. Let's mark number 2 as done:
</p>
<pre><code>% task 2 done
% task ls
ID Project Pri Description
1 Read task documents later</code></pre>
<p>
Gone. Now let's delete that remaining task, because, well,
why bother now we are already using task:
</p>
<pre><code>% task delete 1
% task ls
No matches</code></pre>
<p>
Easy. But now consider checking out what task can really do...
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

449
html/advanced.html Normal file
View File

@@ -0,0 +1,449 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Advanced Usage</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="advanced">Advanced Usage</a></h2>
<div class="content">
<p>
Here are the other commands, in some detail.
</p>
<strong>% task</strong>
<p>
With no arguments, this command will generate a help message that
lists all these commands.
</p>
<p>
However, if the following configuration variable is specified:
</p>
<pre><code>default.command=list pri:H</code></pre>
<p>
Then this command will be run whenever task is run without arguments.
This means that your most common task command can be run simply
with the command:
</p>
<pre><code>% task
[task list project:foo]
ID Project Pri Description
1 foo H Design the thing
2 foo Build the thing</code></pre>
<strong>% task projects</strong>
<p>
This report generates a list of all the different projects that you
are using along with a count of the pending tasks for each project.
For example:
</p>
<pre><code>% task projects
Project Tasks
Errands 1
Birthdays 3
Car 2</code></pre>
<strong>% task summary</strong>
<p>
This report lists all the projects and a summary of their task
status.
</p>
<pre><code>% task summary
Project Remaining Avg age Complete 0% 100%
Errands 1 3 days 50% XXXXXXXXXXXXXXXX
Birthdays 3 7 mths 0%
Car 2 2 wks 25% XXXXXXXXX</code></pre>
<p>
This shows the project, the remaining tasks, the average age of each
task, the percentage completed (remaining vs total) and a bar
indicating that percentage.
</p>
<strong>% task delete &lt;id&gt;</strong>
<p>
There are two ways of getting rid of tasks - mark them as done, or
delete them.
</p>
<strong>% task undelete &lt;id&gt;</strong>
<p>
If a task was inadvertently deleted, it may be undeleted, provided that no
reports have been run since the deletion. Ideally, the undelete command is
run immediately after the erroneous delete command.
</p>
<p>
If a report is run (such as "task list"), then task performs a garbage
collection that removes deleted tasks, and the task cannot be undeleted.
</p>
<strong>% task done &lt;id&gt;</strong>
<p>
This is how a task is marked as done.
</p>
<strong>% task list ...</strong>
<p>
The list report will show the active status, and age of the task in
addition to the columns that "task ls" shows. It is just a more
detailed list.
</p>
<strong>% task long ...</strong>
<p>
The long report will show the entry date and start date of a task,
in addition to the columns that the "task list" shows.
</p>
<strong>% task start &lt;id&gt;</strong>
<p>
This marks a task as started (and therefore active), which is shown
in the "list" report:
</p>
<pre><code>% task list
ID Project Pri Due Active Age Description
12 Errand L Remember to deposit check
...
% task start 12
% task list
ID Project Pri Due Active Age Description
12 Errand L * 3 days Remember to deposit check
...</code></pre>
<strong>% task active</strong>
<p>
Shows all active tasks, that is, the tasks for which the
"task start ..." command was run, as shown above.
</p>
<strong>% task stop &lt;id&gt;</strong>
<p>
Marks a task as inactive, by removing the start time.
</p>
<strong>% task overdue</strong>
<p>
Simply lists all the task that have a due date that is past, in
"list" format.
</p>
<strong>% task history</strong>
<p>
This report shows you an overview of how many tasks were added,
completed and deleted, by month. It looks like this:
</p>
<pre><code>% task history
Year Month Added Completed Deleted Net
2008 March 21 16 0 5
April 13 11 1 1
May 8 14 3 -9</code></pre>
<p>
This shows that for the three months that task has been used, March
and April saw the total number of tasks increase, but in May the
number decreased as more task were completed than added.
</p>
<strong>% task calendar</strong>
<p>
This report shows a calendar of the current month, with any task
due or overdue dates marked on it. Color is used to mark these
dates.
</p>
<pre><code>% task calendar
May 2008
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31</code></pre>
<strong>% task next</strong>
<p>
This report shows you the tasks you should probable work on next.
Task will scan all the tasks and will pick two task from each
project to report. Those two tasks will be chosen in order of
overdue, due soon, High, Medium or Low priority. Essentially task
chooses the two most important task for each project and displays
them ordered in the usual way.
</p>
<p>
If you wish to show a different number of tasks per project, modify
the entry in .taskrc:
</p>
<pre><code>next=2</code></pre>
<p>
To be your preferred number.
</p>
<strong>% task &lt;id&gt; ...</strong>
<p>
When a task id is specified, everything applies to just that task.
Suppose we needed to correct a task:
</p>
<pre><code>% task ls
ID Project Pri Description
12 Errand L Remember to deposit chekc
...
% task 12 Remember to deposit bonus check
% task ls
ID Project Pri Description
12 Errand L Remember to deposit bonus check
...</code></pre>
<strong>% task oldest</strong>
<p>
Lists the oldest tasks. Shows 10 tasks by default, but can be
set via the "oldest" configuration variable.
</p>
<strong>% task newest</strong>
<p>
Lists the newest tasks. Shows 10 tasks by default, but can be
set via the "newest" configuration variable.
</p>
<strong>% task /from/to/</strong>
<p>
If a task has been entered with a typo, it can be easily corrected
by this command. For example:
</p>
<pre><code>% task ls
ID Project Pri Description
12 Errand L Remember to deposit chekc
...
% task 12 /chekc/check/
% task ls
ID Project Pri Description
12 Errand L Remember to deposit check
...</code></pre>
<p>
This command makes single corrections to a task description.
</p>
<strong>% task tags</strong>
<p>
This command will generate a list of all the tags that are currently
in use by task.
</p>
<strong>% task info &lt;id&gt;</strong>
<p>
This command gives detailed information about a single task. It
will tell you when the task was entered, when started, its status,
tags, and more.
</p>
<strong>% task stats</strong>
<p>
This command generates a list of statistics about your task usage,
such as the average time it takes to complete a task, how often new
tasks are added, and more.
</p>
<strong>% task completed</strong>
<p>
This generates a list of all tasks that have been completed, sorted
by their completion date.
</p>
<strong>% task export &lt;file name&gt;</strong>
<p>
This instructs task to write out a CSV format dump of all tasks,
both pending and completed, to the file specified. This is how you
might view tasks in a spreadsheet.
</p>
<strong>% task colors</strong>
<p>
This command displays all the colors that task supports.
</p>
<strong>% task version</strong>
<p>
This can be used to show the version number of task, and to display
all the current configuration settings, as read from the .taskrc
file.
</p>
<strong>% task rc:&lt;file&gt; ...</strong>
<p>
By specifying rc:<file>, it is possible to force task to use an alternate
.taskrc file. By default, task looks in your home directory, so these two
commands are essentially identical:
</p>
<pre><code>% task list
% task rc:~/.taskrc list</code></pre>
<p>
What this override allows, is the possibility of keeping your task lists
completely separate, say for work and home. This can be accomplished with
the following commands (valid for bash):
</p>
<pre><code>% alias htask="task rc:/home/me/.taskrc_home"
% alias wtask="task rc:/home/me/.taskrc_work"
% htask list
...
% wtask list
...</code></pre>
<strong>% task &lt;id&gt; "new description"</strong>
<p>
Not strictly a command, the replacement of the description can
be achieved by quoting the entire description. The quotes are
necessary in case one of the description words looks like a task
command.
</p>
<strong>% task &lt;id&gt; fg:... bg:...</strong>
<p>
Not strictly a command, the setting of the fg and bg (foreground
and background) attributes determines the colors used to represent
the task. Valid foreground colors are:
</p>
<pre><code> bold underline bold_underline
black bold_black underline_black bold_underline_black
red bold_red underline_red bold_underline_red
green bold_green underline_green bold_underline_green
yellow bold_yellow underline_yellow bold_underline_yellow
blue bold_blue underline_blue bold_underline_blue
magenta bold_magenta underline_magenta bold_underline_magenta
cyan bold_cyan underline_cyan bold_underline_cyan
white bold_white underline_white bold_underline_white</code></pre>
<p>
Note that these are not just colors, but combinations of colors and
attributes. Valid background colors are:
</p>
<pre><code>on_black on_bright_black
on_red on_bright_red
on_green on_bright_green
on_yellow on_bright_yellow
on_blue on_bright_blue
on_magenta on_bright_magenta
on_cyan on_bright_cyan
on_white on_bright_white</code></pre>
<p>
Note also that this capability does depend on whether your terminal
program can display these colors.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

128
html/color.html Normal file
View File

@@ -0,0 +1,128 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Color Usage</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="color">Colors</a></h2>
<div class="content">
<p>
Task supports color in several places. In cases where you may
specify a color, a foreground, a background, or a combination
foreground and background color may be used. The following are
valid foreground colors:
</p>
<pre><code> bold underline bold_underline
black bold_black underline_black bold_underline_black
red bold_red underline_red bold_underline_red
green bold_green underline_green bold_underline_green
yellow bold_yellow underline_yellow bold_underline_yellow
blue bold_blue underline_blue bold_underline_blue
magenta bold_magenta underline_magenta bold_underline_magenta
cyan bold_cyan underline_cyan bold_underline_cyan
white bold_white underline_white bold_underline_white</code></pre>
<p>
and the following are valid background colors:
</p>
<pre><code>on_black on_bright_black
on_red on_bright_red
on_green on_bright_green
on_yellow on_bright_yellow
on_blue on_bright_blue
on_magenta on_bright_magenta
on_cyan on_bright_cyan
on_white on_bright_white</code></pre>
<p>
Depending on your terminal color choices, task can display all
the colors it supports with the command:
</p>
<img src="images/color.png" />
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

397
html/config.html Normal file
View File

@@ -0,0 +1,397 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Configuration</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="config">Configuring Task</a></h2>
<div class="content">
<p>
Task recognizes several entries in the .taskrc file for
configuration purposes. Valid entries are of the form:
</p>
<pre><code>name=value</code></pre>
<p>
Valid examples are:
</p>
<dt>data.location</dt>
<dd>
This is a path to the directory containing all the task files.
By default, it is set up to be ~/.task, for example:
/Users/paul/.task
</dd>
<dt>confirmation</dt>
<dd>
May be "yes" or "no", and determines whether task will ask for
confirmation before deleting a task.
</dd>
<dt>nag</dt>
<dd>
This may be a string of text, or blank. It is used as a prompt
when a task is completed that is not considered high priority.
The "task next" command lists important tasks, and completing
one of those does not generate this nagging. Default value is:
<strong>Note: try to stick to high priority tasks. See "task next".</strong>
</dd>
<dt>next</dt>
<dd>
Is a number, defaulting to 2, which is the number of tasks for
each project that are shown in the "task next" command.
</dd>
<dt>curses</dt>
<dd>
Determines whether task uses ncurses to establish the size of
the window you are using, for text wrapping.
</dd>
<dt>blanklines</dt>
<dd>
May be "on" or "off". Prevents the display of unnecessary blank
lines so that task makes better use screen real estate on small-
screened devices.
</dd>
<dt>dateformat</dt>
<dd>
<p>
This is a string of characters that define how task formats dates.
The default value is:
</p>
<pre><code>m/d/Y</code></pre>
<p>
which means dates look like:
</p>
<pre><code>6/7/2008</code></pre>
<p>
The string should contain the characters:
<table>
<tr>
<th class="table_h">Character</th>
<th class="table_h">Meaning</th>
<th class="table_h">Example</th>
</tr>
<tr>
<td class="table_d">m</td>
<td class="table_d">minimal-digit month</td>
<td class="table_d">1, 12</td>
</tr>
<tr>
<td class="table_d">d</td>
<td class="table_d">minimal-digit day</td>
<td class="table_d">1, 30</td>
</tr>
<tr>
<td class="table_d">y</td>
<td class="table_d">two-digit year</td>
<td class="table_d">08</td>
</tr>
<tr>
<td class="table_d">M</td>
<td class="table_d">two-digit month</td>
<td class="table_d">01, 12</td>
</tr>
<tr>
<td class="table_d">D</td>
<td class="table_d">two-digit day</td>
<td class="table_d">01, 30</td>
</tr>
<tr>
<td class="table_d">Y</td>
<td class="table_d">four-digit year</td>
<td class="table_d">2008</td>
</tr>
</table>
</p>
<p>
The string may also contain other characters to act as spacers,
or formatting. Other values could include (but are not limited to):
</p>
<p>
<table>
<tr>
<th class="table_h">dateformat</td>
<th class="table_h">How it looks</th>
</tr>
<tr>
<td class="table_d">d/m/Y</td>
<td class="table_d">7/6/2008</td>
</tr>
<tr>
<td class="table_d">YMD</td>
<td class="table_d">20080607</td>
</tr>
<tr>
<td class="table_d">m-d-y</td>
<td class="table_d">6-7-08</td>
</tr>
</table>
</p>
</dd>
<dt>monthsperline</dt>
<dd>
Determines how many months the "task calendar" command
renders across the screen. Defaults to however many will
fit. If more months that will fit are specified, task will
only show as many that will fit.
</dd>
<dt>defaultwidth</dt>
<dd>
The width of tables used when ncurses support is not available.
Defaults to 80.
</dd>
<dt>due</dt>
<dd>
This is the number of days into the future that define when a
task is considered due, and is colored accordingly.
Defaults to 7.
</dd>
<dt>color</dt>
<dd>
May be "on" or "off". Determines whether task uses color.
When "off", task will use dashes (-----) to underline column
headings.
</dd>
<dt>
color.overdue<br />
color.due<br />
color.pri.H<br />
color.pri.M<br />
color.pri.L<br />
color.pri.none<br />
color.active<br />
color.tagged<br />
color.recurring
</dt>
<dd>
These are the coloration rules. They correspond to a particular
attribute of a task, such as it being due, or being active, and
specifies the automatic coloring of that task. The value may
be one optional foreground color (see below) and one optional
background color. For example, the value may be:
<br />
<strong>bold_red on_bright_yellow</strong>
</dd>
<dt>color.tag.X</dt>
<dd>
Colors any task that has the tag X.
</dd>
<dt>color.project.X</dt>
<dd>
Colors any task assigned to project X.
</dd>
<dt>color.keyword.X</dt>
<dd>
Colors any task where the description contains X.
</dd>
<dt>default.project</dt>
<dd>
Provides a default project name for the "task add ..." command.
</dd>
<dt>default.priority</dt>
<dd>
Provides a default priority for the "task add ..." command.
</dd>
<dt>default.command</dt>
<dd>
<p>
Provides a default command that is run every time task is
invoked with no arguments. For example, if set to:
</p>
<pre><code>default.command=list project:foo</code></pre>
<p>
Then task will run the "list project:foo" command if no
command is specified. This means that by merely typing:
</p>
<pre><code>% task
[task list project:foo]
ID Project Pri Description
1 foo H Design the thing
2 foo Build the thing</code></pre>
<p>
Note that the value of this variable is simply the command
line that you would ordinarily type, but without the
preceding "task" program name.
</p>
</dd>
<dt>shadow.file</dt>
<dd>
<p>
If specified, designates a file path that will be autoamtically
written to by task, whenever the task database changes. In other
words, it is automatically kept up to date.
</p>
<p>
The shadow.command configuration variable is used to determine
which report is written to the shadow file. There is no color
used in the shadow file.
</p>
<p>
This feature can be useful in maintaining a current file for
use by the "Samurize" program.
</p>
</dd>
<dt>shadow.command</dt>
<dd>
<p>
This is the command that is run to maintain the shadow file,
determined by the shadow.file configuration variable. The
format is identical to that of default.command - please see
the documentation for default.command.
</p>
<p>
If this command is not specified, task will use the default.command
value instead. If that is not specified, the command "list" is used.
</p>
</dd>
<dt>shadow.notify</dt>
<dd>
When this value is set to "on", task will display a message
whenever the shadow file is updated by some task command.
</dd>
<dt>locking</dt>
<dd>
<p>
Determines whether task uses file locking when accessing the pending.data
and completed.data files. Default to "on". Solaris users who store
the task data files on an NFS mount may need to set locking to "off".
</p>
<p>
Note that setting this value to "off" is dangerous. It means that
another program may write to the task.pending file when task is
attempting to do the same.
</p>
</dd>
<p>
Note that the command:
</p>
<pre><code>task version</code></pre>
<p>
will display the configuration variables found in the .taskrc file,
and will warn you of any variables that are not recognized.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

164
html/custom.html Normal file
View File

@@ -0,0 +1,164 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Custom Reports</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title">Custom Reports</h2>
<div class="content">
<p>
Task allows you to customize reports, to a limited degree.
The "list", "long", "ls", "oldest" and "newest" reports are
all now custom reports, whereas in previous releases of task
they were not mutable. This means they can be modified,
renamed, or deleted.
</p>
<p>
More importantly, you can define your own. Here are the
three necessary items in the .taskrc file that define a new
report:
</p>
<code><pre>report.mine.description=Just the essentials
report.mine.columns=id,project,priority,description
report.mine.sort=priority-,project+</pre></code>
<p>
This defines a report, called "mine", that has four columns:
id, project, priority and description. It will be sorted on
two columns: by descending priority then ascending project.
The description that shows up in the task command usage page
is "Just the essentials". Because this report is called
"mine", it can be run with the command:
</p>
<code><pre>% task mine</pre></code>
<p>
An optional filter can also be specified like this:
</p>
<code><pre>report.mine.filter=priority:H +bug</pre></code>
<p>
This adds a filter so that only tasks with priority "H" and
with the "bug" tag are included in the report. This filter
definition is optional.
</p>
<p>
An optional limit can also be specified, which limits the
number of tasks shown in the report. If a limit is not
specified, then the number of tasks is not limited.
</p>
<code><pre>report.mine.limit=10</pre></code>
<p>
Here is a list of all the possible columns that may be included
in a report:
</p>
<ul>
<li>id
<li>uuid
<li>project
<li>priority
<li>entry
<li>start
<li>due
<li>age
<li>active
<li>tags
<li>recur
<li>description
</ul>
<p>
Custom reports will show up in the task command line usage.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

161
html/date.html Normal file
View File

@@ -0,0 +1,161 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Date Handling</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title">Date Handling</h2>
<div class="content">
<p>
Task reads dates from the command line, and displays dates in the reports.
</p>
<p>
In order to do this in a flexible way, task obeys a configuration variable that
determines the expected and desired date format. See the
<a href="config.html">Configuring Task</a> page for details.
</p>
<p>
In addition to exactly specifying the date, such as:
</p>
<pre><code>% task ... due:7/10/2008</code></pre>
<p>
task supports a flexible variety of alternatives. For example:
</p>
<pre><code>% task ... due:today</code></pre>
<p>
Similarly:
</p>
<pre><code>% task ... due:yesterday
% task ... due:tomorrow</code></pre>
<p>
Here are some other forms that are accepted. The day number, followed by an
ordinal:
</p>
<pre><code>% task ... due:23rd</code></pre>
<p>
End of month:
</p>
<pre><code>% task ... due:eom</code></pre>
<p>
End of year:
</p>
<pre><code>% task ... due:eoy</code></pre>
<p>
End of week (Friday):
</p>
<pre><code>% task ... due:eow</code></pre>
<p>
Next Friday:
</p>
<pre><code>% task ... due:Friday</code></pre>
<p>
Note that next Friday means seven days from now if today is Friday, otherwise
it means the next occurring Friday. Most of these forms may be specified using
abbreviations, provided they are unique. For example:
</p>
<pre><code>% task ... due:fri</code></pre>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

133
html/filter.html Normal file
View File

@@ -0,0 +1,133 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Filters</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title">Task Filters</h2>
<div class="content">
<p>
A task filter is a means of reducing a task report to a
subset that may consist of all tasks that have a specific
project, priority, tag, or part of the description.
</p>
<p>
A task filter consists of additional command line options,
that are specified in the same way as when a task is added.
</p>
<p>
All task reports can make use of filters.
</p>
<p>
For example, the report:
</p>
<code><pre>% task list</pre></code>
<p>
Lists all tasks.
</p>
<code><pre>% task list the</pre></code>
<p>
Lists only tasks with "the" in the task description.
</p>
<code><pre>% task list project:Home priority:H</pre></code>
<p>
Lists only tasks with both the "Home" project and "H" priority.
</p>
<code><pre>% task list +shopping</pre></code>
<p>
Lists only tasks with the "shopping" tag.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

BIN
html/images/color.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

214
html/links.html Normal file
View File

@@ -0,0 +1,214 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task on the Web</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h1 class="title">Task on the Web</h1>
<p>
Task links from around the web...
</p>
<dt>
February 2009, <a href="http://lifehacker.com/5155450/todotxt-cli-manages-your-tasks-from-the-command-line">Todo.txt CLI Manages Your Tasks from the Command Line</a>
</dt>
<dd>
Gina Trapani generously mentions task in an article about the newly updated, todo.sh 2.0.
</dd>
<br>
<dt>
February, 2009, <a href="http://forum.worklifecreativity.net/index.php/topic,219.0.html">My command line based task management tools</a>
</dt>
<dd>
Richard Querin talks about his task management tools.
Richard generously provides the Debian packages for task.
</dd>
<br>
<dt>
February, 2009, <a href="http://wiki.archlinux.org/index.php/Common_Apps">Common Apps</a>
</dt>
<dd>
<a href="http://wiki.archlinux.org">Archlinux.org</a> mentions task on a page which is
a point of reference for people looking for software to fill a particular need.
</dd>
<br>
<dt>
November 2008, <a href="http://github.com/pbeckingham/task/tree/master/">Task repository on GitHub</a>
</dt>
<dd>
For developers: the task git repository on github.com is now public.
</dd>
<br>
<dt>
October 2008, <a href="http://blog.rfquerin.org/2008/10/07/using-task-and-dropbox-to-manage-your-to-do-list/">Using Task and Dropbox to manage your To-Do list</a>
</dt>
<dd>
by Richard Querin. Richard discusses the ease of setting up task to
use DropBox to share todo lists between work and home.
</dd>
<br>
<dt>
September 2008, <a href="http://stasantons.blogspot.com/2008/09/task-program-visually-simple.html">Task visualization</a>
</dt>
<dd>
by Stas Antons. Stas - a colleague of mine - presents a visualization
of the simplicity of task.
</dd>
<br>
<dt>
June 2008, <a href="http://blog.rfquerin.org/2008/06/17/building-debian-packages-for-task/">Building Debian Packages For Task</a>
</dt>
<dd>
by Richard Querin. Richard has been providing Debian packages for the
various task releases, and discusses how he got up to speed.
</dd>
<br>
<dt>
June 2008, <a href="http://blog.rfquerin.org/2008/06/06/task-101-an-attempt-at-a-cygwin-build-how-to/">Task 1.0.1 - an attempt at a Cygwin Build How-To</a>
</dt>
<dd>
by Richard Querin. Richard shows us how to build task using Cygwin, after
a cry for help on the todo.txt mailing list.
</dd>
<br>
<dt>
June 2008, <a href="http://www.youtube.com/watch?v=D2Kn4DMOVSw">The second task movie</a>
</dt>
<dd>
This YouTube movie was made to illustrate some of the features of the task
program, back when task 1.0.0 was released. While task has grown
significantly since then, the commands shown are still valid. It will
soon be time for a new movie!
<p>
This movie has a voice-over that explains what is going on.
<p>
For a higher-quality version, download the whole
<a href="http://www.beckingham.net/todo2.mov">movie file (10MB)</a>.
</dd>
<br>
<dt>
December 2006, <a href="http://www.youtube.com/watch?v=l68LCl6BYvs">The first task movie</a>
</dt>
<dd>
This original YouTube task movie was made to illustrate the features of the
then-unreleased task program. The idea was to get some feedback and see
whether anyone was interested in a new implementation of todo.sh, that added
features that are not easily possible with a shell implementation.
<p>
This movie has no voice-over, and you may notice that it exactly duplicates
the commands used in the original todo.sh movie (below). That is, until it
deviates because of new task commands.
</dd>
<br>
<dt>
June 2006, <a href="http://www.youtube.com/watch?v=daJ1Hs_y738">The original todo.sh movie</a>
</dt>
<dd>
by Gina Trapani. This is the original YouTube todo.sh movie, made to
illustrate the power and simplicity of the original todo.sh program.
</dd>
<br>
<dt>
June 2006, <a href="http://todotxt.com/">Todo.sh, the inspiration for task</a>
</dt>
<dd>
by Gina Trapani. The website that introduced me to the power and
simplicity of the original todo.sh program. Contains useful links
and resources - take a look!
</dd>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

206
html/recur.html Normal file
View File

@@ -0,0 +1,206 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Recurring Tasks</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title">Recurring Tasks</h2>
<div class="content">
<p>
Task supports recurring tasks, which is a task that keeps falling due, on a
regular schedule. An example of this may be "pay rent". Here is how
recurring tasks work in task:
</p>
<p>
Ordinarily, a task is a single item that is entered in the pending state, and
remains so until it is either completed or deleted. This is an example of a
single instance task.
</p>
<p>
A recurring task is different. When a recurring task is entered, it remains
hidden from view, but acts as a root task for a task instances that are
generated on a regular basis. Consider the example:
</p>
<pre><code>% task Pay rent due:7/1/2008 recur:monthly</code></pre>
<p>
If today's date is 7/10, for example, then that due date is in the past, and
you might expect there to be an already overdue task for 7/1/2008, and another
due on 8/1/2008. This means that from that root, task has created two
instances with different due dates.
</p>
<pre><code>% task list
ID Project Pri Due Active Age Description
1 7/1/2008 1 min Pay rent
2 8/1/2008 1 min Pay rent
2 tasks</code></pre>
<p>
Task creates any overdue tasks, then creates one additional due task. These
new task instances are then completed or deleted as you normally would.
</p>
<p>
In the example above, a new task instance is created every month, and this will
repeat indefinitely. Task also supports an end date. Suppose you are taking
every Friday off work for the summer. You'll need to submit your TPS report on
Thursdays instead:
</p>
<pre><code>% task TPS report due:thursday recur:weekly until:8/31/2008</code></pre>
<p>
This create a weekly recurring task that expires on 8/31/2008. What this means
is that after all those task instances have been created, then completed or
deleted, the root task will expire and disappear. Task will tell you what it
is doing when this happens.
</p>
<h4>Deletion</h4>
<p>
When a recurring task is deleted, you will be asked if you would also like to
delete all recurring task instances:
</p>
<pre><code>% task del 1
Permanently delete task? (y/n) y
This is a recurring task. Do you want to delete all pending
recurrences of this same task? (y/n) y</code></pre>
<h4>Recurrence Periods</h4>
<p>
In the above examples, the recurrence period was specified as "monthly" and
"weekly". Task supports several ways of specifying this:
</p>
<table>
<tr>
<th class="table_h">Period</th>
<th class="table_h">Meaning</th>
</tr>
<tr>
<td class="table_d">daily, day, 1d, 2d ...</td>
<td class="table_d">Every day, or a number of days</td>
</tr>
<tr>
<td class="table_d">weekly, 1w, 2w ...</td>
<td class="table_d">Every week, or a number of weeks</td>
</tr>
<tr>
<td class="table_d">biweekly, fortnight</td>
<td class="table_d">Every two weeks</td>
</tr>
<tr>
<td class="table_d">monthly, 1m, 2m ...</td>
<td class="table_d">Every month, or a number of months</td>
</tr>
<tr>
<td class="table_d">bimonthly</td>
<td class="table_d">Every two months</td>
</tr>
<tr>
<td class="table_d">quarterly, 1q, 2q ...</td>
<td class="table_d">Every three months, a quarter, or a number of quarters</td>
</tr>
<tr>
<td class="table_d">semiannual</td>
<td class="table_d">Every six months</td>
</tr>
<tr>
<td class="table_d">annual, yearly, 1y, 2y ...</td>
<td class="table_d">Every year, or a number of years</td>
</tr>
<tr>
<td class="table_d">biannual, biyearly, 2y</td>
<td class="table_d">Every two-years</td>
</tr>
</table>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

141
html/setup.html Normal file
View File

@@ -0,0 +1,141 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Setup</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="setup">Quick Setup</a></h2>
<div class="content">
<p>
Build the task program according to the directions in the INSTALL
file. This transcript illustrates a typical installation:
</p>
<pre><code>% ls
task-1.4.1.tar.gz
% gunzip task-1.4.1.tar.gz
% tar xf task-1.4.1.tar
% cd task-1.4.1
% ./configure
...
% make
...
% make install # (may require sudo, depending on --prefix)</code></pre>
<p>
(For those of you using <a href="http://www.cygwin.com">Cygwin</a>,
you need to make sure you have the "gcc" and "make" packages
available, which are found in the "devel" category. For more
task features, also make sure you have "libncurses-devel" and
"lincurse8".)
</p>
<p>
You need to make sure that the installed task program is in your
PATH environment variable.
</p>
<p>
Task reads a configuration file - called .taskrc in your home
directory - and stores pending and completed tasks in in a directory
specified in the configuration file.
</p>
<p>
The simplest way to get a configuration file and task directory is
to run task. On startup, task will check to see if it can find the
configuration file and task directory, and if not found, will ask
you whether it may create both.
</p>
<pre><code>% task version
A configuration file could not be found in /Users/paul/.taskrc
Would you like a sample .taskrc created, so task can proceed? (y/n) y
Done.
[then task will show version information]</code></pre>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

126
html/shadow.html Normal file
View File

@@ -0,0 +1,126 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Shadow Files</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title">Task Shadow Files</h2>
<div class="content">
<p>
A shadow file is a text file containing a copy of a task
report. It is automatically maintained by task whenever
something changes in the task database.
</p>
<p>
This means there is always a current version of the task
report kept in a text file. Products such as
<a href="http://www.samurize.com">Samurize</a>,
<a href="http://www.mulle-kybernetik.com/software/MkConsole/">MkConsole</a>,
or
<a href="http://projects.tynsoe.org/en/geektool/">GeekTool</a>
can display this file on the computer desktop, so that it
is readily visible.
</p>
<p>
To use a shadow file, edit your .taskrc configuration file,
and add two entries as shown:
</p>
<pre><code>shadow.file=/path/to/file
shadow.command=list pri:H</code></pre>
<p>
In this example the shadow file contains a report equivalent
to running "task list pri:H".
</p>
<p>
You can use any task command that generates a report, and of
course, you can specify any file name, provided the directory
it resides in already exists.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

131
html/shell.html Normal file
View File

@@ -0,0 +1,131 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Interacting with the Shell</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="shell">Interacting with the Shell</a></h2>
<div class="content">
<p>
Certain characters are interpreted by the shell. For example, the
"&amp;". If you wish to include the &amp; in a task description,
you need to escape it, so the shell doesn't interpret it. For
example:
</p>
<pre><code>% task add Buy bread &amp; milk</code></pre>
<p>
This command is an error because of the &amp;. The shell will
consider this to be two commands:
</p>
<pre><code>% task add Buy bread &amp;
% milk</code></pre>
<p>
The shell treats the &amp; character as an indicator that the
command is complete and should be run in the background. Then the
shell considers "milk" to be a command all by itself. Which it is
not. One way to get around this is to individually escape the &amp;
character:
</p>
<pre><code>% task add Buy bread \&amp; milk</code></pre>
<p>
Another is to quote the entire description, with either ' or "
characters:
</p>
<pre><code>% task add "Buy bread &amp; milk"</code></pre>
<p>
Task itself interprets the commands, and it too can make mistakes.
For example, any colon : character will be interpreted by task as a
delimiter between an attribute name and its value. Currently there
is no workaround for this.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

356
html/simple.html Normal file
View File

@@ -0,0 +1,356 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Simple Usage</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="simple">Simple Usage</a></h2>
<div class="content">
<p>
Let us begin by adding some tasks:
</p>
<pre><code>% task add Book plane ticket
% task add Rent a tux
% task add Reserve a rental car
% task add Reserve a hotel room</code></pre>
<p>
That's it. You'll notice immediately that task has a very
minimalist interface. Let us take a look at those tasks:
</p>
<pre><code>% task ls
ID Project Pri Description
1 Book plane ticket
2 Rent a tux
3 Reserve a rental car
4 Send John a birthday card</code></pre>
<p>
The 'ls' command provides the most minimal list of tasks. Each
task has been given an id number, and you can see that there are no
projects or priorities assigned. Wait a minute - I own a tux, I
don't need to rent one. Let us delete task 2:
</p>
<pre><code>% task 2 delete
Permanently delete task? (y/n) y</code></pre>
<p>
Task wants you to confirm deletions. To remove the confirmation,
edit your .taskrc file and change the line:
</p>
<pre><code>confirmation=yes</code></pre>
<p>
to have a value of "no".
</p>
<p>
While the use of projects and priorities are not essential to
benefitting from task, they can be very useful when the list of
tasks grows large. Let's assign a project to these tasks:
</p>
<pre><code>% task 1 project:Wedding
% task 3 project:Wedding
% task 4 project:Family
% task ls
ID Project Pri Description
3 Family Send John a birthday card
2 Wedding Reserve a rental car
1 Wedding Book plane ticket</code></pre>
<p>
Notice that the id numbers have changed. When tasks get deleted,
or have their attributes changed (project, for example), the ids are
prone to change. But the id numbers will remain valid until the
next 'ls' command is run. You should only use the ids from the most
recent 'ls' command. The ids change, because task is always trying
to use small numbers so that it is easy for you to enter them
correctly. Now that projects are assigned, we can look at just the
Wedding project tasks:
</p>
<p>
Subprojects are supported. If you have a project "Wedding", you can
specify that a task is a subproject "Transport" of "Wedding" by
assigning the project "Wedding.Transport". Let's do this:
</p>
<pre><code>% task 2 project:Wedding.Transport
% task ls
ID Project Pri Description
3 Family Send John a birthday card
2 Wedding.Transport Reserve a rental car
1 Wedding Book plane ticket</code></pre>
<p>
Task matches the leftmost part of the project when searching, so
projects may be abbreviated:
</p>
<pre><code>% task ls project:Wedding.Tra
ID Project Pri Description
2 Wedding.Transport Reserve a rental car</code></pre>
<p>
This way of matching projects can be used to see all tasks under
the "Wedding" project and all subprojects:
</p>
<pre><code>% task ls project:Wedding
ID Project Pri Description
2 Wedding.Transport Reserve a rental car
1 Wedding Book plane ticket</code></pre>
<p>
Let's reassign 2 back to the "Wedding" project:
</p>
<pre><code>% task 2 project:Wedding</code></pre>
<p>
Now that projects are assigned, we can look at just the
Wedding project tasks:
</p>
<pre><code>% task ls project:Wedding
ID Project Pri Description
1 Wedding Book plane ticket
2 Wedding Reserve a rental car</code></pre>
<p>
Any command arguments after the 'ls' are used for filtering the
output. We could also have requested:
</p>
<pre><code>% task ls ticket plane
ID Project Pri Description
1 Wedding Book plane ticket</code></pre>
<p>
Now let's prioritize. Priorities can be H, M or L (High, Medium,
Low).
</p>
<pre><code>% task ls
ID Project Pri Description
3 Family Send John a birthday card
2 Wedding Reserve a rental car
1 Wedding Book plane ticket
% task 1 priority:H
% task 2 prior:M
% task 3 pr:H
Ambiguous attribute 'pr' - could be either of project, priority
% task 3 pri:H
% task ls
ID Project Pri Description
3 Family H Send John a birthday card
1 Wedding H Book plane ticket
2 Wedding M Reserve a rental car</code></pre>
<p>
Notice that task supports the abbreviation of words such as
priority, project. Priority can be abbreviated to pri, but not pr,
because it is ambiguous. Now that tasks have been prioritized, you
can see that the tasks are being sorted by priority, with the
highest priority tasks at the top.
</p>
<p>
These attributes can all be provided when the task is added, instead
of applying them afterwards, as shown. The following command shows
how to set all the attributes at once:
</p>
<pre><code>% task add project:Wedding priority:H Book plane ticket<code></pre>
<p>
The 'ls' command provides the least information for each task. The
'list' command provides more:
</p>
<pre><code>% task list
ID Project Pri Due Active Age Description
3 Family H 4 mins Send John a birthday card
1 Wedding H 5 mins Book plane ticket
2 Wedding M 5 mins Reserve a rental car</code></pre>
<p>
Notice that a task can have a due date, and can be active. The
task lists are sorted by due date, then priority. Let's add due
dates:
</p>
<pre><code>% task 3 due:6/25/2008
% task 1 due:7/31/2008
% task list
ID Project Pri Due Active Age Description
3 Family H 6/25/2008 6 mins Send John a birthday card
1 Wedding H 7/31/2008 7 mins Book plane ticket
2 Wedding M 7 mins Reserve a rental car</code></pre>
<p>
If today's date is 6/23/2008, then task 3 is due in 2 days. It will
be colored yellow if your terminal supports color. To change this
color, edit your .taskrc file, and change the line to one of these
alternatives:
</p>
<pre><code>color.due=red
color.due=on_blue
color.due=red on_blue
color.due=bold_red on_blue</code></pre>
<p>
Where color is one of the following:
</p>
<pre><code>black
blue
red
green
cyan
magenta
yellow
white</code></pre>
<p>
All colors are specified in this way. Take a look in .taskrc for
all the other color rules that you control.
</p>
<p>
Tagging tasks is a good way to group them, aside from specifying a
project. To add a tag to a task:
</p>
<pre><code>% task &lt;id&gt; +tag<code></pre>
<p>
The plus sign indicates that this is a tag. Any number of tags may
be applied to a task, and then used for searching. Tags are just
single words that are labels.
</p>
<pre><code>% task list
ID Project Pri Due Active Age Description
3 Family H 6/25/2008 8 mins Send John a birthday card
1 Wedding H 7/31/2008 9 mins Book plane ticket
2 Wedding M 9 mins Reserve a rental car
% task 1 +phone
% task 2 +phone
% task 3 +shopping
% task 3 +john
% task list +phone
ID Project Pri Due Active Age Description
1 Wedding H 7/31/2008 9 mins Book plane ticket
2 Wedding M 9 mins Reserve a rental car</code></pre>
<p>
To remove a tag from a task, use the minus sign:
</p>
<pre><code>% task 3 -john</code></pre>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

126
html/task.css Normal file
View File

@@ -0,0 +1,126 @@
body {
text-align: center;
margin: 0; padding: 1em;
}
#container {
width: 740px;
text-align: left;
margin: 0 auto; padding: 0;
}
#header {
height: 60px;
margin: 0 0 15px; padding: 0;
}
#page {}
#content {
width: 500px;
}
#header a:link,
#header a:visited {
color:#000;
text-decoration: none;
}
#header h1 {
font: bold 400% georgia, serif;
letter-spacing: -1px;
margin: 0;
float: left;
}
#header h2 {
font: normal 12px verdana, arial, sans-serif;
margin: 2.5em 0 0 0.8em;
float: left;
}
#content {}
#content h1,
#content h2,
#content h3,
#content h4,
#content h5 {
font-family: "lucidamac bold", "lucida grande", arial, sans-serif;
letter-spacing: -1px;
}
#content h1 {
font-size: 24px;
}
#content h2 {
font-size: 22px;
border-bottom: 1px dotted #000;
}
#content h3 {
font-size: 20px;
border-bottom: 1px dotted #bbb;
}
#content h4 {
font-size: 18px;
border-bottom: 1px dotted #bbb;
}
#content h5 {
font-size: 18px;
background: #ffd;
border-bottom: 1px dotted #bbb;
}
#content p {
line-height: 15px;
}
#content ul,
#content ol {
}
#content code {
font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
}
#content pre {
color: #63FF00;
background: #000;
overflow: auto;
font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
margin: 0.9em 0; padding: 8px;
}
dt {
font: bold 14px "lucida grande", verdana, arial, helvetica, sans-serif;
}
dd {
}
body {
font: normal 12px "lucida grande", verdana, arial, helvetica, sans-serif;
}
.small {
font: normal 10px verdana, arial, sans-serif;
}
.table_h {
background-color: #e0e0e0;
}
.table_d {
background-color: #f7f7f7;
}
input,
textarea { font: normal 12px "bitstream vera sans", verdana, sans-serif; }
abbr { border: none; }
cite { font-style: normal; }
a img { border: none; padding: 0; margin: 0; }

254
html/task.html Normal file
View File

@@ -0,0 +1,254 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Latest Release</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h1 class="title">Task</h1>
<p>
Task is an open source, command-line, TODO list manager.
</p>
<p>
Here you will find information on how to acquire, build, configure,
use and become proficient with the task program.
</p>
<ul>
<li><a href="setup.html">Quick Setup</a>
<li><a href="30second.html">30-second Tutorial</a>
<li><a href="simple.html">Simple Usage</a>
<li><a href="advanced.html">Advanced Usage</a>
<li><a href="shell.html">Interacting with the Shell</a>
<li><a href="config.html">Configuring Task</a>
<li><a href="color.html">Color</a>
<li><a href="usage.html">Task Command Usage</a>
<li><a href="recur.html">Recurring Tasks</a>
<li><a href="date.html">Date Handling</a>
<li><a href="troubleshooting.html">Troubleshooting</a>
<li><a href="versions.html">Old Versions</a>
<li><a href="filter.html">Filters</a>
<li><a href="shadow.html">Shadow Files</a>
<li><a href="custom.html">Custom Reports</a>
</ul>
<p>
More documents are being written, and will be added here.
</p>
<p>
Alternatively, watch the
<a href="http://www.youtube.com/watch?v=D2Kn4DMOVSw">task movie</a>
which illustrates many of task's features.
</p>
<br />
<h2 class="title">Get the Latest Stable Release</h2>
<div class="content">
<table>
<tr>
<td>Source:</td>
<td><a href="http://www.beckingham.net/task-1.5.0.tar.gz">task-1.5.0.tar.gz</a></td>
</tr>
<!--
<tr>
<td>Mac OS X 10.5 (Leopard) Intel-only:</td>
<td><a href="http://www.beckingham.net/task-1.5.0.pkg">task-1.5.0.pkg</a></td>
</tr>
<tr>
<td>
Debian package:
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>):
</td>
<td><a href="http://www.beckingham.net/task_1.5.0-1_i386.deb">task_1.5.0-1_i386.deb</a></td>
</tr>
-->
</table>
<h4>New in version 1.5.0 (3/15/2009)</h4>
<ul>
<li>Removed deprecated TUTORIAL file.
<li>Removed support for the "showage" configuration variable.
<li>"task stop" can remove the start time from a started task.
<li>"task ghistory" now displays a differently aligned graph, allowing
easier comparison by month of tasks added versus completed and deleted.
<li>"task version" command now reports unrecognized configuration variables,
which may be spelling mistakes or deprecated variables.
<li>"configure --enable-debug" now supported to suppress compiler optimization
to allow debugging.
<li>Allow lower case priorities, and automatically upper case them.
<li>Added support for "due" configuration variable which defines the number
of days in the future when a task is considered due.
<li>Added support for custom reports, comprised of a set of column names and
sort order, with optional filtering in the configuration file. This
means user-defined reports can be written, and the reports currently
in the configuration file can be renamed. Several of task's built in
reports have been converted to user-defined reports.
<li>New online documentation for custom reports.
<li>New algorithm for determining when the "nag" message is displayed.
<li>Fixed bug where task hangs with a certain combination of recurring tasks
and shadow files.
<li>Fixed bug with the task sort algorithm, which led to an unstable sequence
when there were only a handful of tasks.
<li>Performance enhanced by eliminating unnecessary sorting.
<li>Task now has a large (and growing) test suite and bug regression tests
to help ensure higher quality releases.
<li>Fixed bug that caused large performance hit during table rendering.
<li>Fixed bug that concatenated a modified description without spaces.
<li>Added new column 'recur' that displays the recurrence period of any
recurring tasks. This column can be added to any custom report.
<li>Added support for "color.recurring" configuration variable which
specifies the color of recurring tasks.
<li>Added support for "locking" configuration variable that controls whether
file locking is used.
<li>Task export feature now includes recurrence information, removes nested
quotes, and limits output to pending tasks.
<li>Task no longer includes deleted tasks in the summary report (thanks to
Benjamin Tegarden).
<li>Fixed bug that prevented the summary report from properly reporting
recently completed tasks.
</ul>
<p>
(Find out <a href="versions.html">what was new in prior versions</a>)
</p>
<!--
<h2>Task 1.5.0 Beta</h2>
<p>
The next version of task is in beta. This means it is approaching the
end of the current development and testing cycle, and feedback from
a wider audience is needed to find the last bugs. If you would like
to help test the next release of task, download the beta source below
and install in the usual manner.
</p>
<p>
Please note that beta software may contain significant bugs. If you
use this beta release, you should first backup your existing task
data files.
</p>
<p>
Refer to the ChangeLog file for details regarding the various fixes
and enhancements.
</p>
<table>
<tr>
<td>Source:</td>
<td><a href="http://www.beckingham.net/task-1.5.0beta.tar.gz">task-1.5.0beta.tar.gz</a></td>
</tr>
</table>
-->
<h2>Troubleshooting</h2>
<p>
Task has been built from source and tested in the following environments:
</p>
<p>
<ul>
<li>OS X 10.4 Tiger
<li>OS X 10.5 Leopard
<li>Fedora Core 8
<li>Fedora Core 9
<li>Fedora Core 10
<li>Ubuntu 7 Feisty Fawn
<li>Ubuntu 8 Hardy Heron
<li>Ubuntu 8.10 Intrepid Ibex
<li>Solaris 10
<li>Cygwin 1.5.25-14
</ul>
</p>
<p>
If you have difficulties building task, have found a bug, have a
suggestion for improvement, or a feature request, please send mail to
<a href="mailto:task@beckingham.net">task@beckingham.net</a>.
</p>
<p>
Take a look at the <a href="troubleshooting.html">troubleshooting guide</a>
for tips and workarounds to problems.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

138
html/troubleshooting.html Normal file
View File

@@ -0,0 +1,138 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Troubleshooting Guide</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h1 class="title">Task Troubleshooting Guide</h1>
<p>
Here you will find tips and suggestions for making task behave
properly, and bug workarounds.
</p>
<br />
<h2 class="title">Segmentation Fault for certain commands</h2>
<div class="content">
<p>
Upgrading task to version 1.1.0, 1.2.0 and 1.3.0 can cause
segmentation faults. This is mostly occurring for Ubuntu users,
although there is no reason for it to be limited to Ubuntu.
</p>
<p>
Task 1.3.1 fixes this bug, but there is a workaround for users
of earlier versions. Add the following line to your ~/.taskrc
file:
</p>
<code><pre>dateformat=m/d/Y</pre></code>
<p class="small">
The "dateformat" setting is supported in task 1.1.0 and later.
</p>
</div>
<br />
<h2 class="title">How do I build task under Cygwin?</h2>
<div class="content">
<p>
Task is built the same way everywhere. But under Cygwin, you'll
need to make sure you have the following packages available
first:
<ul>
<li>gcc
<li>make
<li>libncurses-devel
<li>libncurses8
</ul>
The gcc and make packages allow you to compile the code, and
are therefore required, but the ncurses packages are optional.
Ncurses will allow task to determine the width of the window, and
therefore use the whole width and wrap text accordingly, for a
more aesthetically pleasing display.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

151
html/usage.html Normal file
View File

@@ -0,0 +1,151 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Usage</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h2 class="title"><a name="usage">Command Usage<a></h2>
<div class="content">
<pre><code>Usage: task
task add [tags] [attrs] desc...
task completed [tags] [attrs] desc...
task ID [tags] [attrs] [desc...]
task ID /from/to/
task delete ID
task undelete ID
task info ID
task start ID
task stop ID
task done ID
task undo ID
task projects
task tags
task summary
task history
task ghistory
task next
task calendar
task active
task overdue
task stats
task export
task color
task version
task help
task list [tags] [attrs] desc...
task long [tags] [attrs] desc...
task ls [tags] [attrs] desc...
task newest [tags] [attrs] desc...
task oldest [tags] [attrs] desc...
See http://www.beckingham.net/task.html for the latest releases and a full tutorial.
ID is the numeric identifier displayed by the 'task list' command
Tags are arbitrary words, any quantity:
+tag The + means add the tag
-tag The - means remove the tag
Attributes are:
project: Project name
priority: Priority
due: Due date
recur: Recurrence frequency
until: Recurrence end date
fg: Foreground color
bg: Background color
rc: Alternate .taskrc file
Any command or attribute name may be abbreviated if still unique:
task list project:Home
task li pro:Home
Some task descriptions need to be escaped because of the shell:
task add "quoted ' quote"
task add escaped \' quote
Many characters have special meaning to the shell, including:
$ ! ' " ( ) ; \ ` * ? { } [ ] < > | & % # ~</code></pre>
<div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

300
html/versions.html Normal file
View File

@@ -0,0 +1,300 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Task Prior Versions</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="task.css" type="text/css" />
</head>
<body>
<div id="container">
<table>
<tr>
<td>
<div id="toolbar">
<a href="task.html">Home</a>
<a href="setup.html">Setup</a>
<a href="30second.html">30-second Tutorial</a>
<a href="simple.html">Simple</a>
<a href="advanced.html">Advanced</a>
<a href="shell.html">Shell</a>
<a href="config.html">Configuration</a>
<a href="color.html">Colors</a>
<a href="usage.html">Usage</a>
<a href="recur.html">Recurrence</a>
<a href="date.html">Date Handling</a>
<a href="troubleshooting.html">Troubleshooting</a>
<a href="versions.html">Old Versions</a>
<a href="links.html">Task on the Web</a>
</div>
<div id="content">
<br />
<br />
<br />
<h1 class="title">Task Prior Versions</h1>
<br />
<div class="content">
<p>
<h4>New in version 1.4.3 (11/1/2008)</h4>
<a href="http://www.beckingham.net/task-1.4.3.tar.gz">task-1.4.3.tar.gz</a>
<br />
Mac OS X 10.5 (Leopard) Intel-only:
<a href="http://www.beckingham.net/task-1.4.3.pkg">task-1.4.3.pkg</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.4.3-1_i386.deb">task_1.4.3-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>Fixed misleading task count at bottom of "info" report.
<li>Added support for a shadow file that contains a plain text task report,
with the "shadow.file" and "shadow.command" configuration variables.
The shadow file is automatically updated whenever the task database
changes. Useful for integrating with "Samurize".
<li>Task now displays a message whenever a shadow file is updated, if the
"shadow.notify" configuration variable is set "on".
<li>Fixed bug whereby adding a task with a \n, \r or \f did not fail properly.
<li>Removed "task usage" command.
<li>Added documentation for Shadow files.
<li>Added documentation for task filters.
</ul>
</p>
<p>
<h4>New in version 1.4.2 (9/18/2008)</h4>
<a href="http://www.beckingham.net/task-1.4.2.tar.gz">task-1.4.2.tar.gz</a>
<br />
Mac OS X 10.5 (Leopard) Intel-only:
<a href="http://www.beckingham.net/task-1.4.2.pkg">task-1.4.2.pkg</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.4.2-1_i386.deb">task_1.4.2-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>"task undo" can now retract a "task done" command, provided no
reports have been run.
<li>Task now correctly sorts on entire strings, instead of just the
first character (thanks to Andy Lester).
<li>Task now uses dashes (-----) to underline column headings when
color is disabled (thanks to Vincent Fleuranceau).
<li>Task now allows mixed case attribute names (pri:, PRI:, Pri: ...)
and commands (add, ADD, Add ...) (thanks to Vincent Fleuranceau).
<li>Task now supports a default project and priority for new tasks, via
the new "default.project" and "default.priority" configuration variables
(thanks to Vincent Fleuranceau).
<li>Task supports improved word-wrapping to the terminal width.
<li>Task now supports "default.command" configuration variable (for example
it could contain "list due:tomorrow") which is the command that is run
whenever task is invoked with no arguments.
<li>Task supports modifying the existing description of a task, with the
following syntax: task &lt;id&gt; "new description ...".
<li>Fixed bug so that relative dates in filters (task list due:eom,
task list due:tomorrow, task list due:23rd ...) are now properly
supported.
<li>Fixed bug so that source now properly includes &lt;string.h&gt; in
order to build clean using gcc 4.3 (thanks to H. İbrahim Güngör)
</ul>
<p>
<h4>New in version 1.4.1 (7/18/2008)</h4>
<a href="http://www.beckingham.net/task-1.4.1.tar.gz">task-1.4.1.tar.gz</a>
<br />
Mac OS X 10.5 (Leopard) Intel-only:
<a href="http://www.beckingham.net/task-1.4.1.pkg">task-1.4.1.pkg</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.4.1-1_i386.deb">task_1.4.1-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>Fixed bug: Descriptions could not be altered with "task 123 New description"
<li>Tweak: For "task calendar" month names are now centered over the month
<li>Removed TUTORIAL file contents in favor of online version
<li>New Mac Intel-only Leopard (10.5) binary package
</ul>
<p>
<h4>New in version 1.4.0 (7/10/2008)</h4>
Source: <a href="http://www.beckingham.net/task-1.4.0.tar.gz">task-1.4.0.tar.gz</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.4.0-1_i386.deb">task_1.4.0-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>Added new <a href="recur.html">recurring tasks</a> feature
<li>Added "task undelete" feature to restore a (very) recently deleted
task
<li>Added averages to the "task history" report
<li>Added bar chart history report "task ghistory"
<li>Added support for rc:&lt;file&gt; to allow override of the default
~/.taskrc file
<li>Added support for relative due: dates, such as "tomorrow", "friday",
"23rd", "eom"
<li>Added support for task filtering on all reports
<li>Automatically shuts off color, ncurses when output is not to a tty
<li>Added support for the ~ character in .taskrc data.location, for flexibility
<li>Allows colons on the description, provided what is to the left of the colon
is not a standard attribute name
<li>Fixed bug where Esc[0m sequences were being emitted for no good reason
<li>Fixed bug where table headers are underlined when color is turned off
<li>Fixed bug where adding a blank priority resulted in an assigned garbage value
<li>Fixed bug parsing date "07/08/2008" when using dateformat "m/d/Y"
</ul>
<p>
<h4>New in version 1.3.1</h4>
Source: <a href="http://www.beckingham.net/task-1.3.1.tar.gz">task-1.3.1.tar.gz</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.3.1-1_i386.deb">task_1.3.1-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>New configuration variable "defaultwidth" determines the width
of windows in the absense of ncurses support
<li>Fixed bug where "showage" configuration variable was not being
oberved by the "task long" report
<li>Fixed bug causing segmentation faults (mostly for Ubuntu users)
when various commands are run
<li>Fixed bug so that task now will recreate a missing ~/.taskrc file,
OR a missing ~/.task directory
</ul>
<p>
<h4>New in version 1.3.0</h4>
Source: <a href="http://www.beckingham.net/task-1.3.0.tar.gz">task-1.3.0.tar.gz</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.3.0-0_i386.deb">task_1.3.0-0_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>"task calendar" now displays multiple months per line, adjustable
by the "monthsperline" configuration variable. Feature added by
Damian Glenny
<li>Displays shorter message when a command is entered incorrectly,
and the full usage for "task help"
<li>"task export" can now filter tasks like the reports
<li>"task oldest" shows the oldest tasks
<li>"task newest" shows the newest tasks
<li>Fixed bug where task generates a segmentation fault for several
commands, when no "dateformat" configuration variable was present
<li>Fixed bug whereby if you have more than one task with a due date,
7 days gets added to the entry date of task 2..n
<li>Fixed bug whereby "1 wks" was being improperly pluralized
</ul>
<p>
<h4>New in version 1.2.0</h4>
Source: <a href="http://www.beckingham.net/task-1.2.0.tar.gz">task-1.2.0.tar.gz</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.2.0-1_i386.deb">task_1.2.0-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>Subprojects supported - please see documentation below, or TUTORIAL
file
<li>"dateformat" configuration variable now properly used to parse as
well as render dates
<li>"task list x" now performs a caseless comparison between "x" and
the task description
<li>"showage" configuration variable determines whether the "Age" column
should appear on the "task list" and "task next" reports
<li>Improvements to the TUTORIAL file and this page
</ul>
<p>
<h4>New in version 1.1.0</h4>
Source: <a href="http://www.beckingham.net/task-1.1.0.tar.gz">task-1.1.0.tar.gz</a>
<br />
Debian package: <a href="http://www.beckingham.net/task_1.1.0-1_i386.deb">task_1.1.0-1_i386.deb</a>
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
</p>
<ul>
<li>"blanklines" configuration variable to stop displaying unnecessary
white space and thus work better on small-screen devices
<li>"dateformat" configuration now determines how dates are formatted
<li>Better formatting of "task tags" output
<li>This home page set up, with TUTORIAL
<li>Added tags to the "task long" report
</ul>
<p>
<h4>New in version 1.0.1</h4>
Source: <a href="http://www.beckingham.net/task-1.0.1.tar.gz">task-1.0.1.tar.gz</a>
</p>
<ul>
<li>Fixed bug where the UUID generator not properly terminating strings
<li>Fixed bug where srandom/srand not called prior to custom UUID generation
</ul>
<p>
<h4>Version 1.0.0</h4>
Source: <a href="http://www.beckingham.net/task-1.0.0.tar.gz">task-1.0.0.tar.gz</a>
</p>
<p>
Task 1.0.0 was the first publicly available version of task.
</p>
</div>
<br />
<br />
<div class="content">
<p>
Copyright 2006-2009, P. Beckingham. All rights reserved.
</p>
</div>
</div>
</td>
<td align="right" valign="top" width="200px">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<script type="text/javascript"><!--
google_ad_client = "pub-9709799404235424";
/* Task Main */
google_ad_slot = "8660617875";
google_ad_width = 120;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-4737637-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</body>
</html>

View File

@@ -3,18 +3,18 @@
task add do laundry Let's add some tasks
I need to do laundry
task add project:garage order dumpster Oh yeah, the dumpster
task add project:garage order dumpster Oh yeah, I need to order the dumpster
task add +phone tell mom i loveher Must call Mom (that "phone" there is a tag - they are
useful for searching, categorizing)
task add +phone tell mom i loveher Must call Mom (that "phone" there is a tag - they can
be useful for searching and categorizing)
task add +phone pro:garage schedule
goodwill pickup
task ad +email pro:garage ask Tom if Notice I can abbreviating commands
task ad +email pro:garage ask Tom if Notice I can abbreviate commands
he wants that old bkie
task ls Let's see what we've got
I spelled bike wrong
Oh, I spelled bike wrong
task 5 /bkie/bike/
task ls That's better
@@ -97,8 +97,12 @@ task summary Summary shows progress on all projec
task history History shows general activity - how many added,
completed etc, by month
task ghistory This report shows a histogram of tasks that were
added (in red), completed (in green) and deleted
(in yellow), all by month.
And that's it. There are more commands than this
covered in the TUTORIAL file, but this should give
covered in the online documentation, but this should give
the basic idea.
Thank you for watching.

View File

@@ -1,405 +0,0 @@
Config.o Config.o: Config.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/fstream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h \
/usr/include/c++/4.0.0/bits/fstream.tcc /usr/include/c++/4.0.0/sstream \
/usr/include/c++/4.0.0/bits/sstream.tcc /usr/include/sys/stat.h task.h \
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h /usr/include/sys/types.h \
Config.h Table.h color.h Grid.h color.h TDB.h T.h ../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
/usr/include/c++/4.0.0/fstream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h:
/usr/include/c++/4.0.0/bits/fstream.tcc:
/usr/include/c++/4.0.0/sstream:
/usr/include/c++/4.0.0/bits/sstream.tcc:
/usr/include/sys/stat.h:
task.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/sys/types.h:
Config.h:
Table.h:
color.h:
Grid.h:
color.h:
TDB.h:
T.h:
../auto.h:

View File

@@ -1,392 +0,0 @@
Date.o Date.o: Date.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc task.h \
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h /usr/include/sys/types.h \
Config.h Table.h color.h Grid.h color.h TDB.h T.h ../auto.h Date.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
task.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/sys/types.h:
Config.h:
Table.h:
color.h:
Grid.h:
color.h:
TDB.h:
T.h:
../auto.h:
Date.h:

View File

@@ -1,390 +0,0 @@
T.o T.o: T.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc task.h \
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h /usr/include/sys/types.h \
Config.h Table.h color.h Grid.h color.h TDB.h T.h ../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
task.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/sys/types.h:
Config.h:
Table.h:
color.h:
Grid.h:
color.h:
TDB.h:
T.h:
../auto.h:

View File

@@ -1,406 +0,0 @@
TDB.o TDB.o: TDB.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/fstream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h \
/usr/include/c++/4.0.0/bits/fstream.tcc /usr/include/sys/file.h \
/usr/include/sys/types.h /usr/include/sys/fcntl.h \
/usr/include/sys/queue.h task.h /usr/include/c++/4.0.0/vector \
/usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h Config.h Table.h color.h \
Grid.h color.h TDB.h T.h ../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
/usr/include/c++/4.0.0/fstream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h:
/usr/include/c++/4.0.0/bits/fstream.tcc:
/usr/include/sys/file.h:
/usr/include/sys/types.h:
/usr/include/sys/fcntl.h:
/usr/include/sys/queue.h:
task.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
Config.h:
Table.h:
color.h:
Grid.h:
color.h:
TDB.h:
T.h:
../auto.h:

View File

@@ -1,397 +0,0 @@
Table.o Table.o: Table.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc Table.h \
/usr/include/c++/4.0.0/map /usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h \
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc color.h Grid.h Date.h task.h \
/usr/include/sys/types.h Config.h Table.h color.h TDB.h T.h T.h \
../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
Table.h:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
color.h:
Grid.h:
Date.h:
task.h:
/usr/include/sys/types.h:
Config.h:
Table.h:
color.h:
TDB.h:
T.h:
T.h:
../auto.h:

View File

@@ -1,278 +0,0 @@
color.o color.o: color.cpp /usr/include/c++/4.0.0/string \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/cstring /usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/_types.h /usr/include/sys/_types.h \
/usr/include/sys/cdefs.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \
/usr/include/machine/signal.h /usr/include/i386/signal.h \
/usr/include/i386/_structs.h /usr/include/sys/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/unistd.h \
/usr/include/sys/unistd.h /usr/include/sys/select.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc color.h
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/sys/cdefs.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/sys/appleapiopts.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
color.h:

View File

@@ -1,393 +0,0 @@
parse.o parse.o: parse.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/vector \
/usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h Date.h task.h \
/usr/include/sys/types.h Config.h Table.h color.h Grid.h color.h TDB.h \
T.h ../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
Date.h:
task.h:
/usr/include/sys/types.h:
Config.h:
Table.h:
color.h:
Grid.h:
color.h:
TDB.h:
T.h:
../auto.h:

View File

@@ -1,392 +0,0 @@
rules.o rules.o: rules.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc Config.h \
/usr/include/c++/4.0.0/map /usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h \
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc Table.h color.h Grid.h Date.h \
T.h task.h /usr/include/sys/types.h color.h TDB.h ../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
Config.h:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
Table.h:
color.h:
Grid.h:
Date.h:
T.h:
task.h:
/usr/include/sys/types.h:
color.h:
TDB.h:
../auto.h:

View File

@@ -1,417 +0,0 @@
task.o task.o: task.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/iomanip \
/usr/include/c++/4.0.0/functional /usr/include/c++/4.0.0/fstream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h \
/usr/include/c++/4.0.0/bits/fstream.tcc /usr/include/sys/types.h \
/usr/include/pwd.h Config.h /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h \
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc Date.h Table.h color.h Grid.h \
TDB.h T.h task.h color.h ../auto.h /usr/include/ncurses.h \
/usr/include/ncurses_dll.h /usr/include/unctrl.h /usr/include/curses.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
/usr/include/c++/4.0.0/iomanip:
/usr/include/c++/4.0.0/functional:
/usr/include/c++/4.0.0/fstream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h:
/usr/include/c++/4.0.0/bits/fstream.tcc:
/usr/include/sys/types.h:
/usr/include/pwd.h:
Config.h:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
Date.h:
Table.h:
color.h:
Grid.h:
TDB.h:
T.h:
task.h:
color.h:
../auto.h:
/usr/include/ncurses.h:
/usr/include/ncurses_dll.h:
/usr/include/unctrl.h:
/usr/include/curses.h:

View File

@@ -1,390 +0,0 @@
text.o text.o: text.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/vector \
/usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc task.h \
/usr/include/c++/4.0.0/map /usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h /usr/include/sys/types.h \
Config.h Table.h color.h Grid.h color.h TDB.h T.h ../auto.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
task.h:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
/usr/include/sys/types.h:
Config.h:
Table.h:
color.h:
Grid.h:
color.h:
TDB.h:
T.h:
../auto.h:

View File

@@ -1,395 +0,0 @@
util.o util.o: util.cpp /usr/include/c++/4.0.0/iostream \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h \
/usr/include/c++/4.0.0/ostream /usr/include/c++/4.0.0/ios \
/usr/include/c++/4.0.0/iosfwd \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h \
/usr/include/c++/4.0.0/clocale /usr/include/locale.h \
/usr/include/_locale.h /usr/include/sys/cdefs.h /usr/include/_types.h \
/usr/include/sys/_types.h /usr/include/machine/_types.h \
/usr/include/i386/_types.h /usr/include/c++/4.0.0/cstring \
/usr/include/c++/4.0.0/cstddef \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h \
/usr/include/string.h /usr/include/c++/4.0.0/cstdio \
/usr/include/stdio.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/pthread_impl.h /usr/include/sched.h \
/usr/include/time.h /usr/include/_structs.h /usr/include/sys/_structs.h \
/usr/include/unistd.h /usr/include/sys/unistd.h \
/usr/include/sys/select.h /usr/include/sys/appleapiopts.h \
/usr/include/sys/_select.h /usr/include/c++/4.0.0/cctype \
/usr/include/ctype.h /usr/include/runetype.h \
/usr/include/c++/4.0.0/bits/stringfwd.h \
/usr/include/c++/4.0.0/bits/postypes.h /usr/include/c++/4.0.0/cwchar \
/usr/include/c++/4.0.0/ctime /usr/include/wchar.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h \
/usr/include/_wctype.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
/usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
/usr/include/c++/4.0.0/exception \
/usr/include/c++/4.0.0/bits/char_traits.h \
/usr/include/c++/4.0.0/bits/stl_algobase.h \
/usr/include/c++/4.0.0/climits \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h \
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h \
/usr/include/limits.h /usr/include/machine/limits.h \
/usr/include/i386/limits.h /usr/include/i386/_limits.h \
/usr/include/sys/syslimits.h /usr/include/c++/4.0.0/cstdlib \
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
/usr/include/sys/signal.h /usr/include/machine/signal.h \
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
/usr/include/sys/resource.h /usr/include/machine/endian.h \
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
/usr/include/libkern/_OSByteOrder.h \
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
/usr/include/machine/types.h /usr/include/i386/types.h \
/usr/include/c++/4.0.0/bits/stl_pair.h \
/usr/include/c++/4.0.0/bits/cpp_type_traits.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h \
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h \
/usr/include/c++/4.0.0/bits/concept_check.h \
/usr/include/c++/4.0.0/bits/stl_iterator.h \
/usr/include/c++/4.0.0/debug/debug.h /usr/include/c++/4.0.0/cassert \
/usr/include/assert.h /usr/include/c++/4.0.0/bits/localefwd.h \
/usr/include/c++/4.0.0/bits/ios_base.h \
/usr/include/c++/4.0.0/bits/atomicity.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h \
/usr/include/c++/4.0.0/bits/locale_classes.h \
/usr/include/c++/4.0.0/string /usr/include/c++/4.0.0/memory \
/usr/include/c++/4.0.0/bits/allocator.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h \
/usr/include/c++/4.0.0/ext/new_allocator.h /usr/include/c++/4.0.0/new \
/usr/include/c++/4.0.0/bits/stl_construct.h \
/usr/include/c++/4.0.0/bits/stl_uninitialized.h \
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h \
/usr/include/c++/4.0.0/limits \
/usr/include/c++/4.0.0/bits/stl_function.h \
/usr/include/c++/4.0.0/bits/basic_string.h \
/usr/include/c++/4.0.0/algorithm /usr/include/c++/4.0.0/bits/stl_algo.h \
/usr/include/c++/4.0.0/bits/stl_heap.h \
/usr/include/c++/4.0.0/bits/stl_tempbuf.h \
/usr/include/c++/4.0.0/bits/basic_string.tcc \
/usr/include/c++/4.0.0/streambuf \
/usr/include/c++/4.0.0/bits/streambuf.tcc \
/usr/include/c++/4.0.0/bits/basic_ios.h \
/usr/include/c++/4.0.0/bits/streambuf_iterator.h \
/usr/include/c++/4.0.0/bits/locale_facets.h \
/usr/include/c++/4.0.0/cwctype /usr/include/wctype.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h \
/usr/include/c++/4.0.0/bits/codecvt.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h \
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h \
/usr/include/c++/4.0.0/bits/basic_ios.tcc \
/usr/include/c++/4.0.0/bits/ostream.tcc /usr/include/c++/4.0.0/locale \
/usr/include/c++/4.0.0/bits/locale_facets.tcc \
/usr/include/c++/4.0.0/typeinfo /usr/include/c++/4.0.0/istream \
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/vector \
/usr/include/c++/4.0.0/bits/stl_vector.h \
/usr/include/c++/4.0.0/bits/stl_bvector.h \
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/sys/types.h \
/usr/include/sys/time.h Table.h /usr/include/c++/4.0.0/map \
/usr/include/c++/4.0.0/bits/stl_tree.h \
/usr/include/c++/4.0.0/bits/stl_map.h \
/usr/include/c++/4.0.0/bits/stl_multimap.h color.h Grid.h task.h \
Config.h color.h TDB.h T.h ../auto.h /usr/include/uuid/uuid.h
/usr/include/c++/4.0.0/iostream:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++config.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/os_defines.h:
/usr/include/c++/4.0.0/ostream:
/usr/include/c++/4.0.0/ios:
/usr/include/c++/4.0.0/iosfwd:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++locale.h:
/usr/include/c++/4.0.0/clocale:
/usr/include/locale.h:
/usr/include/_locale.h:
/usr/include/sys/cdefs.h:
/usr/include/_types.h:
/usr/include/sys/_types.h:
/usr/include/machine/_types.h:
/usr/include/i386/_types.h:
/usr/include/c++/4.0.0/cstring:
/usr/include/c++/4.0.0/cstddef:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stddef.h:
/usr/include/string.h:
/usr/include/c++/4.0.0/cstdio:
/usr/include/stdio.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++io.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/gthr-default.h:
/usr/include/pthread.h:
/usr/include/pthread_impl.h:
/usr/include/sched.h:
/usr/include/time.h:
/usr/include/_structs.h:
/usr/include/sys/_structs.h:
/usr/include/unistd.h:
/usr/include/sys/unistd.h:
/usr/include/sys/select.h:
/usr/include/sys/appleapiopts.h:
/usr/include/sys/_select.h:
/usr/include/c++/4.0.0/cctype:
/usr/include/ctype.h:
/usr/include/runetype.h:
/usr/include/c++/4.0.0/bits/stringfwd.h:
/usr/include/c++/4.0.0/bits/postypes.h:
/usr/include/c++/4.0.0/cwchar:
/usr/include/c++/4.0.0/ctime:
/usr/include/wchar.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h:
/usr/include/_wctype.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h:
/usr/include/c++/4.0.0/bits/functexcept.h:
/usr/include/c++/4.0.0/exception_defines.h:
/usr/include/c++/4.0.0/exception:
/usr/include/c++/4.0.0/bits/char_traits.h:
/usr/include/c++/4.0.0/bits/stl_algobase.h:
/usr/include/c++/4.0.0/climits:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/limits.h:
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/syslimits.h:
/usr/include/limits.h:
/usr/include/machine/limits.h:
/usr/include/i386/limits.h:
/usr/include/i386/_limits.h:
/usr/include/sys/syslimits.h:
/usr/include/c++/4.0.0/cstdlib:
/usr/include/stdlib.h:
/usr/include/available.h:
/usr/include/sys/wait.h:
/usr/include/sys/signal.h:
/usr/include/machine/signal.h:
/usr/include/i386/signal.h:
/usr/include/i386/_structs.h:
/usr/include/machine/_structs.h:
/usr/include/mach/i386/_structs.h:
/usr/include/sys/resource.h:
/usr/include/machine/endian.h:
/usr/include/i386/endian.h:
/usr/include/sys/_endian.h:
/usr/include/libkern/_OSByteOrder.h:
/usr/include/libkern/i386/_OSByteOrder.h:
/usr/include/alloca.h:
/usr/include/machine/types.h:
/usr/include/i386/types.h:
/usr/include/c++/4.0.0/bits/stl_pair.h:
/usr/include/c++/4.0.0/bits/cpp_type_traits.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h:
/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h:
/usr/include/c++/4.0.0/bits/concept_check.h:
/usr/include/c++/4.0.0/bits/stl_iterator.h:
/usr/include/c++/4.0.0/debug/debug.h:
/usr/include/c++/4.0.0/cassert:
/usr/include/assert.h:
/usr/include/c++/4.0.0/bits/localefwd.h:
/usr/include/c++/4.0.0/bits/ios_base.h:
/usr/include/c++/4.0.0/bits/atomicity.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/atomic_word.h:
/usr/include/c++/4.0.0/bits/locale_classes.h:
/usr/include/c++/4.0.0/string:
/usr/include/c++/4.0.0/memory:
/usr/include/c++/4.0.0/bits/allocator.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/c++allocator.h:
/usr/include/c++/4.0.0/ext/new_allocator.h:
/usr/include/c++/4.0.0/new:
/usr/include/c++/4.0.0/bits/stl_construct.h:
/usr/include/c++/4.0.0/bits/stl_uninitialized.h:
/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h:
/usr/include/c++/4.0.0/limits:
/usr/include/c++/4.0.0/bits/stl_function.h:
/usr/include/c++/4.0.0/bits/basic_string.h:
/usr/include/c++/4.0.0/algorithm:
/usr/include/c++/4.0.0/bits/stl_algo.h:
/usr/include/c++/4.0.0/bits/stl_heap.h:
/usr/include/c++/4.0.0/bits/stl_tempbuf.h:
/usr/include/c++/4.0.0/bits/basic_string.tcc:
/usr/include/c++/4.0.0/streambuf:
/usr/include/c++/4.0.0/bits/streambuf.tcc:
/usr/include/c++/4.0.0/bits/basic_ios.h:
/usr/include/c++/4.0.0/bits/streambuf_iterator.h:
/usr/include/c++/4.0.0/bits/locale_facets.h:
/usr/include/c++/4.0.0/cwctype:
/usr/include/wctype.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_base.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/ctype_inline.h:
/usr/include/c++/4.0.0/bits/codecvt.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/time_members.h:
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/messages_members.h:
/usr/include/c++/4.0.0/bits/basic_ios.tcc:
/usr/include/c++/4.0.0/bits/ostream.tcc:
/usr/include/c++/4.0.0/locale:
/usr/include/c++/4.0.0/bits/locale_facets.tcc:
/usr/include/c++/4.0.0/typeinfo:
/usr/include/c++/4.0.0/istream:
/usr/include/c++/4.0.0/bits/istream.tcc:
/usr/include/c++/4.0.0/vector:
/usr/include/c++/4.0.0/bits/stl_vector.h:
/usr/include/c++/4.0.0/bits/stl_bvector.h:
/usr/include/c++/4.0.0/bits/vector.tcc:
/usr/include/sys/types.h:
/usr/include/sys/time.h:
Table.h:
/usr/include/c++/4.0.0/map:
/usr/include/c++/4.0.0/bits/stl_tree.h:
/usr/include/c++/4.0.0/bits/stl_map.h:
/usr/include/c++/4.0.0/bits/stl_multimap.h:
color.h:
Grid.h:
task.h:
Config.h:
color.h:
TDB.h:
T.h:
../auto.h:
/usr/include/uuid/uuid.h:

1
src/.gitignore vendored
View File

@@ -1,2 +1 @@
Makefile
*.o

View File

@@ -1,7 +1,7 @@
///////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -27,14 +27,44 @@
#include <iostream>
#include <fstream>
#include <sstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <pwd.h>
#include "task.h"
#include "Config.h"
////////////////////////////////////////////////////////////////////////////////
// These are default (but overridable) reports. These entries are necessary
// because these three reports were converted from hard-coded reports to custom
// reports, and therefore need these config file entries. However, users are
// already used to seeing these five reports, but do not have these entries.
// The choice was a) make users edit their .taskrc files, b) write a .taskrc
// upgrade program to make the change, or c) this.
Config::Config ()
{
(*this)["report.long.description"] = "Lists all task, all data, matching the specified criteria";
(*this)["report.long.columns"] = "id,project,priority,entry,start,due,recur,age,tags,description";
(*this)["report.long.sort"] = "due+,priority-,project+";
(*this)["report.list.description"] = "Lists all tasks matching the specified criteria";
(*this)["report.list.columns"] = "id,project,priority,due,active,age,description";
(*this)["report.list.sort"] = "due+,priority-,project+";
(*this)["report.ls.description"] = "Minimal listing of all tasks matching the specified criteria";
(*this)["report.ls.columns"] = "id,project,priority,description";
(*this)["report.ls.sort"] = "priority-,project+";
(*this)["report.newest.description"] = "Shows the newest tasks";
(*this)["report.newest.columns"] = "id,project,priority,due,active,age,description";
(*this)["report.newest.sort"] = "id-";
(*this)["report.newest.limit"] = "10";
(*this)["report.oldest.description"] = "Shows the oldest tasks";
(*this)["report.oldest.columns"] = "id,project,priority,due,active,age,description";
(*this)["report.oldest.sort"] = "id+";
(*this)["report.oldest.limit"] = "10";
}
////////////////////////////////////////////////////////////////////////////////
@@ -44,9 +74,9 @@ Config::Config (const std::string& file)
}
////////////////////////////////////////////////////////////////////////////////
// Read the Configuration filee and populate the *this map. The file format
// is simply lines with name=value pairs. Whitespace between name, = and value
// is not tolerated, but blank lines and comments starting with # are allowed.
// Read the Configuration file and populate the *this map. The file format is
// simply lines with name=value pairs. Whitespace between name, = and value is
// not tolerated, but blank lines and comments starting with # are allowed.
bool Config::load (const std::string& file)
{
std::ifstream in;
@@ -84,74 +114,105 @@ bool Config::load (const std::string& file)
}
////////////////////////////////////////////////////////////////////////////////
void Config::createDefault (const std::string& file)
void Config::createDefault (const std::string& home)
{
if (confirm (
"A configuration file could not be found in "
+ file
+ "\n\n"
+ "Would you like a sample .taskrc created, so task can proceed?"))
{
// Determine a path to the task directory.
std::string taskDir = "";
for (int i = file.length () - 1; i >= 0; --i)
{
if (file[i] == '/')
{
taskDir = file.substr (0, i) + "/.task";
if (-1 == access (taskDir.c_str (), F_OK))
mkdir (taskDir.c_str (), S_IRWXU);
break;
}
}
// Strip trailing slash off home directory, if necessary.
std::string terminatedHome = home;
if (home[home.length () - 1] == '/')
terminatedHome = home.substr (0, home.length () - 1);
if (taskDir != "")
// Determine default names of init file and task directory.
std::string rcFile = terminatedHome + "/.taskrc";
std::string dataDir = terminatedHome + "/.task";;
// If rcFile is not found, offer to create one.
if (-1 == access (rcFile.c_str (), F_OK))
{
if (confirm (
"A configuration file could not be found in "
+ rcFile
+ "\n\n"
+ "Would you like a sample .taskrc created, so task can proceed?"))
{
// Create a sample .taskrc file.
FILE* out;
if ((out = fopen (file.c_str (), "w")))
if ((out = fopen (rcFile.c_str (), "w")))
{
fprintf (out, "data.location=%s\n", taskDir.c_str ());
fprintf (out, "command.logging=off\n");
fprintf (out, "data.location=%s\n", dataDir.c_str ());
fprintf (out, "confirmation=yes\n");
fprintf (out, "#nag=Note: try to stick to high priority tasks. See \"task next\".\n");
fprintf (out, "next=2\n");
fprintf (out, "dateformat=m/d/Y\n");
fprintf (out, "#monthsperline=2\n");
fprintf (out, "curses=on\n");
fprintf (out, "color=on\n");
fprintf (out, "due=7\n");
fprintf (out, "nag=You have higher priority tasks.\n");
fprintf (out, "locking=on\n");
fprintf (out, "color.overdue=bold_red\n");
fprintf (out, "#color.due=on_bright_yellow\n");
fprintf (out, "#color.pri.H=on_red\n");
fprintf (out, "color.due=bold_yellow\n");
fprintf (out, "color.pri.H=bold\n");
fprintf (out, "#color.pri.M=on_yellow\n");
fprintf (out, "#color.pri.L=on_green\n");
fprintf (out, "#color.pri.none=white on_blue\n");
fprintf (out, "color.active=bold_cyan\n");
fprintf (out, "color.tagged=yellow\n");
fprintf (out, "#color.tag.bug=yellow\n");
fprintf (out, "#color.project.home=on_green\n");
fprintf (out, "#color.project.garden=on_green\n");
fprintf (out, "#color.keyword.car=on_blue\n");
fprintf (out, "#color.recurring=on_red\n");
fprintf (out, "#shadow.file=%s/shadow.txt\n", dataDir.c_str ());
fprintf (out, "#shadow.command=list\n");
fprintf (out, "#shadow.notify=on\n");
fprintf (out, "#default.project=foo\n");
fprintf (out, "#default.priority=M\n");
fprintf (out, "default.command=list\n");
// Custom reports.
fprintf (out, "# Fields: id,uuid,project,priority,entry,start,due,recur,age,active,tags,description\n");
fprintf (out, "# Description: This report is ...\n");
fprintf (out, "# Sort: due+,priority-,project+\n");
fprintf (out, "# Filter: pro:x pri:H +bug\n");
fprintf (out, "# Limit: 10\n");
fprintf (out, "report.long.description=Lists all task, all data, matching the specified criteria\n");
fprintf (out, "report.long.columns=id,project,priority,entry,start,due,recur,age,tags,description\n");
fprintf (out, "report.long.sort=due+,priority-,project+\n");
fprintf (out, "report.list.description=Lists all tasks matching the specified criteria\n");
fprintf (out, "report.list.columns=id,project,priority,due,active,age,description\n");
fprintf (out, "report.list.sort=due+,priority-,project+\n");
fprintf (out, "report.ls.description=Minimal listing of all tasks matching the specified criteria\n");
fprintf (out, "report.ls.columns=id,project,priority,description\n");
fprintf (out, "report.ls.sort=priority-,project+\n");
fprintf (out, "report.newest.description=Shows the newest tasks\n");
fprintf (out, "report.newest.columns=id,project,priority,due,active,age,description\n");
fprintf (out, "report.newest.sort=id-\n");
fprintf (out, "report.newest.limit=10\n");
fprintf (out, "report.oldest.description=Shows the oldest tasks\n");
fprintf (out, "report.oldest.columns=id,project,priority,due,active,age,description\n");
fprintf (out, "report.oldest.sort=id+\n");
fprintf (out, "report.oldest.limit=10\n");
fclose (out);
// Now set the live values.
set ("data.location", taskDir);
set ("command.logging", "off");
set ("confirmation", "yes");
set ("next", 2);
set ("curses", "on");
set ("color", "on");
set ("color.overdue", "red");
set ("color.active", "cyan");
set ("color.tagged", "yellow");
std::cout << "Done." << std::endl;
}
}
}
this->load (rcFile);
if (-1 == access (dataDir.c_str (), F_OK))
mkdir (dataDir.c_str (), S_IRWXU);
}
////////////////////////////////////////////////////////////////////////////////
// Return the configuration value given the specified key.
const std::string& Config::get (const char* key)
const std::string Config::get (const char* key)
{
return this->get (std::string (key));
}
@@ -159,7 +220,7 @@ const std::string& Config::get (const char* key)
////////////////////////////////////////////////////////////////////////////////
// Return the configuration value given the specified key. If a default_value
// is present, it will be the returned value in the event of a missing key.
const std::string& Config::get (
const std::string Config::get (
const char* key,
const char* default_value)
{
@@ -168,7 +229,7 @@ const std::string& Config::get (
////////////////////////////////////////////////////////////////////////////////
// Return the configuration value given the specified key.
const std::string& Config::get (const std::string& key)
const std::string Config::get (const std::string& key)
{
return (*this)[key];
}
@@ -176,7 +237,7 @@ const std::string& Config::get (const std::string& key)
////////////////////////////////////////////////////////////////////////////////
// Return the configuration value given the specified key. If a default_value
// is present, it will be the returned value in the event of a missing key.
const std::string& Config::get (
const std::string Config::get (
const std::string& key,
const std::string& default_value)
{
@@ -193,11 +254,13 @@ bool Config::get (const std::string& key, bool default_value)
{
std::string value = lowerCase ((*this)[key]);
if (value == "t" ||
value == "true" ||
value == "1" ||
value == "yes" ||
value == "on")
if (value == "t" ||
value == "true" ||
value == "1" ||
value == "yes" ||
value == "on" ||
value == "enable" ||
value == "enabled")
return true;
return false;
@@ -246,29 +309,6 @@ void Config::set (const std::string& key, const std::string& value)
(*this)[key] = value;
}
////////////////////////////////////////////////////////////////////////////////
// The vector form of Config::get assumes the single value is comma-separated,
// and splits accordingly.
void Config::get (
const std::string& key,
std::vector <std::string>& values)
{
values.clear ();
split (values, (*this)[key], ',');
}
////////////////////////////////////////////////////////////////////////////////
// The vector form of Config::set joins the values together with commas, and
// stores the single value.
void Config::set (
const std::string& key,
const std::vector <std::string>& values)
{
std::string conjoined;
join (conjoined, ",", values);
(*this)[key] = conjoined;
}
////////////////////////////////////////////////////////////////////////////////
// Provide a vector of all configuration keys.
void Config::all (std::vector<std::string>& items)

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -40,18 +40,16 @@ public:
bool load (const std::string&);
void createDefault (const std::string&);
const std::string& get (const char*);
const std::string& get (const char*, const char*);
const std::string& get (const std::string&);
const std::string& get (const std::string&, const std::string&);
const std::string get (const char*);
const std::string get (const char*, const char*);
const std::string get (const std::string&);
const std::string get (const std::string&, const std::string&);
bool get (const std::string&, bool);
int get (const std::string&, const int);
double get (const std::string&, const double);
void get (const std::string&, std::vector <std::string>&);
void set (const std::string&, const int);
void set (const std::string&, const double);
void set (const std::string&, const std::string&);
void set (const std::string&, const std::vector <std::string>&);
void all (std::vector <std::string>&);
};

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -57,29 +57,138 @@ Date::Date (const int m, const int d, const int y)
}
////////////////////////////////////////////////////////////////////////////////
Date::Date (const std::string& mdy)
Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
{
size_t firstSlash = mdy.find ("/");
size_t secondSlash = mdy.find ("/", firstSlash + 1);
if (firstSlash != std::string::npos &&
secondSlash != std::string::npos)
int month = 0;
int day = 0;
int year = 0;
// Before parsing according to "format", perhaps this is a relative date?
if (isRelativeDate (mdy))
return;
unsigned int i = 0; // Index into mdy.
for (unsigned int f = 0; f < format.length (); ++f)
{
int m = ::atoi (mdy.substr (0, firstSlash ).c_str ());
int d = ::atoi (mdy.substr (firstSlash + 1, secondSlash - firstSlash).c_str ());
int y = ::atoi (mdy.substr (secondSlash + 1, std::string::npos ).c_str ());
if (!valid (m, d, y))
throw std::string ("\"") + mdy + "\" is not a valid date.";
switch (format[f])
{
// Single or double digit.
case 'm':
if (i >= mdy.length () ||
! ::isdigit (mdy[i]))
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
// Duplicate Date::Date (const int, const int, const int);
struct tm t = {0};
t.tm_mday = d;
t.tm_mon = m - 1;
t.tm_year = y - 1900;
if (i + 1 < mdy.length () &&
(mdy[i + 0] == '0' || mdy[i + 0] == '1') &&
::isdigit (mdy[i + 1]))
{
month = ::atoi (mdy.substr (i, 2).c_str ());
i += 2;
}
else
{
month = ::atoi (mdy.substr (i, 1).c_str ());
++i;
}
break;
mT = mktime (&t);
case 'd':
if (i >= mdy.length () ||
! ::isdigit (mdy[i]))
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
if (i + 1 < mdy.length () &&
(mdy[i + 0] == '0' || mdy[i + 0] == '1' || mdy[i + 0] == '2' || mdy[i + 0] == '3') &&
::isdigit (mdy[i + 1]))
{
day = ::atoi (mdy.substr (i, 2).c_str ());
i += 2;
}
else
{
day = ::atoi (mdy.substr (i, 1).c_str ());
++i;
}
break;
// Double digit.
case 'y':
if (i + 1 >= mdy.length () ||
! ::isdigit (mdy[i + 0]) ||
! ::isdigit (mdy[i + 1]))
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
year = ::atoi (mdy.substr (i, 2).c_str ()) + 2000;
i += 2;
break;
case 'M':
if (i + 1 >= mdy.length () ||
! ::isdigit (mdy[i + 0]) ||
! ::isdigit (mdy[i + 1]))
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
month = ::atoi (mdy.substr (i, 2).c_str ());
i += 2;
break;
case 'D':
if (i + 1 >= mdy.length () ||
! ::isdigit (mdy[i + 0]) ||
! ::isdigit (mdy[i + 1]))
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
day = ::atoi (mdy.substr (i, 2).c_str ());
i += 2;
break;
// Quadruple digit.
case 'Y':
if (i + 3 >= mdy.length () ||
! ::isdigit (mdy[i + 0]) ||
! ::isdigit (mdy[i + 1]) ||
! ::isdigit (mdy[i + 2]) ||
! ::isdigit (mdy[i + 3]))
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
year = ::atoi (mdy.substr (i, 4).c_str ());
i += 4;
break;
default:
if (i >= mdy.length () ||
mdy[i] != format[f])
{
throw std::string ("\"") + mdy + "\" is not a valid date.";
}
++i;
break;
}
}
else
if (!valid (month, day, year))
throw std::string ("\"") + mdy + "\" is not a valid date.";
// Duplicate Date::Date (const int, const int, const int);
struct tm t = {0};
t.tm_mday = day;
t.tm_mon = month - 1;
t.tm_year = year - 1900;
mT = mktime (&t);
}
////////////////////////////////////////////////////////////////////////////////
@@ -116,20 +225,32 @@ void Date::toMDY (int& m, int& d, int& y)
}
////////////////////////////////////////////////////////////////////////////////
void Date::toString (std::string& output)
const std::string Date::toString (const std::string& format /*= "m/d/Y" */) const
{
output = toString ();
}
// Making this local copy seems to fix a bug. Remove the local copy and you'll
// see segmentation faults and all kinds of gibberish.
std::string localFormat = format;
////////////////////////////////////////////////////////////////////////////////
std::string Date::toString (void)
{
int m, d, y;
toMDY (m, d, y);
char buffer[12];
std::string formatted;
for (unsigned int i = 0; i < localFormat.length (); ++i)
{
char c = localFormat[i];
switch (c)
{
case 'm': sprintf (buffer, "%d", this->month ()); break;
case 'M': sprintf (buffer, "%02d", this->month ()); break;
case 'd': sprintf (buffer, "%d", this->day ()); break;
case 'D': sprintf (buffer, "%02d", this->day ()); break;
case 'y': sprintf (buffer, "%02d", this->year () % 100); break;
case 'Y': sprintf (buffer, "%d", this->year ()); break;
default: sprintf (buffer, "%c", c); break;
}
char formatted [11];
sprintf (formatted, "%d/%d/%d", m, d, y);
return std::string (formatted);
formatted += buffer;
}
return formatted;
}
////////////////////////////////////////////////////////////////////////////////
@@ -196,7 +317,7 @@ std::string Date::monthName (int month)
assert (month > 0);
assert (month <= 12);
return months[month -1];
return months[month - 1];
}
////////////////////////////////////////////////////////////////////////////////
@@ -240,6 +361,22 @@ int Date::dayOfWeek () const
return t->tm_wday;
}
////////////////////////////////////////////////////////////////////////////////
int Date::dayOfWeek (const std::string& input)
{
std::string in = lowerCase (input);
if (in == "sunday") return 0;
if (in == "monday") return 1;
if (in == "tuesday") return 2;
if (in == "wednesday") return 3;
if (in == "thursday") return 4;
if (in == "friday") return 5;
if (in == "saturday") return 6;
return -1;
}
////////////////////////////////////////////////////////////////////////////////
int Date::month () const
{
@@ -297,6 +434,36 @@ bool Date::operator>= (const Date& rhs)
return mT >= rhs.mT;
}
////////////////////////////////////////////////////////////////////////////////
bool Date::sameDay (const Date& rhs)
{
if (this->year () == rhs.year () &&
this->month () == rhs.month () &&
this->day () == rhs.day ())
return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
bool Date::sameMonth (const Date& rhs)
{
if (this->year () == rhs.year () &&
this->month () == rhs.month ())
return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
bool Date::sameYear (const Date& rhs)
{
if (this->year () == rhs.year ())
return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
Date Date::operator+ (const int delta)
{
@@ -324,3 +491,164 @@ time_t Date::operator- (const Date& rhs)
}
////////////////////////////////////////////////////////////////////////////////
// If the input string looks like a relative date, determine that date, set mT
// and return true.
//
// What is a relative date? All of the following should be recognizable, and
// converted to an absolute date:
// wednesday
// fri
// 23rd
// today
// tomorrow
// yesterday
// eow (end of week)
// eom (end of month)
// eoy (end of year)
bool Date::isRelativeDate (const std::string& input)
{
std::string in (lowerCase (input));
Date today;
std::vector <std::string> supported;
supported.push_back ("monday");
supported.push_back ("tuesday");
supported.push_back ("wednesday");
supported.push_back ("thursday");
supported.push_back ("friday");
supported.push_back ("saturday");
supported.push_back ("sunday");
supported.push_back ("today");
supported.push_back ("tomorrow");
supported.push_back ("yesterday");
supported.push_back ("eow");
supported.push_back ("eom");
supported.push_back ("eoy");
std::vector <std::string> matches;
if (autoComplete (in, supported, matches) == 1)
{
std::string found = matches[0];
// If day name.
int dow;
if ((dow = Date::dayOfWeek (found)) != -1 ||
found == "eow")
{
if (found == "eow")
dow = 5;
if (today.dayOfWeek () >= dow)
today += (dow - today.dayOfWeek () + 7) * 86400;
else
today += (dow - today.dayOfWeek ()) * 86400;
int m, d, y;
today.toMDY (m, d, y);
Date then (m, d, y);
mT = then.mT;
return true;
}
else if (found == "today")
{
Date then (today.month (),
today.day (),
today.year ());
mT = then.mT;
return true;
}
else if (found == "tomorrow")
{
Date then (today.month (),
today.day (),
today.year ());
mT = then.mT + 86400;
return true;
}
else if (found == "yesterday")
{
Date then (today.month (),
today.day (),
today.year ());
mT = then.mT - 86400;
return true;
}
else if (found == "eom")
{
Date then (today.month (),
daysInMonth (today.month (), today.year ()),
today.year ());
mT = then.mT;
return true;
}
else if (found == "eoy")
{
Date then (12, 31, today.year ());
mT = then.mT;
return true;
}
}
// Support "21st" to indicate the next date that is the 21st day.
else if (input.length () <= 4 &&
isdigit (input[0]))
{
int number;
std::string ordinal;
if (isdigit (input[1]))
{
number = ::atoi (input.substr (0, 2).c_str ());
ordinal = lowerCase (input.substr (2, std::string::npos));
}
else
{
number = ::atoi (input.substr (0, 2).c_str ());
ordinal = lowerCase (input.substr (1, std::string::npos));
}
// Sanity check.
if (number <= 31)
{
if (ordinal == "st" ||
ordinal == "nd" ||
ordinal == "rd" ||
ordinal == "th")
{
int m = today.month ();
int d = today.day ();
int y = today.year ();
// If it is this month.
if (d < number &&
number <= Date::daysInMonth (m, y))
{
Date then (m, number, y);
mT = then.mT;
return true;
}
do
{
m++;
if (m > 12)
{
m = 1;
y++;
}
}
while (number > Date::daysInMonth (m, y));
Date then (m, number, y);
mT = then.mT;
return true;
}
}
}
return false;
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -37,15 +37,14 @@ public:
Date ();
Date (time_t);
Date (const int, const int, const int);
Date (const std::string&);
Date (const std::string&, const std::string& format = "m/d/Y");
Date (const Date&);
virtual ~Date ();
void toEpoch (time_t&);
time_t toEpoch ();
void toMDY (int&, int&, int&);
void toString (std::string&);
std::string toString (void);
const std::string toString (const std::string& format = "m/d/Y") const;
static bool valid (const int, const int, const int);
static bool leapYear (int);
@@ -53,11 +52,12 @@ public:
static std::string monthName (int);
static void dayName (int, std::string&);
static std::string dayName (int);
int dayOfWeek () const;
static int dayOfWeek (const std::string&);
int month () const;
int day () const;
int year () const;
int dayOfWeek () const;
bool operator== (const Date&);
bool operator!= (const Date&);
@@ -65,6 +65,9 @@ public:
bool operator> (const Date&);
bool operator<= (const Date&);
bool operator>= (const Date&);
bool sameDay (const Date&);
bool sameMonth (const Date&);
bool sameYear (const Date&);
Date operator+ (const int);
Date& operator+= (const int);
@@ -72,6 +75,9 @@ public:
time_t operator- (const Date&);
private:
bool isRelativeDate (const std::string&);
protected:
time_t mT;
};

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -60,6 +60,7 @@
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <stdlib.h>
#include <Grid.h>
////////////////////////////////////////////////////////////////////////////////
@@ -325,7 +326,7 @@ Grid::Cell::operator int () const
case CELL_INT: return mInt;
case CELL_FLOAT: return (int) mFloat;
case CELL_DOUBLE: return (int) mDouble;
case CELL_STRING: return mString.length ();
case CELL_STRING: return ::atoi (mString.c_str ());
}
return 0;
@@ -340,7 +341,7 @@ Grid::Cell::operator float () const
case CELL_INT: return (float) mInt;
case CELL_FLOAT: return mFloat;
case CELL_DOUBLE: return (float) mDouble;
case CELL_STRING: return (float) mString.length ();
case CELL_STRING: return (float) ::atof (mString.c_str ());
}
return 0.0;
@@ -355,7 +356,7 @@ Grid::Cell::operator double () const
case CELL_INT: return (double) mInt;
case CELL_FLOAT: return (double) mFloat;
case CELL_DOUBLE: return mDouble;
case CELL_STRING: return (double) mString.length ();
case CELL_STRING: return (double) ::atof (mString.c_str ());
}
return 0.0;

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,3 +1,2 @@
bin_PROGRAMS = task
task_SOURCES = Config.cpp Date.cpp T.cpp TDB.cpp Table.cpp Grid.cpp color.cpp parse.cpp task.cpp util.cpp text.cpp rules.cpp Config.h Date.h T.h TDB.h Table.h Grid.h color.h task.h
AM_CPPFLAGS = -Wall -pedantic -ggdb3 -fno-rtti
task_SOURCES = Config.cpp Date.cpp T.cpp TDB.cpp Table.cpp Grid.cpp Timer.cpp color.cpp parse.cpp task.cpp command.cpp report.cpp util.cpp text.cpp rules.cpp Config.h Date.h T.h TDB.h Table.h Grid.h Timer.h color.h task.h

View File

@@ -44,9 +44,10 @@ am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_task_OBJECTS = Config.$(OBJEXT) Date.$(OBJEXT) T.$(OBJEXT) \
TDB.$(OBJEXT) Table.$(OBJEXT) Grid.$(OBJEXT) color.$(OBJEXT) \
parse.$(OBJEXT) task.$(OBJEXT) util.$(OBJEXT) text.$(OBJEXT) \
rules.$(OBJEXT)
TDB.$(OBJEXT) Table.$(OBJEXT) Grid.$(OBJEXT) Timer.$(OBJEXT) \
color.$(OBJEXT) parse.$(OBJEXT) task.$(OBJEXT) \
command.$(OBJEXT) report.$(OBJEXT) util.$(OBJEXT) \
text.$(OBJEXT) rules.$(OBJEXT)
task_OBJECTS = $(am_task_OBJECTS)
task_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
@@ -154,8 +155,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
task_SOURCES = Config.cpp Date.cpp T.cpp TDB.cpp Table.cpp Grid.cpp color.cpp parse.cpp task.cpp util.cpp text.cpp rules.cpp Config.h Date.h T.h TDB.h Table.h Grid.h color.h task.h
AM_CPPFLAGS = -Wall -pedantic -ggdb3 -fno-rtti
task_SOURCES = Config.cpp Date.cpp T.cpp TDB.cpp Table.cpp Grid.cpp Timer.cpp color.cpp parse.cpp task.cpp command.cpp report.cpp util.cpp text.cpp rules.cpp Config.h Date.h T.h TDB.h Table.h Grid.h Timer.h color.h task.h
all: all-am
.SUFFIXES:
@@ -228,8 +228,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/T.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TDB.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Table.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Timer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/report.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rules.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text.Po@am__quote@

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -247,7 +247,7 @@ void T::setSubstitution (const std::string& from, const std::string& to)
// uuid status [tags] [attributes] description
//
// uuid \x{8}-\x{4}-\x{4}-\x{4}-\x{12}
// status - O X
// status - + X r
// tags \w+ \s ...
// attributes \w+:\w+ \s ...
// description .+
@@ -261,6 +261,7 @@ const std::string T::compose () const
if (mStatus == pending) line += "- [";
else if (mStatus == completed) line += "+ [";
else if (mStatus == deleted) line += "X [";
else if (mStatus == recurring) line += "r [";
// Tags
for (size_t i = 0; i < mTags.size (); ++i)
@@ -275,20 +276,8 @@ const std::string T::compose () const
int count = 0;
foreach (i, mAttributes)
{
std::string converted = i->second;
// Date attributes may need conversion to epoch.
if (i->first == "due" ||
i->first == "start" ||
i->first == "entry" ||
i->first == "end")
{
if (i->second.find ("/") != std::string::npos)
validDate (converted);
}
line += (count > 0 ? " " : "");
line += i->first + ":" + converted;
line += i->first + ":" + i->second;
++count;
}
@@ -315,6 +304,7 @@ const std::string T::composeCSV ()
if (mStatus == pending) line += "'pending',";
else if (mStatus == completed) line += "'completed',";
else if (mStatus == deleted) line += "'deleted',";
else if (mStatus == recurring) line += "'recurring',";
// Tags
line += "'";
@@ -338,6 +328,11 @@ const std::string T::composeCSV ()
line += value;
line += ",";
value = mAttributes["recur"];
if (value != "")
line += value;
line += ",";
value = mAttributes["end"];
if (value != "")
line += value;
@@ -363,7 +358,11 @@ const std::string T::composeCSV ()
line += "'" + value + "'";
line += ",";
line += "'" + mDescription + "'\n";
// Convert single quotes to double quotes, because single quotes are used to
// delimit the values that need it.
std::string clean = mDescription;
std::replace (clean.begin (), clean.end (), '\'', '"');
line += "'" + clean + "'\n";
return line;
}
@@ -434,7 +433,8 @@ void T::parse (const std::string& line)
mStatus = line[37] == '+' ? completed
: line[37] == 'X' ? deleted
: pending;
: line[37] == 'r' ? recurring
: pending;
size_t openTagBracket = line.find ("[");
size_t closeTagBracket = line.find ("]", openTagBracket);
@@ -459,7 +459,7 @@ void T::parse (const std::string& line)
{
std::vector <std::string> pair;
split (pair, pairs[i], ':');
if (pair[1] != "")
if (pair.size () == 2)
mAttributes[pair[0]] = pair[1];
}
@@ -477,7 +477,7 @@ void T::parse (const std::string& line)
break;
default:
throw std::string ();
throw std::string ("Unrecognized task file format.");
break;
}
}
@@ -511,7 +511,7 @@ int T::determineVersion (const std::string& line)
line[18] == '-' &&
line[23] == '-' &&
line[36] == ' ' &&
(line[37] == '-' || line[37] == '+' || line[37] == 'X'))
(line[37] == '-' || line[37] == '+' || line[37] == 'X' || line[37] == 'r'))
return 2;
// Version 3?
@@ -530,3 +530,11 @@ int T::determineVersion (const std::string& line)
}
////////////////////////////////////////////////////////////////////////////////
// TODO Expand this method into a full-blown task validation check.
bool T::validate () const
{
// TODO Verify until > due
return true;
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -32,12 +32,12 @@
#include <map>
// Length of longest line.
#define T_LINE_MAX 8192
#define T_LINE_MAX 32768
class T
{
public:
enum status {pending, completed, deleted};
enum status {pending, completed, deleted, recurring};
T (); // Default constructor
T (const std::string&); // Initialize by parsing storage format
@@ -80,6 +80,7 @@ public:
const std::string compose () const;
const std::string composeCSV ();
void parse (const std::string&);
bool validate () const;
private:
int determineVersion (const std::string&);

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -37,7 +37,8 @@
TDB::TDB ()
: mPendingFile ("")
, mCompletedFile ("")
, mLogFile ("")
, mId (1)
, mNoLock (false)
{
}
@@ -49,11 +50,10 @@ TDB::~TDB ()
////////////////////////////////////////////////////////////////////////////////
void TDB::dataDirectory (const std::string& directory)
{
if (! access (directory.c_str (), F_OK))
if (! access (expandPath (directory).c_str (), F_OK))
{
mPendingFile = directory + "/pending.data";
mCompletedFile = directory + "/completed.data";
mLogFile = directory + "/command.log";
}
else
{
@@ -67,7 +67,7 @@ void TDB::dataDirectory (const std::string& directory)
////////////////////////////////////////////////////////////////////////////////
// Combine allPendingT with allCompletedT.
// Note: this method is O(N1) + O(N2), where N2 is not bounded.
bool TDB::allT (std::vector <T>& all) const
bool TDB::allT (std::vector <T>& all)
{
all.clear ();
@@ -95,20 +95,20 @@ bool TDB::allT (std::vector <T>& all) const
////////////////////////////////////////////////////////////////////////////////
// Only accesses to the pending file result in Tasks that have assigned ids.
bool TDB::pendingT (std::vector <T>& all) const
bool TDB::pendingT (std::vector <T>& all)
{
all.clear ();
std::vector <std::string> lines;
if (readLockedFile (mPendingFile, lines))
{
int id = 1;
mId = 1;
std::vector <std::string>::iterator it;
for (it = lines.begin (); it != lines.end (); ++it)
{
T t (*it);
t.setId (id++);
t.setId (mId++);
if (t.getStatus () == T::pending)
all.push_back (t);
}
@@ -121,20 +121,20 @@ bool TDB::pendingT (std::vector <T>& all) const
////////////////////////////////////////////////////////////////////////////////
// Only accesses to the pending file result in Tasks that have assigned ids.
bool TDB::allPendingT (std::vector <T>& all) const
bool TDB::allPendingT (std::vector <T>& all)
{
all.clear ();
std::vector <std::string> lines;
if (readLockedFile (mPendingFile, lines))
{
int id = 1;
mId = 1;
std::vector <std::string>::iterator it;
for (it = lines.begin (); it != lines.end (); ++it)
{
T t (*it);
t.setId (id++);
t.setId (mId++);
all.push_back (t);
}
@@ -188,7 +188,7 @@ bool TDB::allCompletedT (std::vector <T>& all) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::deleteT (const T& t) const
bool TDB::deleteT (const T& t)
{
T task (t);
@@ -212,7 +212,7 @@ bool TDB::deleteT (const T& t) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::completeT (const T& t) const
bool TDB::completeT (const T& t)
{
T task (t);
@@ -236,10 +236,9 @@ bool TDB::completeT (const T& t) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::addT (const T& t) const
bool TDB::addT (const T& t)
{
T task (t);
std::vector <std::string> tags;
task.getTags (tags);
@@ -254,14 +253,17 @@ bool TDB::addT (const T& t) const
}
}
if (task.getStatus () == T::pending)
if (task.getStatus () == T::pending ||
task.getStatus () == T::recurring)
{
return writePending (task);
}
return writeCompleted (task);
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::modifyT (const T& t) const
bool TDB::modifyT (const T& t)
{
T modified (t);
@@ -285,80 +287,26 @@ bool TDB::modifyT (const T& t) const
return overwritePending (pending);
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::logRead (std::vector <std::string>& entries) const
{
entries.clear ();
return readLockedFile (mLogFile, entries);
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::logCommand (int argc, char** argv) const
{
// Get time info.
time_t now;
time (&now);
struct tm* t = localtime (&now);
// Generate timestamp.
char timestamp[20];
sprintf (timestamp, "%04d-%02d-%02d %02d:%02d:%02d",
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
t->tm_hour,
t->tm_min,
t->tm_sec);
std::string command = timestamp;
command += " \"";
for (int i = 0; i < argc; ++i)
command += std::string (i ? " " : "") + argv[i];
command += "\"\n";
if (! access (mLogFile.c_str (), F_OK | W_OK))
{
FILE* out;
if ((out = fopen (mLogFile.c_str (), "a")))
{
#ifdef HAVE_FLOCK
int retry = 0;
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.25);
#endif
fputs (command.c_str (), out);
fclose (out);
return true;
}
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::lock (FILE* file) const
{
#ifdef HAVE_FLOCK
if (mNoLock)
return true;
return flock (fileno (file), LOCK_EX) ? false : true;
#else
return true;
#endif
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::overwritePending (std::vector <T>& all) const
bool TDB::overwritePending (std::vector <T>& all)
{
// Write a single task to the pending file
FILE* out;
if ((out = fopen (mPendingFile.c_str (), "w")))
{
#ifdef HAVE_FLOCK
int retry = 0;
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.25);
#endif
if (!mNoLock)
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.1);
std::vector <T>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
@@ -372,17 +320,16 @@ bool TDB::overwritePending (std::vector <T>& all) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::writePending (const T& t) const
bool TDB::writePending (const T& t)
{
// Write a single task to the pending file
FILE* out;
if ((out = fopen (mPendingFile.c_str (), "a")))
{
#ifdef HAVE_FLOCK
int retry = 0;
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.25);
#endif
if (!mNoLock)
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.1);
fputs (t.compose ().c_str (), out);
@@ -394,17 +341,16 @@ bool TDB::writePending (const T& t) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::writeCompleted (const T& t) const
bool TDB::writeCompleted (const T& t)
{
// Write a single task to the pending file
FILE* out;
if ((out = fopen (mCompletedFile.c_str (), "a")))
{
#ifdef HAVE_FLOCK
int retry = 0;
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.25);
#endif
if (!mNoLock)
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.1);
fputs (t.compose ().c_str (), out);
@@ -427,11 +373,10 @@ bool TDB::readLockedFile (
FILE* in;
if ((in = fopen (file.c_str (), "r")))
{
#ifdef HAVE_FLOCK
int retry = 0;
while (flock (fileno (in), LOCK_EX) && ++retry <= 3)
delay (0.25);
#endif
if (!mNoLock)
while (flock (fileno (in), LOCK_EX) && ++retry <= 3)
delay (0.1);
char line[T_LINE_MAX];
while (fgets (line, T_LINE_MAX, in))
@@ -453,7 +398,9 @@ bool TDB::readLockedFile (
}
////////////////////////////////////////////////////////////////////////////////
int TDB::gc () const
// Scans the pending tasks for any that are completed or deleted, and if so,
// moves them to the completed.data file. Returns a count of tasks moved.
int TDB::gc ()
{
int count = 0;
@@ -468,8 +415,11 @@ int TDB::gc () const
for (it = all.begin (); it != all.end (); ++it)
{
// Some tasks stay in the pending file.
if (it->getStatus () == T::pending)
if (it->getStatus () == T::pending ||
it->getStatus () == T::recurring)
{
pending.push_back (*it);
}
// Others are transferred to the completed file.
else
@@ -479,10 +429,25 @@ int TDB::gc () const
}
}
// Dump all clean tasks into pending.
overwritePending (pending);
// Dump all clean tasks into pending. But don't bother unless at least one
// task was transferred.
if (count)
overwritePending (pending);
return count;
}
////////////////////////////////////////////////////////////////////////////////
int TDB::nextId ()
{
return mId++;
}
////////////////////////////////////////////////////////////////////////////////
void TDB::noLock ()
{
mNoLock = true;
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -38,30 +38,33 @@ public:
~TDB ();
void dataDirectory (const std::string&);
bool allT (std::vector <T>&) const;
bool pendingT (std::vector <T>&) const;
bool allPendingT (std::vector <T>&) const;
bool allT (std::vector <T>&);
bool pendingT (std::vector <T>&);
bool allPendingT (std::vector <T>&);
bool completedT (std::vector <T>&) const;
bool allCompletedT (std::vector <T>&) const;
bool deleteT (const T&) const;
bool completeT (const T&) const;
bool addT (const T&) const;
bool modifyT (const T&) const;
bool deleteT (const T&);
bool completeT (const T&);
bool addT (const T&);
bool modifyT (const T&);
bool logRead (std::vector <std::string>&) const;
bool logCommand (int, char**) const;
int gc () const;
int gc ();
int nextId ();
void noLock ();
private:
bool lock (FILE*) const;
bool overwritePending (std::vector <T>&) const;
bool writePending (const T&) const;
bool writeCompleted (const T&) const;
bool overwritePending (std::vector <T>&);
bool writePending (const T&);
bool writeCompleted (const T&);
bool readLockedFile (const std::string&, std::vector <std::string>&) const;
private:
std::string mPendingFile;
std::string mCompletedFile;
std::string mLogFile;
int mId;
bool mNoLock;
};
#endif

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -54,6 +54,7 @@
Table::Table ()
: mRows (0)
, mIntraPadding (1)
, mDashedUnderline (false)
, mTablePadding (0)
, mTableWidth (0)
, mSuppressWS (false)
@@ -103,6 +104,12 @@ void Table::setTableWidth (int width)
mTableWidth = width;
}
////////////////////////////////////////////////////////////////////////////////
void Table::setTableDashedUnderline ()
{
mDashedUnderline = true;
}
////////////////////////////////////////////////////////////////////////////////
int Table::addColumn (const std::string& col)
{
@@ -582,7 +589,57 @@ const std::string Table::formatHeader (
fg, bg,
Text::colorize (
decoration, Text::nocolor,
pad + preJust+ data + postJust + pad) + intraPad);
pad + preJust + data + postJust + pad) + intraPad);
}
////////////////////////////////////////////////////////////////////////////////
// data One Data to be rendered
// width 8 Max data width for column/specified width
// padding 1 Extra padding around data
// intraPadding 0 Extra padding between columns only
// justification right Alignment withing padding
//
// Returns:
// "------- "
// ------- data
// ^ ^ padding
// ^ intraPadding
// ^^^^^^^^ width
// ^ ^ fg/bg
//
const std::string Table::formatHeaderDashedUnderline (
int col,
int width,
int padding)
{
assert (width > 0);
Text::color fg = getHeaderFg (col);
Text::color bg = getHeaderBg (col);
Text::color decoration = getHeaderUnderline (col);
std::string data = "";
for (int i = 0; i < width; ++i)
data += '-';
std::string pad = "";
std::string intraPad = "";
std::string attrOn = "";
std::string attrOff = "";
for (int i = 0; i < padding; ++i)
pad += " ";
// Place the value within the available space - justify.
if (col < (signed) mColumns.size () - 1)
for (int i = 0; i < getIntraPadding (); ++i)
intraPad += " ";
return Text::colorize (
fg, bg,
Text::colorize (
decoration, Text::nocolor,
pad + data + pad) + intraPad);
}
////////////////////////////////////////////////////////////////////////////////
@@ -659,6 +716,12 @@ void Table::suppressWS ()
mSuppressWS = true;
}
////////////////////////////////////////////////////////////////////////////////
void Table::setDateFormat (const std::string& dateFormat)
{
mDateFormat = dateFormat;
}
////////////////////////////////////////////////////////////////////////////////
int Table::rowCount ()
{
@@ -673,34 +736,84 @@ int Table::columnCount ()
////////////////////////////////////////////////////////////////////////////////
// Removes extraneous output characters, such as:
// - spaces followed by a newline is collapsed to just a newline, if there is
// no Bg color.
// - removal of redundant color codes:
// ^[[31mName^[[0m ^[[31mValue^[[0m -> ^[[31mName Value^[[0m
//
// This method is a work in progress.
void Table::optimize (std::string& output)
void Table::optimize (std::string& output) const
{
/*
int start = output.length ();
*/
// \s\n -> \n
size_t i = 0;
while ((i = output.find (" \n")) != std::string::npos)
{
output = output.substr (0, i) +
output.substr (i + 1, std::string::npos);
}
// int start = output.length ();
/*
std::cout << int ((100 * (start - output.length ()) / start))
<< "%" << std::endl;
Well, how about that!
The benchmark.t unit test adds a 1000 tasks, fiddles with some of them, then
runs a series of reports. The results are timed, and look like this:
1000 tasks added in 3 seconds
600 tasks altered in 32 seconds
'task ls' in 26 seconds
'task list' in 17 seconds
'task list pri:H' in 19 seconds
'task list +tag' in 0 seconds
'task list project_A' in 0 seconds
'task long' in 29 seconds
'task completed' in 2 seconds
'task history' in 0 seconds
'task ghistory' in 0 seconds
This performance is terrible. To identify the worst offender, Various Timer
objects were added in Table::render, assuming that table sorting is the major
bottleneck. But no, it is Table::optimize that is the problem. After
commenting out this method, the results are now:
1000 tasks added in 3 seconds
600 tasks altered in 29 seconds
'task ls' in 0 seconds
'task list' in 0 seconds
'task list pri:H' in 1 seconds
'task list +tag' in 0 seconds
'task list project_A' in 0 seconds
'task long' in 0 seconds
'task completed' in 0 seconds
'task history' in 0 seconds
'task ghistory' in 0 seconds
Much better.
*/
// std::cout << int ((100 * (start - output.length ()) / start))
// << "%" << std::endl;
}
////////////////////////////////////////////////////////////////////////////////
// Combsort11, with O(n log n) average, O(n log n) worst case performance.
//
// function combsort11(array input)
// gap := input.size
//
// loop until gap <= 1 and swaps = 0
// if gap > 1
// gap := gap / 1.3
// if gap = 10 or gap = 9
// gap := 11
// end if
// end if
//
// i := 0
// swaps := 0
//
// loop until i + gap >= input.size
// if input[i] > input[i+gap]
// swap(input[i], input[i+gap])
// swaps := 1
// end if
// i := i + 1
// end loop
//
// end loop
// end function
#define SWAP \
{ \
int temp = order[r]; \
@@ -713,7 +826,7 @@ void Table::sort (std::vector <int>& order)
int gap = order.size ();
int swaps = 1;
while (gap > 1 || swaps != 0)
while (gap > 1 || swaps > 0)
{
if (gap > 1)
{
@@ -734,10 +847,28 @@ void Table::sort (std::vector <int>& order)
Grid::Cell* left = mData.byRow (order[r], mSortColumns[c]);
Grid::Cell* right = mData.byRow (order[r + gap], mSortColumns[c]);
if (left == NULL && right != NULL)
SWAP
if (left && right && *left != *right)
// Data takes precedence over missing data.
if (left == NULL && right != NULL)
{
SWAP
break;
}
// No data - try comparing the next column.
else if (left == NULL && right == NULL)
{
keepScanning = true;
}
// Identical data - try comparing the next column.
else if (left && right && *left == *right)
{
keepScanning = true;
}
// Differing data - do a proper comparison.
else if (left && right && *left != *right)
{
switch (mSortOrder[mSortColumns[c]])
{
@@ -752,12 +883,12 @@ void Table::sort (std::vector <int>& order)
break;
case ascendingCharacter:
if ((char)*left > (char)*right)
if ((std::string)*left > (std::string)*right)
SWAP
break;
case descendingCharacter:
if ((char)*left < (char)*right)
if ((std::string)*left < (std::string)*right)
SWAP
break;
@@ -771,8 +902,8 @@ void Table::sort (std::vector <int>& order)
else
{
Date dl ((std::string)*left);
Date dr ((std::string)*right);
Date dl ((std::string)*left, mDateFormat);
Date dr ((std::string)*right, mDateFormat);
if (dl > dr)
SWAP
}
@@ -789,8 +920,8 @@ void Table::sort (std::vector <int>& order)
else
{
Date dl ((std::string)*left);
Date dr ((std::string)*right);
Date dl ((std::string)*left, mDateFormat);
Date dr ((std::string)*right, mDateFormat);
if (dl < dr)
SWAP
}
@@ -798,24 +929,38 @@ void Table::sort (std::vector <int>& order)
break;
case ascendingPriority:
if (((std::string)*left == "" && (std::string)*right != "") ||
((std::string)*left == "M" && (std::string)*right == "L") ||
((std::string)*left == "H" && ((std::string)*right == "L" || (std::string)*right == "M")))
if (((std::string)*left == "" && (std::string)*right != "") ||
((std::string)*left == "M" && (std::string)*right == "L") ||
((std::string)*left == "H" && ((std::string)*right == "L" || (std::string)*right == "M")))
SWAP
break;
case descendingPriority:
if (((std::string)*left == "" && (std::string)*right != "") ||
if (((std::string)*left == "" && (std::string)*right != "") ||
((std::string)*left == "L" && ((std::string)*right == "M" || (std::string)*right == "H")) ||
((std::string)*left == "M" && (std::string)*right == "H"))
((std::string)*left == "M" && (std::string)*right == "H"))
SWAP
break;
case ascendingPeriod:
if ((std::string)*left == "" && (std::string)*right != "")
break;
else if ((std::string)*left != "" && (std::string)*right == "")
SWAP
else if (convertDuration ((std::string)*left) > convertDuration ((std::string)*right))
SWAP
break;
case descendingPeriod:
if ((std::string)*left != "" && (std::string)*right == "")
break;
else if ((std::string)*left == "" && (std::string)*right != "")
SWAP
else if (convertDuration ((std::string)*left) < convertDuration ((std::string)*right))
SWAP
break;
}
break;
}
else
keepScanning = true;
}
++r;
@@ -849,19 +994,30 @@ void Table::clean (std::string& value)
}
////////////////////////////////////////////////////////////////////////////////
const std::string Table::render ()
const std::string Table::render (int maximum /* = 0 */)
{
calculateColumnWidths ();
// Print column headers in column order.
std::string output;
std::string underline;
for (size_t col = 0; col < mColumns.size (); ++col)
{
output += formatHeader (
col,
mCalculatedWidth[col],
mColumnPadding[col]);
if (mDashedUnderline)
underline += formatHeaderDashedUnderline (
col,
mCalculatedWidth[col],
mColumnPadding[col]);
}
output += "\n";
if (underline.length ())
output += underline + "\n";
// Determine row order, according to sort options.
std::vector <int> order;
@@ -872,8 +1028,14 @@ const std::string Table::render ()
if (mSortColumns.size ())
sort (order);
// If a non-zero maximum is specified, then it limits the number of rows of
// the table that are rendered.
int limit = mRows;
if (maximum != 0)
limit = min (maximum, mRows);
// Print all rows.
for (int row = 0; row < mRows; ++row)
for (int row = 0; row < limit; ++row)
{
std::vector <std::vector <std::string> > columns;
std::vector <std::string> blanks;
@@ -907,15 +1069,19 @@ const std::string Table::render ()
else
output += blanks[col];
// Trim right.
output.erase (output.find_last_not_of (" ") + 1);
output += "\n";
}
}
else
{
// Trim right.
output.erase (output.find_last_not_of (" ") + 1);
output += "\n";
}
}
// Eliminate redundant color codes.
optimize (output);
return output;
}

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -37,9 +37,16 @@ class Table
{
public:
enum just {left, center, right};
enum order {ascendingNumeric, ascendingCharacter, ascendingPriority,
ascendingDate, descendingNumeric, descendingCharacter,
descendingPriority, descendingDate};
enum order {ascendingNumeric,
ascendingCharacter,
ascendingPriority,
ascendingDate,
ascendingPeriod,
descendingNumeric,
descendingCharacter,
descendingPriority,
descendingDate,
descendingPeriod};
enum sizing {minimum = -1, flexible = 0};
Table ();
@@ -51,6 +58,7 @@ public:
void setTablePadding (int);
void setTableIntraPadding (int);
void setTableWidth (int);
void setTableDashedUnderline ();
int addColumn (const std::string&);
void setColumnColor (int, Text::color, Text::color);
@@ -79,10 +87,11 @@ public:
void setCellBg (int, int, Text::color);
void suppressWS ();
void setDateFormat (const std::string&);
int rowCount ();
int columnCount ();
const std::string render ();
const std::string render (int maximum = 0);
private:
std::string getCell (const int, const int);
@@ -97,10 +106,11 @@ private:
just getJustification (const int, const int);
just getHeaderJustification (const int);
const std::string formatHeader (const int, const int, const int);
const std::string formatHeaderDashedUnderline (const int, const int, const int);
void formatCell (const int, const int, const int, const int, std::vector <std::string>&, std::string&);
void optimize (std::string&);
void sort (std::vector <int>&);
void clean (std::string&);
void optimize (std::string&) const;
private:
std::vector <std::string> mColumns;
@@ -109,6 +119,7 @@ private:
std::map <std::string, std::string> mFg;
std::map <std::string, std::string> mBg;
std::map <std::string, std::string> mUnderline;
bool mDashedUnderline;
// Padding...
int mTablePadding;
@@ -128,6 +139,7 @@ private:
// Misc...
bool mSuppressWS;
std::string mDateFormat;
};
#endif

56
src/Timer.cpp Normal file
View File

@@ -0,0 +1,56 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor,
// Boston, MA
// 02110-1301
// USA
//
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <iomanip>
#include <Timer.h>
////////////////////////////////////////////////////////////////////////////////
// Timer starts when the object is constructed.
Timer::Timer (const std::string& description)
: mDescription (description)
{
::gettimeofday (&mStart, NULL);
}
////////////////////////////////////////////////////////////////////////////////
// Timer stops when the object is desctructed.
Timer::~Timer ()
{
struct timeval end;
::gettimeofday (&end, NULL);
std::cout << "Timer "
<< mDescription
<< " "
<< std::setprecision (6)
<< ((end.tv_sec - mStart.tv_sec) +
((end.tv_usec - mStart.tv_usec ) / 1000000.0))
<< std::endl;
}
////////////////////////////////////////////////////////////////////////////////

46
src/Timer.h Normal file
View File

@@ -0,0 +1,46 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor,
// Boston, MA
// 02110-1301
// USA
//
////////////////////////////////////////////////////////////////////////////////
#ifndef INCLUDED_TIMER
#define INCLUDED_TIMER
#include <string>
#include <sys/time.h>
class Timer
{
public:
Timer (const std::string&);
~Timer ();
private:
std::string mDescription;
struct timeval mStart;
};
#endif
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -242,7 +242,11 @@ std::string decode (color c)
////////////////////////////////////////////////////////////////////////////////
std::string colorize (color fg, color bg, const std::string& input)
{
return decode (fg) + decode (bg) + input + decode (off);
if (input.length ())
if (fg != nocolor || bg != nocolor)
return decode (fg) + decode (bg) + input + decode (off);
return input;
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

815
src/command.cpp Normal file
View File

@@ -0,0 +1,815 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor,
// Boston, MA
// 02110-1301
// USA
//
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <iomanip>
#include <sstream>
#include <fstream>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pwd.h>
#include <time.h>
#include "Config.h"
#include "Date.h"
#include "Table.h"
#include "color.h"
#include "TDB.h"
#include "T.h"
#include "task.h"
#ifdef HAVE_LIBNCURSES
#include <ncurses.h>
#endif
////////////////////////////////////////////////////////////////////////////////
std::string handleAdd (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
char entryTime[16];
sprintf (entryTime, "%u", (unsigned int) time (NULL));
task.setAttribute ("entry", entryTime);
std::map <std::string, std::string> atts;
task.getAttributes (atts);
foreach (i, atts)
if (i->second == "")
task.removeAttribute (i->first);
// Recurring tasks get a special status.
if (task.getAttribute ("due") != "" &&
task.getAttribute ("recur") != "")
{
task.setStatus (T::recurring);
task.setAttribute ("mask", "");
}
// Override with default.project, if not specified.
if (task.getAttribute ("project") == "")
task.setAttribute ("project", conf.get ("default.project", ""));
// Override with default.priority, if not specified.
if (task.getAttribute ("priority") == "")
{
std::string defaultPriority = conf.get ("default.priority", "");
if (validPriority (defaultPriority))
task.setAttribute ("priority", defaultPriority);
}
// Disallow blank descriptions.
if (task.getDescription () == "")
throw std::string ("Cannot add a task that is blank, or contains <CR> or <LF> characters.");
if (!tdb.addT (task))
throw std::string ("Could not create new task.");
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleProjects (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
// Get all the tasks, including deleted ones.
std::vector <T> tasks;
tdb.pendingT (tasks);
// Scan all the tasks for their project name, building a map using project
// names as keys.
std::map <std::string, int> unique;
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T task (tasks[i]);
unique[task.getAttribute ("project")] += 1;
}
if (unique.size ())
{
// Render a list of project names from the map.
Table table;
table.addColumn ("Project");
table.addColumn ("Tasks");
if (conf.get ("color", true) || conf.get (std::string ("_forcecolor"), false))
{
table.setColumnUnderline (0);
table.setColumnUnderline (1);
}
table.setColumnJustification (1, Table::right);
table.setDateFormat (conf.get ("dateformat", "m/d/Y"));
foreach (i, unique)
{
int row = table.addRow ();
table.addCell (row, 0, i->first);
table.addCell (row, 1, i->second);
}
out << optionalBlankLine (conf)
<< table.render ()
<< optionalBlankLine (conf)
<< unique.size ()
<< (unique.size () == 1 ? " project" : " projects")
<< std::endl;
}
else
out << "No projects."
<< std::endl;
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleTags (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
// Get all the tasks.
std::vector <T> tasks;
tdb.pendingT (tasks);
// Scan all the tasks for their project name, building a map using project
// names as keys.
std::map <std::string, std::string> unique;
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T task (tasks[i]);
std::vector <std::string> tags;
task.getTags (tags);
for (unsigned int t = 0; t < tags.size (); ++t)
unique[tags[t]] = "";
}
// Render a list of tag names from the map.
std::cout << optionalBlankLine (conf);
foreach (i, unique)
std::cout << i->first << std::endl;
if (unique.size ())
out << optionalBlankLine (conf)
<< unique.size ()
<< (unique.size () == 1 ? " tag" : " tags")
<< std::endl;
else
out << "No tags."
<< std::endl;
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
// If a task is deleted, but is still in the pending file, then it may be
// undeleted simply by changing it's status.
std::string handleUndelete (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
tdb.allPendingT (all);
int id = task.getId ();
std::vector <T>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getId () == id)
{
if (it->getStatus () == T::deleted)
{
if (it->getAttribute ("recur") != "")
{
out << "Task does not support 'undelete' for recurring tasks." << std::endl;
return out.str ();
}
T restored (*it);
restored.setStatus (T::pending);
restored.removeAttribute ("end");
tdb.modifyT (restored);
out << "Task " << id << " successfully undeleted." << std::endl;
return out.str ();
}
else
{
out << "Task " << id << " is not deleted - therefore cannot undelete." << std::endl;
return out.str ();
}
}
}
out << "Task " << id
<< " not found - tasks can only be reliably undeleted if the undelete" << std::endl
<< "command is run immediately after the errant delete command." << std::endl;
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
// If a task is done, but is still in the pending file, then it may be undone
// simply by changing it's status.
std::string handleUndo (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
tdb.allPendingT (all);
int id = task.getId ();
std::vector <T>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getId () == id)
{
if (it->getStatus () == T::completed)
{
if (it->getAttribute ("recur") != "")
return std::string ("Task does not support 'undo' for recurring tasks.\n");
T restored (*it);
restored.setStatus (T::pending);
restored.removeAttribute ("end");
tdb.modifyT (restored);
out << "Task " << id << " successfully undone." << std::endl;
return out.str ();
}
else
{
out << "Task " << id << " is not done - therefore cannot be undone." << std::endl;
return out.str ();
}
}
}
out << "Task " << id
<< " not found - tasks can only be reliably undone if the undo" << std::endl
<< "command is run immediately after the errant done command." << std::endl;
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleVersion (Config& conf)
{
std::stringstream out;
// Determine window size, and set table accordingly.
int width = conf.get ("defaultwidth", 80);
#ifdef HAVE_LIBNCURSES
if (conf.get ("curses", true))
{
WINDOW* w = initscr ();
width = w->_maxx + 1;
endwin ();
}
#endif
// Create a table for the disclaimer.
Table disclaimer;
disclaimer.setTableWidth (width);
disclaimer.addColumn (" ");
disclaimer.setColumnWidth (0, Table::flexible);
disclaimer.setColumnJustification (0, Table::left);
disclaimer.addCell (disclaimer.addRow (), 0,
"Task comes with ABSOLUTELY NO WARRANTY; for details read the COPYING file "
"included. This is free software, and you are welcome to redistribute it "
"under certain conditions; again, see the COPYING file for details.");
// Create a table for the URL.
Table link;
link.setTableWidth (width);
link.addColumn (" ");
link.setColumnWidth (0, Table::flexible);
link.setColumnJustification (0, Table::left);
link.addCell (link.addRow (), 0,
"See http://www.beckingham.net/task.html for the latest releases and a "
"full tutorial. New releases containing fixes and enhancements are "
"made frequently.");
// Create a table for output.
Table table;
table.setTableWidth (width);
table.setDateFormat (conf.get ("dateformat", "m/d/Y"));
table.addColumn ("Config variable");
table.addColumn ("Value");
if (conf.get ("color", true) || conf.get (std::string ("_forcecolor"), false))
{
table.setColumnUnderline (0);
table.setColumnUnderline (1);
}
else
table.setTableDashedUnderline ();
table.setColumnWidth (0, Table::minimum);
table.setColumnWidth (1, Table::flexible);
table.setColumnJustification (0, Table::left);
table.setColumnJustification (1, Table::left);
table.sortOn (0, Table::ascendingCharacter);
std::vector <std::string> all;
conf.all (all);
foreach (i, all)
{
std::string value = conf.get (*i);
if (value != "")
{
int row = table.addRow ();
table.addCell (row, 0, *i);
table.addCell (row, 1, value);
}
}
out << "Copyright (C) 2006 - 2009, P. Beckingham."
<< std::endl
<< ((conf.get ("color", true) || conf.get (std::string ("_forcecolor"), false))
? Text::colorize (Text::bold, Text::nocolor, PACKAGE)
: PACKAGE)
<< " "
<< ((conf.get ("color", true) || conf.get (std::string ("_forcecolor"), false))
? Text::colorize (Text::bold, Text::nocolor, VERSION)
: VERSION)
<< std::endl
<< disclaimer.render ()
<< std::endl
<< table.render ()
<< link.render ()
<< std::endl;
// Complain about configuration variables that are not recognized.
// These are the regular configuration variables.
std::string recognized =
"blanklines color color.active color.due color.overdue color.pri.H "
"color.pri.L color.pri.M color.pri.none color.recurring color.tagged "
"confirmation curses data.location dateformat default.command "
"default.priority defaultwidth due locking monthsperline nag next project "
"shadow.command shadow.file shadow.notify";
// This configuration variable is supported, but not documented. It exists
// so that unit tests can force color to be on even when the output from task
// is redirected to a file, or stdout is not a tty.
recognized += " _forcecolor";
std::vector <std::string> unrecognized;
foreach (i, all)
{
if (recognized.find (*i) == std::string::npos)
{
// These are special configuration variables, because their name is
// dynamic.
if (i->find ("color.keyword.") == std::string::npos &&
i->find ("color.project.") == std::string::npos &&
i->find ("color.tag.") == std::string::npos &&
i->find ("report.") == std::string::npos)
{
unrecognized.push_back (*i);
}
}
}
if (unrecognized.size ())
{
out << "Your .taskrc file contains these unrecognized variables:"
<< std::endl;
foreach (i, unrecognized)
out << " " << *i << std::endl;
out << std::endl;
}
// Verify installation. This is mentioned in the documentation as the way to
// ensure everything is properly installed.
if (all.size () == 0)
out << "Configuration error: .taskrc contains no entries"
<< std::endl;
else
{
if (conf.get ("data.location") == "")
out << "Configuration error: data.location not specified in .taskrc "
"file."
<< std::endl;
if (access (expandPath (conf.get ("data.location")).c_str (), X_OK))
out << "Configuration error: data.location contains a directory name"
" that doesn't exist, or is unreadable."
<< std::endl;
}
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleDelete (TDB& tdb, T& task, Config& conf)
{
if (conf.get ("confirmation") != "yes" || confirm ("Permanently delete task?"))
{
std::vector <T> all;
tdb.allPendingT (all);
foreach (t, all)
{
if (t->getId () == task.getId ())
{
// Check for the more complex case of a recurring task. If this is a
// recurring task, get confirmation to delete them all.
std::string parent = t->getAttribute ("parent");
if (parent != "")
{
if (confirm ("This is a recurring task. Do you want to delete all pending recurrences of this same task?"))
{
// Scan all pending tasks for siblings of this task, and the parent
// itself, and delete them.
foreach (sibling, all)
if (sibling->getAttribute ("parent") == parent ||
sibling->getUUID () == parent)
tdb.deleteT (*sibling);
return std::string ("");
}
else
{
// Update mask in parent.
t->setStatus (T::deleted);
updateRecurrenceMask (tdb, all, *t);
tdb.deleteT (*t);
return std::string ("");
}
}
else
tdb.deleteT (*t);
break; // No point continuing the loop.
}
}
}
else
return std::string ("Task not deleted.\n");
return std::string ("");
}
////////////////////////////////////////////////////////////////////////////////
std::string handleStart (TDB& tdb, T& task, Config& conf)
{
std::vector <T> all;
tdb.pendingT (all);
std::vector <T>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getId () == task.getId ())
{
T original (*it);
if (original.getAttribute ("start") == "")
{
char startTime[16];
sprintf (startTime, "%u", (unsigned int) time (NULL));
original.setAttribute ("start", startTime);
original.setId (task.getId ());
tdb.modifyT (original);
nag (tdb, task, conf);
return std::string ("");
}
else
{
std::stringstream out;
out << "Task " << task.getId () << " already started." << std::endl;
return out.str ();
}
}
}
throw std::string ("Task not found.");
return std::string (""); // To satisfy gcc.
}
////////////////////////////////////////////////////////////////////////////////
std::string handleStop (TDB& tdb, T& task, Config& conf)
{
std::vector <T> all;
tdb.pendingT (all);
std::vector <T>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getId () == task.getId ())
{
T original (*it);
if (original.getAttribute ("start") != "")
{
original.removeAttribute ("start");
original.setId (task.getId ());
tdb.modifyT (original);
return std::string ("");
}
else
{
std::stringstream out;
out << "Task " << task.getId () << " not started." << std::endl;
return out.str ();
}
}
}
throw std::string ("Task not found.");
return std::string (""); // To satisfy gcc.
}
////////////////////////////////////////////////////////////////////////////////
std::string handleDone (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
if (!tdb.completeT (task))
throw std::string ("Could not mark task as completed.");
// Now update mask in parent.
std::vector <T> all;
tdb.allPendingT (all);
foreach (t, all)
{
if (t->getId () == task.getId ())
{
t->setStatus (T::completed);
updateRecurrenceMask (tdb, all, *t);
break;
}
}
nag (tdb, task, conf);
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleExport (TDB& tdb, T& task, Config& conf)
{
std::stringstream output;
// Use the description as a file name, then clobber the description so the
// file name isn't used for filtering.
std::string file = trim (task.getDescription ());
task.setDescription ("");
if (file.length () > 0)
{
std::ofstream out (file.c_str ());
if (out.good ())
{
out << "'id',"
<< "'uuid',"
<< "'status',"
<< "'tags',"
<< "'entry',"
<< "'start',"
<< "'due',"
<< "'recur',"
<< "'end',"
<< "'project',"
<< "'priority',"
<< "'fg',"
<< "'bg',"
<< "'description'"
<< "\n";
int count = 0;
std::vector <T> all;
tdb.allPendingT (all);
filter (all, task);
foreach (t, all)
{
if (t->getStatus () != T::recurring &&
t->getStatus () != T::deleted)
{
out << t->composeCSV ().c_str ();
++count;
}
}
out.close ();
output << count << " tasks exported to '" << file << "'" << std::endl;
}
else
throw std::string ("Could not write to export file.");
}
else
throw std::string ("You must specify a file to write to.");
return output.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleModify (TDB& tdb, T& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
tdb.pendingT (all);
std::vector <T>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getId () == task.getId ())
{
T original (*it);
// A non-zero value forces a file write.
int changes = 0;
// Apply a new description, if any.
if (task.getDescription () != "")
{
original.setDescription (task.getDescription ());
++changes;
}
// Apply or remove tags, if any.
std::vector <std::string> tags;
task.getTags (tags);
for (unsigned int i = 0; i < tags.size (); ++i)
{
if (tags[i][0] == '+')
original.addTag (tags[i].substr (1, std::string::npos));
else
original.addTag (tags[i]);
++changes;
}
task.getRemoveTags (tags);
for (unsigned int i = 0; i < tags.size (); ++i)
{
if (tags[i][0] == '-')
original.removeTag (tags[i].substr (1, std::string::npos));
else
original.removeTag (tags[i]);
++changes;
}
// Apply or remove attributes, if any.
std::map <std::string, std::string> attributes;
task.getAttributes (attributes);
foreach (i, attributes)
{
if (i->second == "")
original.removeAttribute (i->first);
else
original.setAttribute (i->first, i->second);
++changes;
}
std::string from;
std::string to;
task.getSubstitution (from, to);
if (from != "")
{
std::string description = original.getDescription ();
size_t pattern = description.find (from);
if (pattern != std::string::npos)
{
description = description.substr (0, pattern) +
to +
description.substr (pattern + from.length (), std::string::npos);
original.setDescription (description);
++changes;
}
}
if (changes)
{
original.setId (task.getId ());
tdb.modifyT (original);
}
return out.str ();
}
}
throw std::string ("Task not found.");
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////
std::string handleColor (Config& conf)
{
std::stringstream out;
if (conf.get ("color", true) || conf.get (std::string ("_forcecolor"), false))
{
out << optionalBlankLine (conf) << "Foreground" << std::endl
<< " "
<< Text::colorize (Text::bold, Text::nocolor, "bold") << " "
<< Text::colorize (Text::underline, Text::nocolor, "underline") << " "
<< Text::colorize (Text::bold_underline, Text::nocolor, "bold_underline") << std::endl
<< " " << Text::colorize (Text::black, Text::nocolor, "black") << " "
<< Text::colorize (Text::bold_black, Text::nocolor, "bold_black") << " "
<< Text::colorize (Text::underline_black, Text::nocolor, "underline_black") << " "
<< Text::colorize (Text::bold_underline_black, Text::nocolor, "bold_underline_black") << std::endl
<< " " << Text::colorize (Text::red, Text::nocolor, "red") << " "
<< Text::colorize (Text::bold_red, Text::nocolor, "bold_red") << " "
<< Text::colorize (Text::underline_red, Text::nocolor, "underline_red") << " "
<< Text::colorize (Text::bold_underline_red, Text::nocolor, "bold_underline_red") << std::endl
<< " " << Text::colorize (Text::green, Text::nocolor, "green") << " "
<< Text::colorize (Text::bold_green, Text::nocolor, "bold_green") << " "
<< Text::colorize (Text::underline_green, Text::nocolor, "underline_green") << " "
<< Text::colorize (Text::bold_underline_green, Text::nocolor, "bold_underline_green") << std::endl
<< " " << Text::colorize (Text::yellow, Text::nocolor, "yellow") << " "
<< Text::colorize (Text::bold_yellow, Text::nocolor, "bold_yellow") << " "
<< Text::colorize (Text::underline_yellow, Text::nocolor, "underline_yellow") << " "
<< Text::colorize (Text::bold_underline_yellow, Text::nocolor, "bold_underline_yellow") << std::endl
<< " " << Text::colorize (Text::blue, Text::nocolor, "blue") << " "
<< Text::colorize (Text::bold_blue, Text::nocolor, "bold_blue") << " "
<< Text::colorize (Text::underline_blue, Text::nocolor, "underline_blue") << " "
<< Text::colorize (Text::bold_underline_blue, Text::nocolor, "bold_underline_blue") << std::endl
<< " " << Text::colorize (Text::magenta, Text::nocolor, "magenta") << " "
<< Text::colorize (Text::bold_magenta, Text::nocolor, "bold_magenta") << " "
<< Text::colorize (Text::underline_magenta, Text::nocolor, "underline_magenta") << " "
<< Text::colorize (Text::bold_underline_magenta, Text::nocolor, "bold_underline_magenta") << std::endl
<< " " << Text::colorize (Text::cyan, Text::nocolor, "cyan") << " "
<< Text::colorize (Text::bold_cyan, Text::nocolor, "bold_cyan") << " "
<< Text::colorize (Text::underline_cyan, Text::nocolor, "underline_cyan") << " "
<< Text::colorize (Text::bold_underline_cyan, Text::nocolor, "bold_underline_cyan") << std::endl
<< " " << Text::colorize (Text::white, Text::nocolor, "white") << " "
<< Text::colorize (Text::bold_white, Text::nocolor, "bold_white") << " "
<< Text::colorize (Text::underline_white, Text::nocolor, "underline_white") << " "
<< Text::colorize (Text::bold_underline_white, Text::nocolor, "bold_underline_white") << std::endl
<< std::endl << "Background" << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_black, "on_black") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_black, "on_bright_black") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_red, "on_red") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_red, "on_bright_red") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_green, "on_green") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_green, "on_bright_green") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_yellow, "on_yellow") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_yellow, "on_bright_yellow") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_blue, "on_blue") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_blue, "on_bright_blue") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_magenta, "on_magenta") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_magenta, "on_bright_magenta") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_cyan, "on_cyan") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_cyan, "on_bright_cyan") << std::endl
<< " " << Text::colorize (Text::nocolor, Text::on_white, "on_white") << " "
<< Text::colorize (Text::nocolor, Text::on_bright_white, "on_bright_white") << std::endl
<< optionalBlankLine (conf);
}
else
{
out << "Color is currently turned off in your .taskrc file." << std::endl;
}
return out.str ();
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -35,6 +35,8 @@
#include "T.h"
////////////////////////////////////////////////////////////////////////////////
// NOTE: These are static arrays only because there is no initializer list for
// std::vector.
static const char* colors[] =
{
"bold",
@@ -107,6 +109,10 @@ static const char* attributes[] =
"entry",
"start",
"end",
"recur",
"until",
"mask",
"imask",
"",
};
@@ -120,23 +126,27 @@ static const char* commands[] =
"delete",
"done",
"export",
"help",
"history",
"ghistory",
"info",
"list",
"long",
"ls",
"next",
"overdue",
"projects",
"start",
"stats",
"stop",
"summary",
"tags",
"usage",
"undelete",
"undo",
"version",
"",
};
static std::vector <std::string> customReports;
////////////////////////////////////////////////////////////////////////////////
void guess (const std::string& type, const char** list, std::string& candidate)
{
std::vector <std::string> options;
@@ -149,7 +159,37 @@ void guess (const std::string& type, const char** list, std::string& candidate)
candidate = matches[0];
else if (0 == matches.size ())
throw std::string ("Unrecognized ") + type + " '" + candidate + "'";
candidate = "";
else
{
std::string error = "Ambiguous ";
error += type;
error += " '";
error += candidate;
error += "' - could be either of ";
for (size_t i = 0; i < matches.size (); ++i)
{
if (i)
error += ", ";
error += matches[i];
}
throw error;
}
}
////////////////////////////////////////////////////////////////////////////////
void guess (const std::string& type, std::vector<std::string>& options, std::string& candidate)
{
std::vector <std::string> matches;
autoComplete (candidate, options, matches);
if (1 == matches.size ())
candidate = matches[0];
else if (0 == matches.size ())
// throw std::string ("Unrecognized ") + type + " '" + candidate + "'";
candidate = "";
else
{
@@ -179,41 +219,29 @@ static bool isCommand (const std::string& candidate)
std::vector <std::string> matches;
autoComplete (candidate, options, matches);
if (0 == matches.size ())
return false;
return true;
}
////////////////////////////////////////////////////////////////////////////////
bool validDate (std::string& date)
{
size_t firstSlash = date.find ("/");
size_t secondSlash = date.find ("/", firstSlash + 1);
if (firstSlash != std::string::npos &&
secondSlash != std::string::npos)
{
int m = ::atoi (date.substr (0, firstSlash ).c_str ());
int d = ::atoi (date.substr (firstSlash + 1, secondSlash - firstSlash).c_str ());
int y = ::atoi (date.substr (secondSlash + 1, std::string::npos ).c_str ());
if (!Date::valid (m, d, y))
throw std::string ("\"") + date + "\" is not a valid date.";
// Convert to epoch form.
Date dt (m, d, y);
time_t t;
dt.toEpoch (t);
char converted[12];
sprintf (converted, "%u", (unsigned int) t);
date = converted;
autoComplete (candidate, customReports, matches);
if (0 == matches.size ())
return false;
}
else
throw std::string ("Badly formed date - use the MM/DD/YYYY format");
return true;
}
////////////////////////////////////////////////////////////////////////////////
static bool validPriority (std::string& input)
bool validDate (std::string& date, Config& conf)
{
Date test (date, conf.get ("dateformat", "m/d/Y"));
char epoch[12];
sprintf (epoch, "%d", (int) test.toEpoch ());
date = epoch;
return true;
}
////////////////////////////////////////////////////////////////////////////////
bool validPriority (const std::string& input)
{
if (input != "H" &&
input != "M" &&
@@ -227,32 +255,43 @@ static bool validPriority (std::string& input)
}
////////////////////////////////////////////////////////////////////////////////
static bool validAttribute (std::string& name, std::string& value)
static bool validAttribute (
std::string& name,
std::string& value,
Config& conf)
{
guess ("attribute", attributes, name);
if ((name == "fg" || name == "bg") && value != "")
guess ("color", colors, value);
else if (name == "due" && value != "")
validDate (value);
else if (name == "priority")
if (name != "")
{
for (std::string::iterator i = value.begin (); i != value.end (); ++i)
*i = ::toupper (*i);
if ((name == "fg" || name == "bg") && value != "")
guess ("color", colors, value);
return validPriority (value);
else if (name == "due" && value != "")
validDate (value, conf);
else if (name == "until" && value != "")
validDate (value, conf);
else if (name == "priority")
{
value = upperCase (value);
return validPriority (value);
}
// Some attributes are intended to be private.
else if (name == "entry" ||
name == "start" ||
name == "end" ||
name == "mask" ||
name == "imask")
throw std::string ("\"") +
name +
"\" is not an attribute you may modify directly.";
return true;
}
else if (name == "entry" ||
name == "start" ||
name == "end")
throw std::string ("\"") +
name +
"\" is not an attribute you may modify directly.";
return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
@@ -266,7 +305,7 @@ static bool validId (const std::string& input)
}
////////////////////////////////////////////////////////////////////////////////
static bool validTag (std::string& input)
static bool validTag (const std::string& input)
{
if ((input[0] == '-' || input[0] == '+') &&
input.length () > 1)
@@ -278,16 +317,28 @@ static bool validTag (std::string& input)
////////////////////////////////////////////////////////////////////////////////
static bool validDescription (const std::string& input)
{
if (input.length () > 0)
return true;
if (input.length () == 0) return false;
if (input.find ("\r") != std::string::npos) return false;
if (input.find ("\f") != std::string::npos) return false;
if (input.find ("\n") != std::string::npos) return false;
return false;
return true;
}
////////////////////////////////////////////////////////////////////////////////
static bool validCommand (std::string& input)
{
guess ("command", commands, input);
std::string copy = input;
guess ("command", commands, copy);
if (copy == "")
{
copy = input;
guess ("command", customReports, copy);
if (copy == "")
return false;
}
input = copy;
return true;
}
@@ -322,6 +373,12 @@ static bool validSubstitution (
return false;
}
////////////////////////////////////////////////////////////////////////////////
bool validDuration (std::string& input)
{
return (convertDuration (input) != 0) ? true : false;
}
////////////////////////////////////////////////////////////////////////////////
// Token Distinguishing characteristic
// ------- -----------------------------
@@ -335,7 +392,8 @@ static bool validSubstitution (
void parse (
std::vector <std::string>& args,
std::string& command,
T& task)
T& task,
Config& conf)
{
command = "";
@@ -343,59 +401,126 @@ void parse (
for (size_t i = 0; i < args.size (); ++i)
{
std::string arg (args[i]);
size_t colon; // Pointer to colon in argument.
std::string from;
std::string to;
// An id is the first argument found that contains all digits.
if (command != "add" && // "add" doesn't require an ID
task.getId () == 0 &&
validId (arg))
task.setId (::atoi (arg.c_str ()));
// Tags begin with + or - and contain arbitrary text.
else if (validTag (arg))
// Ignore any argument that is "rc:...", because that is the command line
// specified rc file.
if (arg.substr (0, 3) != "rc:")
{
if (arg[0] == '+')
task.addTag (arg.substr (1, std::string::npos));
else if (arg[0] == '-')
task.addRemoveTag (arg.substr (1, std::string::npos));
size_t colon; // Pointer to colon in argument.
std::string from;
std::string to;
// An id is the first argument found that contains all digits.
if (lowerCase (command) != "add" && // "add" doesn't require an ID
task.getId () == 0 &&
validId (arg))
task.setId (::atoi (arg.c_str ()));
// Tags begin with + or - and contain arbitrary text.
else if (validTag (arg))
{
if (arg[0] == '+')
task.addTag (arg.substr (1, std::string::npos));
else if (arg[0] == '-')
task.addRemoveTag (arg.substr (1, std::string::npos));
}
// Attributes contain a constant string followed by a colon, followed by a
// value.
else if ((colon = arg.find (":")) != std::string::npos)
{
std::string name = lowerCase (arg.substr (0, colon));
std::string value = arg.substr (colon + 1, std::string::npos);
if (validAttribute (name, value, conf))
{
if (name != "recur" || validDuration (value))
task.setAttribute (name, value);
}
// If it is not a valid attribute, then allow the argument as part of
// the description.
else
descCandidate += arg;
}
// Substitution of description text.
else if (validSubstitution (arg, from, to))
{
task.setSubstitution (from, to);
}
// Command.
else if (command == "")
{
std::string l = lowerCase (arg);
if (isCommand (l) && validCommand (l))
command = l;
else
{
if (descCandidate.length ())
descCandidate += " ";
descCandidate += std::string (arg);
}
}
// Anything else is just considered description.
else
{
if (descCandidate.length ())
descCandidate += " ";
descCandidate += std::string (arg);
}
}
// Attributes contain a constant string followed by a colon, followed by a
// value.
else if ((colon = arg.find (":")) != std::string::npos)
{
std::string name = arg.substr (0, colon);
std::string value = arg.substr (colon + 1, std::string::npos);
if (validAttribute (name, value))
task.setAttribute (name, value);
}
// Substitution of description text.
else if (validSubstitution (arg, from, to))
{
task.setSubstitution (from, to);
}
// Command.
else if (command == "")
{
if (!isCommand (arg))
descCandidate += std::string (arg) + " ";
else if (validCommand (arg))
command = arg;
}
// Anything else is just considered description.
else
descCandidate += std::string (arg) + " ";
}
if (task.getAttribute ("recur") != "" &&
task.getAttribute ("due") == "")
throw std::string ("You cannot specify a recurring task without a due date.");
if (task.getAttribute ("until") != "" &&
task.getAttribute ("recur") == "")
throw std::string ("You cannot specify an until date for a non-recurring task.");
if (validDescription (descCandidate))
task.setDescription (descCandidate);
}
////////////////////////////////////////////////////////////////////////////////
void loadCustomReports (Config& conf)
{
std::vector <std::string> all;
conf.all (all);
foreach (i, all)
{
if (i->substr (0, 7) == "report.")
{
std::string report = i->substr (7, std::string::npos);
std::string::size_type columns = report.find (".columns");
if (columns != std::string::npos)
{
report = report.substr (0, columns);
customReports.push_back (report);
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
bool isCustomReport (const std::string& report)
{
foreach (i, customReports)
if (*i == report)
return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
void allCustomReports (std::vector <std::string>& all)
{
all = customReports;
}
////////////////////////////////////////////////////////////////////////////////

2353
src/report.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -80,10 +80,14 @@ void initializeColorRules (Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
void autoColorize (T& task, Text::color& fg, Text::color& bg)
void autoColorize (
T& task,
Text::color& fg,
Text::color& bg,
Config& conf)
{
// Note: fg, bg already contain colors specifically assigned via command.
// TODO These rules form a hierarchy - the last rule is king.
// Note: These rules form a hierarchy - the last rule is King.
// Colorization of the tagged.
if (gsFg["color.tagged"] != Text::nocolor ||
@@ -153,29 +157,6 @@ void autoColorize (T& task, Text::color& fg, Text::color& bg)
}
}
// Colorization of the due and overdue.
std::string due = task.getAttribute ("due");
if (due != "")
{
Date dueDate (::atoi (due.c_str ()));
Date now;
Date then (now + 7 * 86400);
// Overdue
if (dueDate < now)
{
fg = gsFg["color.overdue"];
bg = gsBg["color.overdue"];
}
// Imminent
else if (dueDate < then)
{
fg = gsFg["color.due"];
bg = gsBg["color.due"];
}
}
// Colorization by tag value.
std::map <std::string, Text::color>::iterator it;
for (it = gsFg.begin (); it != gsFg.end (); ++it)
@@ -210,14 +191,49 @@ void autoColorize (T& task, Text::color& fg, Text::color& bg)
{
if (it->first.substr (0, 14) == "color.keyword.")
{
std::string value = it->first.substr (14, std::string::npos);
if (task.getDescription ().find (value) != std::string::npos)
std::string value = lowerCase (it->first.substr (14, std::string::npos));
std::string desc = lowerCase (task.getDescription ());
if (desc.find (value) != std::string::npos)
{
fg = gsFg[it->first];
bg = gsBg[it->first];
}
}
}
// Colorization of the due and overdue.
std::string due = task.getAttribute ("due");
if (due != "")
{
Date dueDate (::atoi (due.c_str ()));
Date now;
Date then (now + conf.get ("due", 7) * 86400);
// Overdue
if (dueDate < now)
{
fg = gsFg["color.overdue"];
bg = gsBg["color.overdue"];
}
// Imminent
else if (dueDate < then)
{
fg = gsFg["color.due"];
bg = gsBg["color.due"];
}
}
// Colorization of the recurring.
if (gsFg["color.recurring"] != Text::nocolor ||
gsBg["color.recurring"] != Text::nocolor)
{
if (task.getAttribute ("recur") != "")
{
fg = gsFg["color.recurring"];
bg = gsBg["color.recurring"];
}
}
}
////////////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2008, Paul Beckingham.
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -31,11 +31,16 @@
#include <sys/types.h>
#include "Config.h"
#include "Table.h"
#include "Date.h"
#include "color.h"
#include "TDB.h"
#include "T.h"
#include "../auto.h"
#ifndef min
#define min(a,b) ((a) < (b) ? (a) : (b))
#endif
#ifndef max
#define max(a,b) ((a) > (b) ? (a) : (b))
#endif
@@ -49,35 +54,56 @@ for (typeof (c) *foreach_p = & (c); \
++i)
// parse.cpp
void parse (std::vector <std::string>&, std::string&, T&);
bool validDate (std::string&);
void parse (std::vector <std::string>&, std::string&, T&, Config&);
bool validPriority (const std::string&);
bool validDate (std::string&, Config&);
void loadCustomReports (Config&);
bool isCustomReport (const std::string&);
void allCustomReports (std::vector <std::string>&);
// task.cpp
void handleAdd (const TDB&, T&, Config&);
void handleProjects (const TDB&, T&, Config&);
void handleTags (const TDB&, T&, Config&);
void handleList (const TDB&, T&, Config&);
void handleInfo (const TDB&, T&, Config&);
void handleLongList (const TDB&, T&, Config&);
void handleSmallList (const TDB&, T&, Config&);
void handleCompleted (const TDB&, T&, Config&);
void handleReportSummary (const TDB&, T&, Config&);
void handleReportNext (const TDB&, T&, Config&);
void handleReportHistory (const TDB&, T&, Config&);
void handleReportUsage (const TDB&, T&, Config&);
void handleReportCalendar (const TDB&, T&, Config&);
void handleReportActive (const TDB&, T&, Config&);
void handleReportOverdue (const TDB&, T&, Config&);
void handleReportStats (const TDB&, T&, Config&);
void handleVersion (Config&);
void handleExport (const TDB&, T&, Config&);
void handleDelete (const TDB&, T&, Config&);
void handleStart (const TDB&, T&, Config&);
void handleDone (const TDB&, T&, Config&);
void handleModify (const TDB&, T&, Config&);
void handleColor (Config&);
void gatherNextTasks (const TDB&, T&, Config&, std::vector <T>&, std::vector <int>&);
void nag (const TDB&, T&, Config&);
void nag (TDB&, T&, Config&);
int getDueState (const std::string&);
void handleRecurrence (TDB&, std::vector <T>&);
bool generateDueDates (T&, std::vector <Date>&);
Date getNextRecurrence (Date&, std::string&);
void updateRecurrenceMask (TDB&, std::vector <T>&, T&);
void onChangeCallback ();
std::string runTaskCommand (int, char**, TDB&, Config&, bool gc = true, bool shadow = true);
std::string runTaskCommand (std::vector <std::string>&, TDB&, Config&, bool gc = false, bool shadow = false);
// command.cpp
std::string handleAdd (TDB&, T&, Config&);
std::string handleExport (TDB&, T&, Config&);
std::string handleDone (TDB&, T&, Config&);
std::string handleModify (TDB&, T&, Config&);
std::string handleProjects (TDB&, T&, Config&);
std::string handleTags (TDB&, T&, Config&);
std::string handleUndelete (TDB&, T&, Config&);
std::string handleVersion (Config&);
std::string handleDelete (TDB&, T&, Config&);
std::string handleStart (TDB&, T&, Config&);
std::string handleStop (TDB&, T&, Config&);
std::string handleUndo (TDB&, T&, Config&);
std::string handleColor (Config&);
// report.cpp
void filter (std::vector<T>&, T&);
std::string handleInfo (TDB&, T&, Config&);
std::string handleCompleted (TDB&, T&, Config&);
std::string handleReportSummary (TDB&, T&, Config&);
std::string handleReportNext (TDB&, T&, Config&);
std::string handleReportHistory (TDB&, T&, Config&);
std::string handleReportGHistory (TDB&, T&, Config&);
std::string handleReportCalendar (TDB&, T&, Config&);
std::string handleReportActive (TDB&, T&, Config&);
std::string handleReportOverdue (TDB&, T&, Config&);
std::string handleReportStats (TDB&, T&, Config&);
std::string handleCustomReport (TDB&, T&, Config&, const std::string&);
void validReportColumns (const std::vector <std::string>&);
void validSortColumns (const std::vector <std::string>&, const std::vector <std::string>&);
// util.cpp
bool confirm (const std::string&);
@@ -92,14 +118,27 @@ void split (std::vector<std::string>&, const std::string&, const std::string&);
void join (std::string&, const std::string&, const std::vector<std::string>&);
std::string commify (const std::string&);
std::string lowerCase (const std::string&);
std::string upperCase (const std::string&);
void delay (float);
int autoComplete (const std::string&, const std::vector<std::string>&, std::vector<std::string>&);
void formatTimeDeltaDays (std::string&, time_t);
std::string formatSeconds (time_t);
const std::string uuid ();
const char* optionalBlankLine (Config&);
int convertDuration (const std::string&);
std::string expandPath (const std::string&);
#ifdef SOLARIS
#define LOCK_SH 1
#define LOCK_EX 2
#define LOCK_NB 4
#define LOCK_UN 8
int flock (int, int);
#endif
// rules.cpp
void initializeColorRules (Config&);
void autoColorize (T&, Text::color&, Text::color&);
void autoColorize (T&, Text::color&, Text::color&, Config&);
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,5 +1,6 @@
t.t
t.benchmark.t
tdb.t
pending.data
completed.data
date.t
duration.t

34
src/tests/Makefile Normal file
View File

@@ -0,0 +1,34 @@
PROJECT = t.t tdb.t date.t duration.t t.benchmark.t
CFLAGS = -I. -I.. -Wall -pedantic -ggdb3 -fno-rtti
LFLAGS = -L/usr/local/lib
OBJECTS = ../TDB.o ../T.o ../parse.o ../text.o ../Date.o ../util.o ../Config.o
all: $(PROJECT)
install: $(PROJECT)
@echo unimplemented
test: $(PROJECT)
@echo unimplemented
clean:
-rm *.o $(PROJECT)
.cpp.o:
g++ -c $(CFLAGS) $<
t.t: t.t.o $(OBJECTS) test.o
g++ t.t.o $(OBJECTS) test.o $(LFLAGS) -o t.t
tdb.t: tdb.t.o $(OBJECTS) test.o
g++ tdb.t.o $(OBJECTS) test.o $(LFLAGS) -o tdb.t
date.t: date.t.o $(OBJECTS) test.o
g++ date.t.o $(OBJECTS) test.o $(LFLAGS) -o date.t
duration.t: duration.t.o $(OBJECTS) test.o
g++ duration.t.o $(OBJECTS) test.o $(LFLAGS) -o duration.t
t.benchmark.t: t.benchmark.t.o $(OBJECTS) test.o
g++ t.benchmark.t.o $(OBJECTS) test.o $(LFLAGS) -o t.benchmark.t

99
src/tests/abbreviation.t Executable file
View File

@@ -0,0 +1,99 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 22;
# Create the rc file.
if (open my $fh, '>', 'abbrev.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'abbrev.rc', 'Created abbrev.rc');
}
# Test the priority attribute abbrevations.
qx{../task rc:abbrev.rc add priority:H with};
qx{../task rc:abbrev.rc add without};
my $output = qx{../task rc:abbrev.rc list priority:H};
like ($output, qr/\bwith\b/, 'priority:H with');
unlike ($output, qr/\bwithout\b/, 'priority:H without');
$output = qx{../task rc:abbrev.rc list priorit:H};
like ($output, qr/\bwith\b/, 'priorit:H with');
unlike ($output, qr/\bwithout\b/, 'priorit:H without');
$output = qx{../task rc:abbrev.rc list priori:H};
like ($output, qr/\bwith\b/, 'priori:H with');
unlike ($output, qr/\bwithout\b/, 'priori:H without');
$output = qx{../task rc:abbrev.rc list prior:H};
like ($output, qr/\bwith\b/, 'prior:H with');
unlike ($output, qr/\bwithout\b/, 'prior:H without');
$output = qx{../task rc:abbrev.rc list prio:H};
like ($output, qr/\bwith\b/, 'prio:H with');
unlike ($output, qr/\bwithout\b/, 'prio:H without');
$output = qx{../task rc:abbrev.rc list pri:H};
like ($output, qr/\bwith\b/, 'pri:H with');
unlike ($output, qr/\bwithout\b/, 'pri:H without');
# Test the version command abbreviations.
$output = qx{../task rc:abbrev.rc version};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'version');
$output = qx{../task rc:abbrev.rc versio};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'versio');
$output = qx{../task rc:abbrev.rc versi};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'versi');
$output = qx{../task rc:abbrev.rc vers};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'vers');
$output = qx{../task rc:abbrev.rc ver};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'ver');
$output = qx{../task rc:abbrev.rc ve};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 've');
$output = qx{../task rc:abbrev.rc v};
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'v');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'abbrev.rc';
ok (!-r 'abbrev.rc', 'Removed abbrev.rc');
exit 0;

72
src/tests/add.t Executable file
View File

@@ -0,0 +1,72 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 14;
# Create the rc file.
if (open my $fh, '>', 'add.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'add.rc', 'Created add.rc');
}
# Test the add command.
my $output = qx{../task rc:add.rc add This is a test; ../task rc:add.rc info 1};
like ($output, qr/ID\s+1\n/, 'add ID');
like ($output, qr/Description\s+This is a test\n/, 'add ID');
like ($output, qr/Status\s+Pending\n/, 'add Pending');
like ($output, qr/UUID\s+[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\n/, 'add UUID');
# Test the /// modifier.
$output = qx{../task rc:add.rc 1 /test/TEST/; ../task rc:add.rc 1 "/is //"; ../task rc:add.rc info 1};
like ($output, qr/ID\s+1\n/, 'add ID');
like ($output, qr/Status\s+Pending\n/, 'add Pending');
like ($output, qr/Description\s+This a TEST\n/, 'add ID');
# Test delete.
$output = qx{../task rc:add.rc delete 1; ../task rc:add.rc info 1};
like ($output, qr/ID\s+1\n/, 'add ID');
like ($output, qr/Status\s+Deleted\n/, 'add Deleted');
# Test undelete.
$output = qx{../task rc:add.rc undelete 1; ../task rc:add.rc info 1};
like ($output, qr/ID\s+1\n/, 'add ID');
like ($output, qr/Status\s+Pending\n/, 'add Pending');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'add.rc';
ok (!-r 'add.rc', 'Removed add.rc');
exit 0;

57
src/tests/basic.t Executable file
View File

@@ -0,0 +1,57 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 7;
# Create the rc file.
if (open my $fh, '>', 'basic.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'basic.rc', 'Created basic.rc');
}
# Test the usage command.
my $output = qx{../task rc:basic.rc};
like ($output, qr/Usage: task/, 'usage');
like ($output, qr/http:\/\/www\.beckingham\.net\/task\.html/, 'usage - url');
# Test the version command.
$output = qx{../task rc:basic.rc version};
like ($output, qr/task \d+\.\d+\.\d+/, 'version - task version number');
like ($output, qr/ABSOLUTELY NO WARRANTY/, 'version - warranty');
like ($output, qr/http:\/\/www\.beckingham\.net\/task\.html/, 'version - url');
# Cleanup.
unlink 'basic.rc';
ok (!-r 'basic.rc', 'Removed basic.rc');
exit 0;

103
src/tests/benchmark.t Executable file
View File

@@ -0,0 +1,103 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 4;
# Create the rc file.
if (open my $fh, '>', 'bench.rc')
{
print $fh "data.location=.\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'bench.rc', 'Created bench.rc');
}
# Do lots of things. Time it all.
my @tags = qw(t_one t_two t_three t_four t_five t_six t_seven t_eight);
my @projects = qw(p_one p_two p_three p_foud p_five p_six p_seven p_eight);
my @priorities = qw(H M L);
my $description = 'This is a medium-sized description with no special characters';
# Start the clock.
my $start = time ();
my $cursor = $start;
diag ("start=$start");
# Make a mess.
for my $i (1 .. 1000)
{
my $project = $projects[rand % 8];
my $priority = $priorities[rand % 3];
my $tag = $tags[rand % 8];
qx{../task rc:bench.rc add project:$project priority:$priority +$tag $i $description};
}
diag ("1000 tasks added in " . (time () - $cursor) . " seconds");
$cursor = time ();
qx{../task rc:bench.rc /with/WITH/} for 1 .. 200;
qx{../task rc:bench.rc done $_} for 201 .. 400;
qx{../task rc:bench.rc start $_} for 401 .. 600;
diag ("600 tasks altered in " . (time () - $cursor) . " seconds");
$cursor = time ();
# Report it all. Note that all Timer information is displayed.
for (1 .. 100)
{
diag (grep {/^Timer /} qx{../task rc:bench.rc ls});
diag (grep {/^Timer /} qx{../task rc:bench.rc list});
diag (grep {/^Timer /} qx{../task rc:bench.rc list priority:H});
diag (grep {/^Timer /} qx{../task rc:bench.rc list +tag});
diag (grep {/^Timer /} qx{../task rc:bench.rc list project_A});
diag (grep {/^Timer /} qx{../task rc:bench.rc long});
diag (grep {/^Timer /} qx{../task rc:bench.rc completed});
diag (grep {/^Timer /} qx{../task rc:bench.rc history});
diag (grep {/^Timer /} qx{../task rc:bench.rc ghistory});
}
# Stop the clock.
my $stop = time ();
diag ("stop=$stop");
diag ("total=" . ($stop - $start));
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'completed.data';
ok (!-r 'completed.data', 'Removed completed.data');
unlink 'bench.rc';
ok (!-r 'bench.rc', 'Removed bench.rc');
exit 0;

40
src/tests/benchmark.txt Normal file
View File

@@ -0,0 +1,40 @@
3/8/2009
Before:
Table::render
26.1792
16.67
18.9697
28.6328
1.86553
0.00044
0.000319
---------
92.317989
After Table::optimize removed:
Table::render
0.146177
0.145928
0.184444
0.014784
0.000512
0.000267
---------
0.492112
Speedup:
92.317989 / 0.492112 = 187.6
3/8/2009
New benchmark:
1..4
ok 1 - Created bench.rc
# start=1236565862
# 1000 tasks added in 3 seconds
# 600 tasks altered in 28 seconds
# stop=1236566048
# total=186
ok 2 - Removed pending.data
ok 3 - Removed completed.data
ok 4 - Removed bench.rc

66
src/tests/bug.concat.t Executable file
View File

@@ -0,0 +1,66 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'bug_concat.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'bug_concat.rc', 'Created bug_concat.rc');
}
# When a task is modified like this:
#
# % task 1 This is a new description
#
# The arguments are concatenated thus:
#
# Thisisanewdescription
qx{../task rc:bug_concat.rc add This is the original text};
my $output = qx{../task rc:bug_concat.rc info 1};
like ($output, qr/Description\s+This is the original text\n/, 'original correct');
qx{../task rc:bug_concat.rc 1 This is the modified text};
$output = qx{../task rc:bug_concat.rc info 1};
like ($output, qr/Description\s+This is the modified text\n/, 'modified correct');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'bug_concat.rc';
ok (!-r 'bug_concat.rc', 'Removed bug_concat.rc');
exit 0;

83
src/tests/bug.hang.t Executable file
View File

@@ -0,0 +1,83 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'hang.rc')
{
print $fh "data.location=.\n",
"shadow.file=shadow.txt\n",
"shadow.command=list\n";
close $fh;
ok (-r 'hang.rc', 'Created hang.rc');
}
=pod
I found a bug in the current version of task. Using recur and a shadow file will
lead to an infinite loop. To reproduce it, define a shadow file in the .taskrc,
set a command for it that rebuilds the database, e.g. "list", and then add a
task with a recurrence set, e.g. "task add due:today recur:1d infinite loop".
Task will then loop forever and add the same recurring task until it runs out of
memory. So I checked the source and I believe I found the cause.
handleRecurrence() in task.cpp will modify the mask, but writes it only after it
has added all new tasks. Adding the task will, however, invoke onChangeCallback,
which starts the same process all over again.
=cut
eval
{
$SIG{'ALRM'} = sub {die "alarm\n"};
alarm 10;
my $output = qx{../task rc:hang.rc list;
../task rc:hang.rc add due:today recur:1d infinite loop;
../task rc:hang.rc info 1};
alarm 0;
like ($output, qr/^Description\s+infinite loop\n/m, 'no hang');
};
if ($@ eq "alarm\n")
{
fail ('task hang on add or recurring task, with shadow file, for 10s');
}
# Cleanup.
unlink 'shadow.txt';
ok (!-r 'shadow.txt', 'Removed shadow.txt');
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'hang.rc';
ok (!-r 'hang.rc', 'Removed hang.rc');
exit 0;

164
src/tests/bug.period.t Executable file
View File

@@ -0,0 +1,164 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 41;
# Create the rc file.
if (open my $fh, '>', 'period.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'period.rc', 'Created period.rc');
}
=pod
http://github.com/pbeckingham/task/blob/857f813a24f7ce15fea9f2c28aadad84cb5c8847/src/task.cpp
619 // If the period is an 'easy' one, add it to current, and we're done.
620 int days = convertDuration (period);
Date getNextRecurrence (Date& current, std::string& period)
starting at line 509 special cases several possibilities for period, '\d\s?m'
'monthly', 'quarterly', 'semiannual', 'bimonthly', 'biannual', 'biyearly'.
Everything else falls through with period being passed to convertDuration.
convertDuration doesn't know about 'daily' though so it seems to be returning 0.
Confirmed:
getNextRecurrence convertDuration
----------------- ---------------
daily
day
weekly
sennight
biweekly
fortnight
monthly monthly
quarterly quarterly
semiannual semiannual
bimonthly bimonthly
biannual biannual
biyearly biyearly
annual
yearly
*m *m
*q *q
*d
*w
*y
=cut
my $output = qx{../task rc:period.rc add daily due:tomorrow recur:daily};
like ($output, qr/^$/, 'recur:daily');
$output = qx{../task rc:period.rc add day due:tomorrow recur:day};
like ($output, qr/^$/, 'recur:day');
$output = qx{../task rc:period.rc add weekly due:tomorrow recur:weekly};
like ($output, qr/^$/, 'recur:weekly');
$output = qx{../task rc:period.rc add sennight due:tomorrow recur:sennight};
like ($output, qr/^$/, 'recur:sennight');
$output = qx{../task rc:period.rc add biweekly due:tomorrow recur:biweekly};
like ($output, qr/^$/, 'recur:biweekly');
$output = qx{../task rc:period.rc add fortnight due:tomorrow recur:fortnight};
like ($output, qr/^$/, 'recur:fortnight');
$output = qx{../task rc:period.rc add monthly due:tomorrow recur:monthly};
like ($output, qr/^$/, 'recur:monthly');
$output = qx{../task rc:period.rc add quarterly due:tomorrow recur:quarterly};
like ($output, qr/^$/, 'recur:quarterly');
$output = qx{../task rc:period.rc add semiannual due:tomorrow recur:semiannual};
like ($output, qr/^$/, 'recur:semiannual');
$output = qx{../task rc:period.rc add bimonthly due:tomorrow recur:bimonthly};
like ($output, qr/^$/, 'recur:bimonthly');
$output = qx{../task rc:period.rc add biannual due:tomorrow recur:biannual};
like ($output, qr/^$/, 'recur:biannual');
$output = qx{../task rc:period.rc add biyearly due:tomorrow recur:biyearly};
like ($output, qr/^$/, 'recur:biyearly');
$output = qx{../task rc:period.rc add annual due:tomorrow recur:annual};
like ($output, qr/^$/, 'recur:annual');
$output = qx{../task rc:period.rc add yearly due:tomorrow recur:yearly};
like ($output, qr/^$/, 'recur:yearly');
$output = qx{../task rc:period.rc add 2d due:tomorrow recur:2d};
like ($output, qr/^$/, 'recur:2m');
$output = qx{../task rc:period.rc add 2w due:tomorrow recur:2w};
like ($output, qr/^$/, 'recur:2q');
$output = qx{../task rc:period.rc add 2m due:tomorrow recur:2m};
like ($output, qr/^$/, 'recur:2d');
$output = qx{../task rc:period.rc add 2q due:tomorrow recur:2q};
like ($output, qr/^$/, 'recur:2w');
$output = qx{../task rc:period.rc add 2y due:tomorrow recur:2y};
like ($output, qr/^$/, 'recur:2y');
# Verify that the recurring task instances get created. One of each.
$output = qx{../task rc:period.rc list};
like ($output, qr/\bdaily\b/, 'verify daily');
like ($output, qr/\bday\b/, 'verify day');
like ($output, qr/\bweekly\b/, 'verify weekly');
like ($output, qr/\bsennight\b/, 'verify sennight');
like ($output, qr/\bbiweekly\b/, 'verify biweekly');
like ($output, qr/\bfortnight\b/, 'verify fortnight');
like ($output, qr/\bmonthly\b/, 'verify monthly');
like ($output, qr/\bquarterly\b/, 'verify quarterly');
like ($output, qr/\bsemiannual\b/, 'verify semiannual');
like ($output, qr/\bbimonthly\b/, 'verify bimonthly');
like ($output, qr/\bbiannual\b/, 'verify biannual');
like ($output, qr/\bbiyearly\b/, 'verify biyearly');
like ($output, qr/\bannual\b/, 'verify annual');
like ($output, qr/\byearly\b/, 'verify yearly');
like ($output, qr/\b2d\b/, 'verify 2d');
like ($output, qr/\b2w\b/, 'verify 2w');
like ($output, qr/\b2m\b/, 'verify 2m');
like ($output, qr/\b2q\b/, 'verify 2q');
like ($output, qr/\b2y\b/, 'verify 2y');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'period.rc';
ok (!-r 'period.rc', 'Removed period.rc');
exit 0;

61
src/tests/bug.sort.t Executable file
View File

@@ -0,0 +1,61 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'bug_sort.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'bug_sort.rc', 'Created bug_sort.rc');
}
my $setup = "../task rc:bug_sort.rc add one;"
. "../task rc:bug_sort.rc add two;"
. "../task rc:bug_sort.rc add three recur:daily due:eom;";
qx{$setup};
my $output = qx{../task rc:bug_sort.rc list};
like ($output, qr/three.*(?:one.*two|two.*one)/msi, 'list did not hang');
qx{../task rc:bug_sort.rc 1 priority:H};
$output = qx{../task rc:bug_sort.rc list};
like ($output, qr/three.*one.*two/msi, 'list did not hang after pri:H on 1');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'bug_sort.rc';
ok (!-r 'bug_sort.rc', 'Removed bug_sort.rc');
exit 0;

67
src/tests/bug.summary.t Executable file
View File

@@ -0,0 +1,67 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 6;
# Create the rc file.
if (open my $fh, '>', 'summary.rc')
{
print $fh "data.location=.\n",
"confirmation=no\n";
close $fh;
ok (-r 'summary.rc', 'Created summary.rc');
}
# Add three tasks. Do 1, delete 1, leave 1 pending. Summary should depict a
# 50% completion.
qx{../task rc:summary.rc add project:A one};
qx{../task rc:summary.rc add project:A two};
qx{../task rc:summary.rc add project:A three};
qx{../task rc:summary.rc do 1};
qx{../task rc:summary.rc delete 2};
my $output = qx{../task rc:summary.rc summary};
like ($output, qr/A\s+1\s+-\s+50%/, 'summary correctly shows 50% before report');
qx{../task rc:summary.rc list};
$output = qx{../task rc:summary.rc summary};
like ($output, qr/A\s+1\s+-\s+50%/, 'summary correctly shows 50% after report');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'completed.data';
ok (!-r 'completed.data', 'Removed completed.data');
unlink 'summary.rc';
ok (!-r 'summary.rc', 'Removed summary.rc');
exit 0;

60
src/tests/color.active.t Executable file
View File

@@ -0,0 +1,60 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.active=red\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add nothing};
qx{../task rc:color.rc add red};
qx{../task rc:color.rc start 2};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) .* nothing .* (?!>\033\[0m) /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.active');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

58
src/tests/color.disable.t Executable file
View File

@@ -0,0 +1,58 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 6;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.pri.H=red\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add priority:H red};
my $output = qx{../task rc:color.rc list};
like ($output, qr/red/, 'color.disable - found red');
unlike ($output, qr/\033\[31m/, 'color.disable - no color red');
unlike ($output, qr/\033\[0m/, 'color.disable - no color reset');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

59
src/tests/color.due.t Executable file
View File

@@ -0,0 +1,59 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.due=red\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add due:eoy nothing};
qx{../task rc:color.rc add due:tomorrow red};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) \d{1,2}\/\d{1,2}\/\d{4} (?!>\033\[0m) .* nothing /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m/x, 'color.due');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

62
src/tests/color.keyword.t Executable file
View File

@@ -0,0 +1,62 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 6;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.keyword.red=red\n",
"color.keyword.green=green\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add nothing};
qx{../task rc:color.rc add red};
qx{../task rc:color.rc add green};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) .* nothing .* (?!>\033\[0m) /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.keyword.red');
like ($output, qr/ \033\[32m .* green .* \033\[0m /x, 'color.keyword.green');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

59
src/tests/color.overdue.t Executable file
View File

@@ -0,0 +1,59 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.overdue=red\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add due:tomorrow nothing};
qx{../task rc:color.rc add due:yesterday red};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) \d{1,2}\/\d{1,2}\/\d{4} (?!>\033\[0m) .* nothing /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m/x, 'color.overdue');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

66
src/tests/color.pri.t Executable file
View File

@@ -0,0 +1,66 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 7;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.pri.H=red\n",
"color.pri.M=green\n",
"color.pri.L=blue\n",
"color.pri.none=yellow\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add priority:H red};
qx{../task rc:color.rc add priority:M green};
qx{../task rc:color.rc add priority:L blue};
qx{../task rc:color.rc add yellow};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.pri.H');
like ($output, qr/ \033\[32m .* green .* \033\[0m /x, 'color.pri.M');
like ($output, qr/ \033\[34m .* blue .* \033\[0m /x, 'color.pri.L');
like ($output, qr/ \033\[33m .* yellow .* \033\[0m /x, 'color.pri.none');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

59
src/tests/color.project.t Executable file
View File

@@ -0,0 +1,59 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.project.x=red\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add nothing};
qx{../task rc:color.rc add project:x red};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) .* nothing .* (?!>\033\[0m) /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.project.red');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

59
src/tests/color.recurring.t Executable file
View File

@@ -0,0 +1,59 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.recurring=red\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add nothing};
qx{../task rc:color.rc add due:tomorrow recur:1w red};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) .* nothing .* (?!>\033\[0m) /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.recurring');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

62
src/tests/color.tag.t Executable file
View File

@@ -0,0 +1,62 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 6;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.tag.red=red\n",
"color.tag.green=green\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add nothing};
qx{../task rc:color.rc add +red red};
qx{../task rc:color.rc add +green green};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) .* nothing .* (?!>\033\[0m) /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.tag.red');
like ($output, qr/ \033\[32m .* green .* \033\[0m /x, 'color.tag.green');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

59
src/tests/color.tagged.t Executable file
View File

@@ -0,0 +1,59 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'color.rc')
{
print $fh "data.location=.\n",
"color.tagged=red\n",
"_forcecolor=1\n";
close $fh;
ok (-r 'color.rc', 'Created color.rc');
}
# Test the add command.
qx{../task rc:color.rc add nothing};
qx{../task rc:color.rc add +tag red};
my $output = qx{../task rc:color.rc list};
like ($output, qr/ (?!<\033\[\d\dm) .* nothing .* (?!>\033\[0m) /x, 'none');
like ($output, qr/ \033\[31m .* red .* \033\[0m /x, 'color.tagged');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'color.rc';
ok (!-r 'color.rc', 'Removed color.rc');
exit 0;

64
src/tests/completed.t Executable file
View File

@@ -0,0 +1,64 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 6;
# Create the rc file.
if (open my $fh, '>', 'completed.rc')
{
print $fh "data.location=.\n",
"confirmation=no\n";
close $fh;
ok (-r 'completed.rc', 'Created completed.rc');
}
# Add two tasks, mark 1 as done, the other as deleted.
qx{../task rc:completed.rc add one};
qx{../task rc:completed.rc add two};
qx{../task rc:completed.rc 1 done};
qx{../task rc:completed.rc 2 delete};
# Generate completed report.
my $output = qx{../task rc:completed.rc completed};
like ($output, qr/one/, 'one -> completed');
unlike ($output, qr/two/, 'two -> deleted');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'completed.data';
ok (!-r 'completed.data', 'Removed completed.data');
unlink 'completed.rc';
ok (!-r 'completed.rc', 'Removed completed.rc');
exit 0;

57
src/tests/config.obsolete.t Executable file
View File

@@ -0,0 +1,57 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 5;
# Create the rc file.
if (open my $fh, '>', 'obsolete.rc')
{
print $fh "data.location=.\n",
"foo=1\n";
close $fh;
ok (-r 'obsolete.rc', 'Created obsolete.rc');
}
# Test the add command.
my $output = qx{../task rc:obsolete.rc version};
like ($output, qr/Your .taskrc file contains these unrecognized variables:\n/,
'unsupported configuration variable');
like ($output, qr/ foo\n/, 'unsupported configuration variable');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'obsolete.rc';
ok (!-r 'obsolete.rc', 'Removed obsolete.rc');
exit 0;

57
src/tests/custom.columns.t Executable file
View File

@@ -0,0 +1,57 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 4;
# Create the rc file.
if (open my $fh, '>', 'custom.rc')
{
print $fh "data.location=.\n",
"report.foo.description=DESC\n",
"report.foo.columns=id,foo,description\n",
"report.foo.sort=id+\n",
"report.foo.filter=project:A\n";
close $fh;
ok (-r 'custom.rc', 'Created custom.rc');
}
# Generate the usage screen, and locate the custom report on it.
my $output = qx{../task rc:custom.rc foo 2>&1};
like ($output, qr/Unrecognized column name: foo\n/, 'custom report spotted invalid column');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'custom.rc';
ok (!-r 'custom.rc', 'Removed custom.rc');
exit 0;

63
src/tests/custom.t Executable file
View File

@@ -0,0 +1,63 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 6;
# Create the rc file.
if (open my $fh, '>', 'custom.rc')
{
print $fh "data.location=.\n",
"report.foo.description=DESC\n",
"report.foo.columns=id,description\n",
"report.foo.sort=id+\n",
"report.foo.filter=project:A\n";
close $fh;
ok (-r 'custom.rc', 'Created custom.rc');
}
# Generate the usage screen, and locate the custom report on it.
my $output = qx{../task rc:custom.rc usage};
like ($output, qr/task foo \[tags\] \[attrs\] desc\.\.\.\s+DESC\n/m, 'report.foo');
qx{../task rc:custom.rc add project:A one};
qx{../task rc:custom.rc add two};
$output = qx{../task rc:custom.rc foo};
like ($output, qr/one/, 'custom filter included');
unlike ($output, qr/two/, 'custom filter excluded');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'custom.rc';
ok (!-r 'custom.rc', 'Removed custom.rc');
exit 0;

248
src/tests/date.t.cpp Normal file
View File

@@ -0,0 +1,248 @@
////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager.
//
// Copyright 2006 - 2009, Paul Beckingham.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor,
// Boston, MA
// 02110-1301
// USA
//
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <Date.h>
#include <test.h>
////////////////////////////////////////////////////////////////////////////////
int main (int argc, char** argv)
{
UnitTest t (100);
try
{
Date now;
Date yesterday;
yesterday -= 1;
t.ok (yesterday <= now, "yesterday <= now");
t.ok (yesterday < now, "yesterday < now");
t.notok (yesterday == now, "!(yesterday == now)");
t.ok (yesterday != now, "yesterday != now");
t.ok (now >= yesterday, "now >= yesterday");
t.ok (now > yesterday, "now > yesterday");
// Loose comparisons.
Date left ("7/4/2008");
Date comp1 ("7/4/2008");
t.ok (left.sameDay (comp1), "7/4/2008 is on the same day as 7/4/2008");
t.ok (left.sameMonth (comp1), "7/4/2008 is in the same month as 7/4/2008");
t.ok (left.sameYear (comp1), "7/4/2008 is in the same year as 7/4/2008");
Date comp2 ("7/5/2008");
t.notok (left.sameDay (comp2), "7/4/2008 is not on the same day as 7/5/2008");
t.ok (left.sameMonth (comp2), "7/4/2008 is in the same month as 7/5/2008");
t.ok (left.sameYear (comp2), "7/4/2008 is in the same year as 7/5/2008");
Date comp3 ("8/4/2008");
t.notok (left.sameDay (comp3), "7/4/2008 is not on the same day as 8/4/2008");
t.notok (left.sameMonth (comp3), "7/4/2008 is not in the same month as 8/4/2008");
t.ok (left.sameYear (comp3), "7/4/2008 is in the same year as 8/4/2008");
Date comp4 ("7/4/2009");
t.notok (left.sameDay (comp4), "7/4/2008 is not on the same day as 7/4/2009");
t.notok (left.sameMonth (comp4), "7/4/2008 is not in the same month as 7/4/2009");
t.notok (left.sameYear (comp4), "7/4/2008 is not in the same year as 7/4/2009");
// Validity.
t.ok (Date::valid (2, 29, 2008), "valid: 2/29/2008");
t.notok (Date::valid (2, 29, 2007), "invalid: 2/29/2007");
// Leap year.
t.ok (Date::leapYear (2008), "2008 is a leap year");
t.notok (Date::leapYear (2007), "2007 is not a leap year");
t.ok (Date::leapYear (2000), "2000 is a leap year");
t.ok (Date::leapYear (1900), "1900 is a leap year");
// Days in month.
t.is (Date::daysInMonth (2, 2008), 29, "29 days in February 2008");
t.is (Date::daysInMonth (2, 2007), 28, "28 days in February 2007");
// Names.
t.is (Date::monthName (1), "January", "1 = January");
t.is (Date::monthName (2), "February", "2 = February");
t.is (Date::monthName (3), "March", "3 = March");
t.is (Date::monthName (4), "April", "4 = April");
t.is (Date::monthName (5), "May", "5 = May");
t.is (Date::monthName (6), "June", "6 = June");
t.is (Date::monthName (7), "July", "7 = July");
t.is (Date::monthName (8), "August", "8 = August");
t.is (Date::monthName (9), "September", "9 = September");
t.is (Date::monthName (10), "October", "10 = October");
t.is (Date::monthName (11), "November", "11 = November");
t.is (Date::monthName (12), "December", "12 = December");
t.is (Date::dayName (0), "Sunday", "0 == Sunday");
t.is (Date::dayName (1), "Monday", "1 == Monday");
t.is (Date::dayName (2), "Tuesday", "2 == Tuesday");
t.is (Date::dayName (3), "Wednesday", "3 == Wednesday");
t.is (Date::dayName (4), "Thursday", "4 == Thursday");
t.is (Date::dayName (5), "Friday", "5 == Friday");
t.is (Date::dayName (6), "Saturday", "6 == Saturday");
t.is (Date::dayOfWeek ("SUNDAY"), 0, "SUNDAY == 0");
t.is (Date::dayOfWeek ("sunday"), 0, "sunday == 0");
t.is (Date::dayOfWeek ("Sunday"), 0, "Sunday == 0");
t.is (Date::dayOfWeek ("Monday"), 1, "Monday == 1");
t.is (Date::dayOfWeek ("Tuesday"), 2, "Tuesday == 2");
t.is (Date::dayOfWeek ("Wednesday"), 3, "Wednesday == 3");
t.is (Date::dayOfWeek ("Thursday"), 4, "Thursday == 4");
t.is (Date::dayOfWeek ("Friday"), 5, "Friday == 5");
t.is (Date::dayOfWeek ("Saturday"), 6, "Saturday == 6");
Date happyNewYear (1, 1, 2008);
t.is (happyNewYear.dayOfWeek (), 2, "1/1/2008 == Tuesday");
t.is (happyNewYear.month (), 1, "1/1/2008 == January");
t.is (happyNewYear.day (), 1, "1/1/2008 == 1");
t.is (happyNewYear.year (), 2008, "1/1/2008 == 2008");
t.is (now - yesterday, 1, "today - yesterday == 1");
t.is (happyNewYear.toString (), "1/1/2008", "toString 1/1/2008");
int m, d, y;
happyNewYear.toMDY (m, d, y);
t.is (m, 1, "1/1/2008 == January");
t.is (d, 1, "1/1/2008 == 1");
t.is (y, 2008, "1/1/2008 == 2008");
Date epoch (9, 8, 2001);
t.ok ((int)epoch.toEpoch () < 1000000000, "9/8/2001 < 1,000,000,000");
epoch += 86400;
t.ok ((int)epoch.toEpoch () > 1000000000, "9/9/2001 > 1,000,000,000");
Date fromEpoch (epoch.toEpoch ());
t.is (fromEpoch.toString (), epoch.toString (), "ctor (time_t)");
// Date parsing.
Date fromString1 ("1/1/2008");
t.is (fromString1.month (), 1, "ctor (std::string) -> m");
t.is (fromString1.day (), 1, "ctor (std::string) -> d");
t.is (fromString1.year (), 2008, "ctor (std::string) -> y");
Date fromString2 ("1/1/2008", "m/d/Y");
t.is (fromString2.month (), 1, "ctor (std::string) -> m");
t.is (fromString2.day (), 1, "ctor (std::string) -> d");
t.is (fromString2.year (), 2008, "ctor (std::string) -> y");
Date fromString3 ("20080101", "YMD");
t.is (fromString3.month (), 1, "ctor (std::string) -> m");
t.is (fromString3.day (), 1, "ctor (std::string) -> d");
t.is (fromString3.year (), 2008, "ctor (std::string) -> y");
Date fromString4 ("12/31/2007");
t.is (fromString4.month (), 12, "ctor (std::string) -> m");
t.is (fromString4.day (), 31, "ctor (std::string) -> d");
t.is (fromString4.year (), 2007, "ctor (std::string) -> y");
Date fromString5 ("12/31/2007", "m/d/Y");
t.is (fromString5.month (), 12, "ctor (std::string) -> m");
t.is (fromString5.day (), 31, "ctor (std::string) -> d");
t.is (fromString5.year (), 2007, "ctor (std::string) -> y");
Date fromString6 ("20071231", "YMD");
t.is (fromString6.month (), 12, "ctor (std::string) -> m");
t.is (fromString6.day (), 31, "ctor (std::string) -> d");
t.is (fromString6.year (), 2007, "ctor (std::string) -> y");
Date fromString7 ("01/01/2008", "m/d/Y");
t.is (fromString7.month (), 1, "ctor (std::string) -> m");
t.is (fromString7.day (), 1, "ctor (std::string) -> d");
t.is (fromString7.year (), 2008, "ctor (std::string) -> y");
// Relative dates.
Date r1 ("today");
t.ok (r1.sameDay (now), "today = now");
Date r2 ("tomorrow");
t.ok (r2.sameDay (now + 86400), "tomorrow = now + 1d");
Date r3 ("yesterday");
t.ok (r3.sameDay (now - 86400), "yesterday = now - 1d");
Date r4 ("sunday");
if (now.dayOfWeek () >= 0)
t.ok (r4.sameDay (now + (0 - now.dayOfWeek () + 7) * 86400), "next sunday");
else
t.ok (r4.sameDay (now + (0 - now.dayOfWeek ()) * 86400), "next sunday");;
Date r5 ("monday");
if (now.dayOfWeek () >= 1)
t.ok (r5.sameDay (now + (1 - now.dayOfWeek () + 7) * 86400), "next monday");
else
t.ok (r5.sameDay (now + (1 - now.dayOfWeek ()) * 86400), "next monday");;
Date r6 ("tuesday");
if (now.dayOfWeek () >= 2)
t.ok (r6.sameDay (now + (2 - now.dayOfWeek () + 7) * 86400), "next tuesday");
else
t.ok (r6.sameDay (now + (2 - now.dayOfWeek ()) * 86400), "next tuesday");;
Date r7 ("wednesday");
if (now.dayOfWeek () >= 3)
t.ok (r7.sameDay (now + (3 - now.dayOfWeek () + 7) * 86400), "next wednesday");
else
t.ok (r7.sameDay (now + (3 - now.dayOfWeek ()) * 86400), "next wednesday");;
Date r8 ("thursday");
if (now.dayOfWeek () >= 4)
t.ok (r8.sameDay (now + (4 - now.dayOfWeek () + 7) * 86400), "next thursday");
else
t.ok (r8.sameDay (now + (4 - now.dayOfWeek ()) * 86400), "next thursday");;
Date r9 ("friday");
if (now.dayOfWeek () >= 5)
t.ok (r9.sameDay (now + (5 - now.dayOfWeek () + 7) * 86400), "next friday");
else
t.ok (r9.sameDay (now + (5 - now.dayOfWeek ()) * 86400), "next friday");;
Date r10 ("saturday");
if (now.dayOfWeek () >= 6)
t.ok (r10.sameDay (now + (6 - now.dayOfWeek () + 7) * 86400), "next saturday");
else
t.ok (r10.sameDay (now + (6 - now.dayOfWeek ()) * 86400), "next saturday");;
Date r11 ("eow");
t.ok (r11 < now + (8 * 86400), "eow < 7 days away");
Date r12 ("eom");
t.ok (r12.sameMonth (now), "eom in same month as now");
Date r13 ("eoy");
t.ok (r13.sameYear (now), "eoy in same year as now");
}
catch (std::string& e)
{
t.fail ("Exception thrown.");
t.diag (e);
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////

72
src/tests/dateformat.t Executable file
View File

@@ -0,0 +1,72 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 8;
# Create the rc file.
if (open my $fh, '>', 'date1.rc')
{
print $fh "data.location=.\n",
"dateformat=YMD\n";
close $fh;
ok (-r 'date1.rc', 'Created date1.rc');
}
if (open my $fh, '>', 'date2.rc')
{
print $fh "data.location=.\n",
"dateformat=m/d/y\n";
close $fh;
ok (-r 'date2.rc', 'Created date2.rc');
}
qx{../task rc:date1.rc add foo due:20091231};
my $output = qx{../task rc:date1.rc info 1};
like ($output, qr/\b20091231\b/, 'date format YMD parsed');
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
qx{../task rc:date2.rc add foo due:12/1/09};
$output = qx{../task rc:date2.rc info 1};
like ($output, qr/\b12\/1\/09\b/, 'date format m/d/y parsed');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'date1.rc';
ok (!-r 'date1.rc', 'Removed date1.rc');
unlink 'date2.rc';
ok (!-r 'date2.rc', 'Removed date2.rc');
exit 0;

83
src/tests/default.t Executable file
View File

@@ -0,0 +1,83 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 16;
# Create the rc file.
if (open my $fh, '>', 'default.rc')
{
print $fh "data.location=.\n",
"default.command=list\n",
"default.project=PROJECT\n",
"default.priority=M\n";
close $fh;
ok (-r 'default.rc', 'Created default.rc');
}
# Set up a default command, project and priority.
qx{../task rc:default.rc add all defaults};
my $output = qx{../task rc:default.rc list};
like ($output, qr/ all defaults/, 'task added');
like ($output, qr/ PROJECT /, 'default project added');
like ($output, qr/ M /, 'default priority added');
unlink 'pending.data';
qx{../task rc:default.rc add project:specific priority:L all specified};
$output = qx{../task rc:default.rc list};
like ($output, qr/ all specified/, 'task added');
like ($output, qr/ specific /, 'project specified');
like ($output, qr/ L /, 'priority specified');
unlink 'pending.data';
qx{../task rc:default.rc add project:specific project specified};
$output = qx{../task rc:default.rc list};
like ($output, qr/ project specified/, 'task added');
like ($output, qr/ specific /, 'project specified');
like ($output, qr/ M /, 'default priority added');
unlink 'pending.data';
qx{../task rc:default.rc add priority:L priority specified};
$output = qx{../task rc:default.rc list};
like ($output, qr/ priority specified/, 'task added');
like ($output, qr/ PROJECT /, 'default project added');
like ($output, qr/ L /, 'priority specified');
$output = qx{../task rc:default.rc};
like ($output, qr/1 PROJECT L .+ priority specified/, 'default command worked');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'default.rc';
ok (!-r 'default.rc', 'Removed default.rc');
exit 0;

77
src/tests/delete.t Executable file
View File

@@ -0,0 +1,77 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 16;
# Create the rc file.
if (open my $fh, '>', 'undelete.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'undelete.rc', 'Created undelete.rc');
}
# Add a task, delete it, undelete it.
my $output = qx{../task rc:undelete.rc add one; ../task rc:undelete.rc info 1};
ok (-r 'pending.data', 'pending.data created');
like ($output, qr/Status\s+Pending\n/, 'Pending');
$output = qx{../task rc:undelete.rc delete 1; ../task rc:undelete.rc info 1};
like ($output, qr/Status\s+Deleted\n/, 'Deleted');
ok (! -r 'completed.data', 'completed.data not created');
$output = qx{../task rc:undelete.rc undelete 1; ../task rc:undelete.rc info 1};
like ($output, qr/Status\s+Pending\n/, 'Pending');
ok (! -r 'completed.data', 'completed.data not created');
$output = qx{../task rc:undelete.rc delete 1; ../task rc:undelete.rc list};
like ($output, qr/^No matches/, 'No matches');
ok (-r 'completed.data', 'completed.data created');
$output = qx{../task rc:undelete.rc undelete 1};
like ($output, qr/reliably undeleted/, 'can only be reliable undeleted...');
$output = qx{../task rc:undelete.rc info 1};
like ($output, qr/No matches./, 'no matches');
# Cleanup.
ok (-r 'pending.data', 'Need to remove pending.data');
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
ok (-r 'completed.data', 'Need to remove completed.data');
unlink 'completed.data';
ok (!-r 'completed.data', 'Removed completed.data');
unlink 'undelete.rc';
ok (!-r 'undelete.rc', 'Removed undelete.rc');
exit 0;

Some files were not shown because too many files have changed in this diff Show More