https://wiki.cdot.senecacollege.ca/w/api.php?action=feedcontributions&user=Oleksandr+Snurnikov&feedformat=atomCDOT Wiki - User contributions [en]2024-03-19T05:41:07ZUser contributionsMediaWiki 1.30.0https://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=104593Winter 2014 DPS911 and OSD700 Weekly Schedule2014-03-10T00:33:37Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Zak - Behaviour Driven Development using Jasmine Testing framework for Javascript <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due] Dave at Mozilla Work Week, no class ==<br />
<br />
* <strike>Student Demos (Monday 11:40-1:30)</strike><br />
<strike>1. Alexander Snurnikov - CSP implementation<br /></strike><br />
<strike>2. Dmitry Yastremskiy - AWS + Vagrant<br /></strike><br />
<strike>3. <br /></strike><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov - CSP and login.webmaker.org<br /><br />
2. Dmitry Yastremskiy - AWS + Vagrant<br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Petr Bouianov<br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. Dmitry Yastremskiy<br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Kevin Kofler<br /><br />
2. Michael Veis<br /><br />
3. Alexander Snurnikov<br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Dmitry Yastremskiy<br /><br />
2. Kevin Kofler<br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. Kevin Kofler<br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=104318Winter 2014 DPS911 and OSD700 Weekly Schedule2014-02-07T16:23:37Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Zak - Behaviour Driven Development using Jasmine Testing framework for Javascript <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due] Dave at Mozilla Work Week, no class ==<br />
<br />
* <strike>Student Demos (Monday 11:40-1:30)</strike><br />
<strike>1. Alexander Snurnikov - CSP implementation<br /></strike><br />
<strike>2. Dmitry Yastremskiy - AWS + Vagrant<br /></strike><br />
<strike>3. <br /></strike><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov - CSP and login.webmaker.org<br /><br />
2. Dmitry Yastremskiy - AWS + Vagrant<br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=104317Winter 2014 DPS911 and OSD700 Weekly Schedule2014-02-07T16:23:02Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Zak - Behaviour Driven Development using Jasmine Testing framework for Javascript <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due] Dave at Mozilla Work Week, no class ==<br />
<br />
* <strike>Student Demos (Monday 11:40-1:30)</strike><br />
<strike>1. Alexander Snurnikov - CSP implementation<br /></strike><br />
<strike>2. Dmitry Yastremskiy - AWS + Vagrant<br /></strike><br />
<strike>3. <br /></strike><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov<br /><br />
2. Dmitry Yastremskiy<br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=104166Winter 2014 DPS911 and OSD700 Weekly Schedule2014-01-27T17:38:27Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Zak - Behaviour Driven Development using Jasmine Testing framework for Javascript <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov - CSP implementation<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=104047Winter 2014 DPS911 and OSD700 Weekly Schedule2014-01-25T18:59:34Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Zak - Behaviour Driven Development using Jasmine Testing framework for Javascript <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. Alexander Snurnikov - CSP implementation<br /><br />
3. Kevin Kofler<br /><br />
<br />
== Week 5 (Feb 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Planet_CDOT_Feed_List&diff=103825Planet CDOT Feed List2014-01-21T00:51:10Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>= Introduction =<br />
<br />
Seneca students and faculty working on open source related projects and research, as well as some faculty, students, and researchers from other institutions, use [http://zenit.senecac.on.ca/~chris.tyler/planet/ Planet CDOT] to aggregate their blogs. This page contains the information about who is blogging in [http://www.planetplanet.org/ Planet Feed Reader format] and serves as the feed configuration for the planet.<br />
<br />
If you do not have an existing blog, you can open a free account at [http://wordpress.com/ Wordpress.com] or [https://www.blogger.com/ Blogger.com] or you can set up your own blog software such as [http://www.s9y.org Serendipity].<br />
<br />
'''Note:''' Additions to the feed list will not take effect until they are merged into the Planet configuration, which is an automatic process scheduled at regular intervals. If you add a feed and do not see it picked up in the Planet within three hours, please check your feed entry carefully and then contact [[User:Chris Tyler|Chris Tyler]] .<br />
<br />
= Requirements =<br />
<br />
* Blog postings fed to the planet must conform to the [[Blog Guidelines]].<br />
* Feeds that are inactive for a significant period of time may get deleted from this list.<br />
<br />
= Using a Tagged/Category Feed =<br />
<br />
A tagged or category feed includes only articles that are tagged with particular keywords or placed in a particular topic category. This can be useful for sending only selected posts to the planet.<br />
<br />
These are the URL formats for tagged or category feeds on popular blogging services/software:<br />
<br />
* [http://www.wordpress.com Wordpress]: <code><nowiki>[http://</nowiki>''blog-user-name''.wordpress.com/category/''category-name''/feed/]</code><br />
* [http://blogger.com Blogger]: <code><nowiki>[http://</nowiki>''blog-user-name''.blogspot.com/feeds/posts/default/-/''category-name'']</code><br />
* [http://s9y.org Serendipity]: <code><nowiki>[http://</nowiki>''blog-main-url''/index.php?/feeds/categories/''cateogrynumber''-''categoryname'']</code><br />
<br />
= Feed Info Format =<br />
<br />
You can add your blog's [http://en.wikipedia.org/wiki/RSS_(file_format) RSS feed] at the end of the list below by specifying the following:<br />
<br />
# The URL to your blog's open source Atom or [http://en.wikipedia.org/wiki/RSS_(file_format) RSS Feed] (i.e., a category or tag). NOTE: Please do not put the URL to your blog -- use the URL for your feed. Please do not use the feed for your entire blog (unless your blog contains only open source-related postings). We only want open source related content.<br />
# Your name as you want it to appear in the list of names for the planet<br />
# Optionally, a URL to a [http://en.wikipedia.org/wiki/Hackergotchi hackergotchi] ([http://wouterverhelst.livejournal.com/21322.html how to]). Your picture should be an 65x85 PNG with a transparent background.<br />
<br />
= Feeds =<br />
<br />
<pre><br />
[http://pphanopensource.blogspot.ca/feeds/posts/default/]<br />
name=Phuoc Phan<br />
<br />
<br />
[http://amkonopko.wordpress.com/feed/]<br />
name=Amadeus Konopko<br />
<br />
[http://fahmadi6.wordpress.com/feed/]<br />
name=Faranak Ahmadi<br />
<br />
[http://rsbr600.blogspot.ca/feeds/posts/default]<br />
name=Ronald Hernandez<br />
<br />
[http://sdealmeida.com/category/open-source/feed/]<br />
name=Simon de Almeida<br />
<br />
[http://jamaljalali.wordpress.com/feed/]<br />
name=Jamal Jalali-Dolatshahi<br />
<br />
[http://aadavis1.blogspot.ca/feeds/posts/default]<br />
name=Alexander Davis<br />
<br />
[http://thevakaran.wordpress.com/category/open-source/feed/]<br />
name=Thevakaran Virutthasalam<br />
<br />
[http://kyu6.wordpress.com/feed/]<br />
name=Keren Yu <br />
<br />
[http://chestersbr600.wordpress.com/]<br />
name=VicChester Ngo<br />
<br />
[http://cty6sbr600.wordpress.com/feed/]<br />
name=Kalpaniya Parmar<br />
<br />
[http://cty6.wordpress.com/feed/]<br />
name=Luis Fuentes<br />
<br />
[http://sbr600.wordpress.com/2012/01/26/build-from-source/]<br />
name=Rachit Chaudhary (DJ)<br />
<br />
[http://sbr600.wordpress.com/2012/01/26/introduction/]<br />
name=Rachit Chaudhary (DJ)<br />
<br />
[http://craigcain.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Craig Cain<br />
<br />
<br />
[http://i0x777.wordpress.com/feed/]<br />
name=Nikhil Sharma<br />
<br />
[http://wolfleaderslair.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Dennis Villasenor<br />
<br />
[http://gkrilov.com/category/open-source/feed/]<br />
name=Greg Krilov<br />
<br />
[http://rubensmaximus.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Rubens Maximus (GameArtist)<br />
<br />
[http://fedoraisfun.wordpress.com/category/open_source/feed/]<br />
name=Alan Lau<br />
<br />
[http://www.spectakular.com/category/open-source/feed/]<br />
name=Simon Jung<br />
<br />
[http://james.boelen.ca/category/open_source/feed/]<br />
name=James Boelen<br />
<br />
[http://jbuckley.ca/category/open-source/feed/]<br />
name=Jon Buckley<br />
<br />
[http://mbrzuzy.wordpress.com/category/open-source/feed/]<br />
name=Marcin Brzuzy<br />
<br />
[http://ben1amin.wordpress.com/category/seneca/feed/]<br />
name=Benjamin Chalovich<br />
<br />
[http://edghardest1.wordpress.com/category/open-source-topics/feed/]<br />
name=Ed Arvelaez<br />
<br />
[http://www.ashkansotoudeh.com/?tag=coding-2&feed=rss2]<br />
name=Ashkan Sotoudeh<br />
<br />
[http://dboddie46.wordpress.com/category/SBR600A/feed/]<br />
name=Derrick Boddie<br />
<br />
[http://aali83.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Ahmad Ali<br />
<br />
[http://gr8can8dian.wordpress.com/category/sbr600/feed/]<br />
name=Lorin Soura<br />
<br />
[http://kirtonmike.wordpress.com/category/SBR600/feed/]<br />
name=Mike Kirton<br />
<br />
[http://fuzzux.wordpress.com/category/SBR600/feed/]<br />
name=Tim Furzer<br />
<br />
[http://nageyi.wordpress.com/feed/]<br />
name=Faisal Nageyi<br />
<br />
[http://KrazyDre.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Andrei Artamonov<br />
<br />
[http://mjcorsame.wordpress.com/feed/]<br />
name=Michael John Corsame<br />
<br />
[http://msbreezy12.wordpress.com/category/SBR/feed/]<br />
name=Chantell Mcintosh<br />
<br />
# Disabled 2011-04-28 - empty blog<br />
#[http://mrtait1.blogspot.com/feeds/posts/default/-/oop344]<br />
#name=Matthew Tait<br />
<br />
[http://sbr600cabbott.blogspot.com/feeds/posts/default]<br />
name=Chris Abbott<br />
<br />
[http://kopay.wordpress.com/category/sbr600-win2011/feed]<br />
name=Pirathapan Sivalingam<br />
<br />
[http://mysnogorodsky.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Marina Ysnogorodsky<br />
<br />
[http://asa.veryusefulinfo.com/?feed=rss2]<br />
name=Ali Samimi<br />
<br />
# Disabled 2011-04-28 - empty blog<br />
#[http://coreyangus.blogspot.com/feeds/posts/default/-/oop344]<br />
#name = Corey Angus<br />
<br />
[http://wsong18.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Wei Song<br />
<br />
[http://davidsosd60020102blog.blogspot.com/feeds/posts/default]<br />
name=David Takasaki<br />
<br />
[http://zwang98.blogspot.com/feeds/posts/default]<br />
name=Joe Wang<br />
<br />
[http://sbr700.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Jonathan Deni<br />
#face=https://techontherun.sslpowered.com/techontherun.ca/jonthumb.png<br />
<br />
[http://dgilloch.blogspot.com/feeds/posts/default]<br />
name=Daniel Gilloch<br />
<br />
[http://jmchen11.wordpress.com/feed/]<br />
name=Jianming Chen<br />
<br />
[http://paulfedora.wordpress.com/tag/cdot/feed/]<br />
name=Paul Whalen<br />
<br />
[http://maxamaxim.wordpress.com/tag/cdot/feed/]<br />
name=M A <br />
<br />
[http://dmchisho.wordpress.com/feed/]<br />
name=David Chisholm<br />
<br />
[http://pokerface3.blogspot.com/feeds/posts/default/-/SBR?alt=rss]<br />
name=David Cabral<br />
<br />
[http://zbhuang1.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Zhibin Huang<br />
<br />
[http://sidsbr.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Sadiki Latty<br />
<br />
[http://orel60.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Or-el Mousaffi<br />
<br />
[http://aryafarzan.wordpress.com/category/OOP344/feed/]<br />
name=Arya Farzan<br />
<br />
[http://dsventura.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Dan Ventura<br />
<br />
[http://chrisdecairos.ca/tag/open-source/feed]<br />
name=Christopher DeCairos<br />
<br />
[http://acfunktron.blogspot.com/feeds/posts/default]<br />
name=Anton Chan<br />
<br />
[http://adaniel3.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Arlene Daniel<br />
<br />
[http://tyrant911-processingdotjs.blogspot.com/feeds/posts/default/-/processing.js]<br />
name=Alex Londono<br />
<br />
<br />
[http://ausleyj.blogspot.com/feeds/posts/default]<br />
name=Ausley Johnson<br />
<br />
[http://arminoop344.blogspot.com/feeds/posts/default]<br />
name=Armin Kumarshellah<br />
<br />
[http://cloudscorpion.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Joseph Hughes<br />
<br />
[http://travisrawn.blogspot.com/feeds/posts/default]<br />
name=Travis Rawn<br />
<br />
[http://jmpiltz.blogspot.com/feeds/posts/default]<br />
name=Jonathan Piltz<br />
<br />
[http://andrewgrimo.wordpress.com/category/open-source/feed/]<br />
name=Andrew Grimo<br />
<br />
[http://mschranz.wordpress.com/category/open_source/feed/]<br />
name=Matthew Schranz<br />
<br />
[http://apvsbr700.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Alex Vlahopoulos<br />
#face=https://techontherun.sslpowered.com/techontherun.ca/alexthumb.png<br />
<br />
[http://asalga.wordpress.com/category/open-source/feed/]<br />
name=Andor Salga (asalga)<br />
<br />
[http://jabhad.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Mohamed Aden<br />
<br />
[http://jonathandeni.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Jonathan Deni<br />
#face=https://techontherun.sslpowered.com/techontherun.ca/jonthumb.png<br />
<br />
[http://manoutoftime.wordpress.com/category/open-source/feed/]<br />
name=Konstantin Novichikhin<br />
<br />
[http://scorchedicee.wordpress.com/category/Seneca/feed/]<br />
name=Adam Sone<br />
<br />
# Temporarily disabled due to non-Seneca posts 2014-01-06 CTyler<br />
#[http://murraysaul.wordpress.com/feed/]<br />
#name=Murray Saul<br />
<br />
[http://xwn740arcadeproject.blogspot.com/feeds/posts/default]<br />
name=Arcade Project - LUX Group@<br />
#face=http://matrix.senecac.on.ca/~mpaivaneto/ourbaby.png<br />
<br />
[http://feeds.feedburner.com/lsblakk_open-source]<br />
name=Lukas Blakk (lsblakk)<br />
#face=http://avnerd.tv/sharedFiles/lukas_hackergotchi.png<br />
<br />
[http://nashutzu.blogspot.com/feeds/posts/default]<br />
name=George Popescu (GeorgeP)<br />
<br />
[http://blog.chris.tylers.info/index.php?/feeds/categories/20-Seneca-Planet.rss]<br />
name=Chris Tyler (ctyler)<br />
face=http://zenit.senecac.on.ca/~chris.tyler/chris_tyler_hackergotchi_4a.png<br />
<br />
[http://vocamus.net/dave/?feed=rss2&category_name=Seneca]<br />
name=David Humphrey<br />
<br />
[http://gratnam1.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Gajendran Ratnam (gratnam1)<br />
<br />
[http://senecajon.blogspot.com/feeds/posts/default]<br />
name=Jonathan Cheung (jcheung23)<br />
<br />
# Disabled 2011-04-28 - blog was removed<br />
#[http://blog.markparuzel.com/feed/]<br />
#name=Mark Paruzel<br />
<br />
[http://mmszuto.blogspot.com/feeds/posts/default]<br />
name=Michael Szutu<br />
<br />
[http://lsdaly.blogspot.com/feeds/posts/default]<br />
name=Louis Daly (lsdaly)<br />
<br />
# Disabled 2009-01-25 due to 404's (domain expired)<br />
#[http://www.foobartastic.com/feed/]<br />
#name=Tom Aratyn<br />
<br />
[http://bhearsum.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Ben Hearsum<br />
<br />
# Following feed is invitation-only. Disabled 2010-09-23 CTyler<br />
#[http://www.jyzyy.blogspot.com/feeds/posts/default/-/opensource]<br />
#name=Jyoti<br />
<br />
# Re-enabled 2011-04-29 - new blog URL<br />
# Disabled 2009-09-15 due to 404's (site rearranged?)<br />
[http://tea.cesaroliveira.net/archives/tag/seneca/feed]<br />
name=Cesar Oliveira<br />
<br />
[http://r3ap3r.wordpress.com/category/seneca/feed]<br />
name=Brandon Collins<br />
<br />
# Disabled 2011-04-28 - blog was deleted<br />
#[http://jrgoncal.blogspot.com/feeds/posts/default]<br />
#name=Justin Goncalves (jrgoncal)<br />
#face=http://img517.imageshack.us/img517/9865/bearzp5.jpg<br />
<br />
# Disabled 2011-04-28 - blog is now private<br />
#[http://tlo5.blogspot.com/feeds/posts/default]<br />
#name=Tommy Lo (tlo5)<br />
<br />
[http://armenzg.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Armen Zambrano G. (armenzg)<br />
<br />
[http://mikemoz.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Michael Mullin<br />
<br />
[http://mikemoz.blogspot.com/feeds/posts/default/-/Mozilla_GFX]<br />
name=Michael Mullin<br />
<br />
# Returned 410 on 2008-09-13 - disabled CTyler<br />
#[http://rueenfiez.wordpress.com/category/open-source/feed/]<br />
#name=Rueen Fiez<br />
<br />
# Returning 404 on 2008-09-13 - disabled CTyler<br />
#[http://jsafavi.wordpress.com/category/open-source/feed/]<br />
#name=Jason Safavi<br />
<br />
[http://vlam6.wordpress.com/category/open-source/feed/]<br />
name=Vincent Lam<br />
<br />
[http://dejant.blogspot.com/feeds/posts/default]<br />
name=Dejan Tolj<br />
<br />
[http://shivaris.blogspot.com/feeds/posts/default/-/OSD600]<br />
name=Hien Huynh<br />
<br />
[http://raynrant.blogspot.com/feeds/posts/default]<br />
name=Andrew Raynier (JM)<br />
face=http://zenit.senecac.on.ca/wiki/imgs/Hackergotchi.png<br />
<br />
[http://vijeysdps909.blogspot.com/feeds/posts/default]<br />
name=Vijey Bala<br />
<br />
[http://sedejong.blogspot.com/feeds/posts/default]<br />
name=Shomar Dejonge<br />
<br />
[http://dbaranski.wordpress.com/category/open-source/feed/]<br />
name=Dominic Baranski<br />
<br />
#[http://crashopensource.wordpress.com/category/open-source/feed/]<br />
#name=Lukas Blakk<br />
<br />
[http://kmsingh.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Kerry M. Singh<br />
<br />
[http://tjduavis.wordpress.com/category/open-source/feed/]<br />
name=Timothy Duavis<br />
<br />
# Disabled 2011-04-28 - entire website is missing<br />
#[http://ashughes.com/?q=taxonomy/term/2/0/feed]<br />
#name=Anthony Hughes<br />
<br />
[http://opensourcekennethlee.blogspot.com/feeds/posts/default]<br />
name=Kenneth Lee<br />
<br />
[http://cleung.wordpress.com/category/Seneca/feed/]<br />
name=Catherine Leung<br />
<br />
[http://dtheosab.wordpress.com/category/open-source/feed/]<br />
name=Daino Theosabrata<br />
<br />
# This is my old blog<br />
[http://simon-jung.blogspot.com/feeds/posts/default]<br />
name=Simon Jung (old)<br />
<br />
[http://aeraj.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=AJ Rehman<br />
<br />
[http://xrayon.blogspot.com/feeds/posts/default]<br />
name=Fima Kachinski<br />
<br />
[http://littlesvr.ca/grumble/category/safeforseneca/feed/]<br />
name=Andrew Smith<br />
<br />
# No more new posts here (Andrew 31Aug2013)<br />
#[http://littlesvr.ca/masters/feed]<br />
#name=Andrew Smith (master's)<br />
<br />
[http://jbopensrc.wordpress.com/category/open-source/feed]<br />
name=Jesse Buchanan<br />
<br />
[http://ayhfung.blogspot.com/feeds/posts/default]<br />
name=Andrew Fung<br />
<br />
# Returned 404 on 2008-09-13 - disabled CTyler<br />
#[http://sloose.wordpress.com/category/open-source/feed/]<br />
#name=Peter Ljubanovic<br />
<br />
[http://mozcoz.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Amit Gundu<br />
<br />
# Changed CTyler 2009-02-12 from [http://www.blogger.com/feeds/15922666655846514311/blogs]<br />
[http://dsmukherji.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Devashish<br />
<br />
[http://yhan11.wordpress.com/category/open-source/feed]<br />
name=Yongsheng Han<br />
<br />
[http://peter.sykokillers.com/category/open-source/feed/]<br />
name=Peter Chan<br />
<br />
[http://www.c3dl.org/index.php/category/c3dl-dev/feed]<br />
name=Seneca Canvas3D Team<br />
<br />
# Updated 2011-04-28 - corrected feed URL<br />
[http://peterevanoff.wordpress.com/category/open-source/feed/]<br />
name=Peter Evanoff<br />
<br />
# Disabled 2011-04-28 - flagged as a malware-loaded site by Google<br />
<br />
#[http://radoye.net1zen.com/wp-rss2.php?cat=3]<br />
#name=Radovan Nesic<br />
<br />
[http://blog.cresencia.ca/category/open-source/osd600/feed/]<br />
name=Joseph Cresencia<br />
<br />
[http://bertenshaw.blogspot.com/feeds/posts/default]<br />
name=David Bertenshaw<br />
<br />
[http://ljubomirgorscak.blogspot.com/feeds/posts/default]<br />
name=Ljubomir Gorscak<br />
<br />
[http://sameropensource.blogspot.com/feeds/posts/default]<br />
name=Samer Ziadeh (samer)<br />
<br />
# Following feed not working and temporarily disabled<br />
# 2010-09-23 by CTyler<br />
#[http://jamesboston.ca/cms/taxonomy/term/1/0/feed]<br />
#name=James Boston<br />
#face=http://jamesboston.ca/hackergotchi.png<br />
<br />
[http://dailypackage.fedorabook.com/index.php?/feeds/index.rss2]<br />
name=Fedora Daily Package<br />
<br />
[http://blog.fardad.com/feeds/posts/default/-/Seneca]<br />
name=Fardad Soleimanloo<br />
<br />
[http://selmys.wordpress.com/category/opensource/feed]<br />
name=John Selmys<br />
face=http://cs.senecac.on.ca/~selmys/john_selmys_hackergotchi.png<br />
<br />
[http://pconstantino.wordpress.com/feed]<br />
name=Patricia Constantino<br />
<br />
[http://bombshelter13.blogspot.com/feeds/posts/default]<br />
name=Katherine Masseau<br />
<br />
[http://zadkielm.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Ezadkiel Marbella<br />
<br />
[http://blog.sidkalra.com/category/opensource/feed]<br />
name=Sid Kalra<br />
<br />
[http://pplam3.blogspot.com/feeds/posts/default]<br />
name=Patrick Lam<br />
<br />
# Disabled 2011-04-28 - blog is now private<br />
#[http://twlai1.blogspot.com/feeds/posts/default]<br />
#name=Tony Lai<br />
<br />
[http://dee132.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Chris Bishop<br />
<br />
# Updated 2011-04-28 - updated feed URL<br />
[http://zghansar.wordpress.com/category/open-source/feed/]<br />
name=Zaid Ghansar<br />
face=http://www.alhudainstitute.ca/zaid/z.png<br />
<br />
[http://aaronmt.github.com/atom.xml]<br />
name=Aaron Train<br />
face=http://matrix.senecac.on.ca/~amtrain/other/mypic.png<br />
<br />
[http://scottosd.blogspot.com/feeds/posts/default/-/Open%20Source/]<br />
name=Scott Lunel<br />
<br />
# Updated 2009-04-16, new blog. - scarter4<br />
# Disabled 2009-11-27 due to wrong feed URL<br />
#[http://scarter4.wordpress.com/category/seneca/]<br />
#name=Stephen Carter<br />
<br />
# Disabled 2009-01-23 CTyler due to 404s<br />
#[http://shdinis.blogspot.com/feeds/posts/default]<br />
#name=Shawn Dinis<br />
<br />
[http://belligero.org/index.php?option=com_content&view=section&id=1&format=feed&type=rss]<br />
name=Jason Tarka<br />
<br />
# Updated 2011-04-28 - no more tag, but still Seneca related<br />
[http://petermcintyre.wordpress.com/feed/]<br />
name=Peter McIntyre<br />
<br />
[http://vesperrin.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Leonard Lee (vesper)<br />
<br />
[http://jsdoodnauth.wordpress.com/category/open-source/feed/]<br />
name=Joshua Doodnauth<br />
<br />
[http://johnhford.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=John Ford (John64)<br />
<br />
[http://mohaksblog.blogspot.com/feeds/posts/default]<br />
name=Mohak Vyas<br />
#face=http://matrix.senecac.on.ca/~mdvyas/MohakVyas.png<br />
<br />
[http://pdirezze.blogspot.com/feeds/posts/default]<br />
name=Paul DiRezze<br />
<br />
# Following link no longer valid. Disabled 2010-09-23 CTyler<br />
#[http://www.ndaversa.com/category/open-source/feed]<br />
#name=Nino D'Aversa<br />
<br />
[http://miltonpaiva.wordpress.com/feed/]<br />
name=Milton Paiva<br />
#face=http://matrix.senecac.on.ca/~mpaivaneto/orkut.png<br />
<br />
[http://de-luxer.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Nestor Chan<br />
#face=http://matrix.senecac.on.ca/~tnchan/n516840997_9173.PNG<br />
<br />
[http://varinderjhand.wordpress.com/feed/]<br />
name=Varinder Singh <br />
<br />
[http://ajhooper.blogspot.com/feeds/posts/default]<br />
name=Aaron Hooper<br />
<br />
[http://nadavid.blogspot.com/feeds/posts/default]<br />
name=Neil David<br />
<br />
[http://cdpatel1.blogspot.com/feeds/posts/default]<br />
name=Chinmay Patel<br />
#face=http://www.geocities.com/chinmay_patel@ymail.com/chinmay.jpg<br />
<br />
[http://jvalianes.blogspot.com/feeds/posts/default]<br />
name=Jesse Valianes<br />
<br />
[http://bbarcick.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Bartosz Barcicki<br />
<br />
[http://heidenreich.wordpress.com/tag/seneca-college/feed/]<br />
name=Michal Heidenreich<br />
<br />
[http://kezhong.wordpress.com/feed/atom/]<br />
name=Kezhong Liang <br />
<br />
[http://wfred.wordpress.com/category/open-source/feed/]<br />
name=Fred Wang<br />
<br />
[http://jsinghfoss.wordpress.com/category/spring-framework/feed/]<br />
name=Jatinder Singh<br />
<br />
[http://rparsi.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Rahi Parsi<br />
<br />
# Changed 2011-04-28 - missing a capital "S" from Seneca to display feed<br />
[http://aaronrey15.blogspot.com/feeds/posts/default/-/Seneca]<br />
name=Aaron Chan<br />
<br />
# Disabled 2011-04-28 - posts were deleted, empty feed<br />
#[http://flashalive.wordpress.com/category/Open%20Source/feed/]<br />
#name=Ryan Wang<br />
<br />
[http://kvuhome.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Khanh Vu<br />
<br />
[http://daeseonmoon.wordpress.com/category/open-source/feed/]<br />
name=Daeseon Moon<br />
<br />
[http://abraini.wordpress.com/category/seneca/feed/]<br />
name=Andrew Braini<br />
<br />
[http://minicheong.blogspot.com/feeds/posts/default]<br />
name=Frankie Law<br />
<br />
# Following feed changed from http://www.heyqule.net/blog/tech/oss/feed<br />
# on 2010-09-23 by CTyler.<br />
[http://www.heyqule.net/taxonomy/term/44/0/feed]<br />
name=Allen JF Xie (heyqule)<br />
<br />
[http://farhadnorouzi.blogspot.com/feeds/posts/default]<br />
name=Farhad Norouzi<br />
<br />
[http://jdeport.wordpress.com/category/software-development/open-source/feed/]<br />
name=John Dang<br />
<br />
[http://pliu.wordpress.com/category/open-source/feed/]<br />
name=Peter Liu<br />
<br />
# Feed not working - temporarily disabled 2010-09-23 CTyler<br />
#[http://www.jerrypau.ca/?feed=rss2&cat=3]<br />
#name=Jerry Pau<br />
#face=http://www.jerrypau.ca/blog-face-1.png<br />
<br />
[http://blog.wikiscraps.com/feeds/posts/default/-/oss]<br />
name=M. Mead Armsby (mead)<br />
<br />
[http://paritosha.blogspot.com/feeds/posts/default]<br />
name=Paritosh Aggarwal(paritosh1010)<br />
<br />
# Private blog. Disabled 2010-09-23 CTyler.<br />
#[http://myblog110.wordpress.com/category/open-source/feed]<br />
#name=Tahereh<br />
<br />
# Disabled 2011-04-28 - empty feed, all posts were removed<br />
#[http://challenger110.wordpress.com/category/software-development/open-source/censored/feed/]<br />
#name=Davoud Salahi Rad<br />
<br />
[http://wb-os.blogspot.com/feeds/posts/default]<br />
name=Le Yang<br />
<br />
[http://garykwong.wordpress.com/category/education/feed/]<br />
name=Gary Kwong (nth10sd)<br />
<br />
[http://yuenhoe.co.cc/blog/category/mozilla/feed/]<br />
name=Lim Yuen Hoe (moofang)<br />
<br />
# Disabled 2011-04-27 - empty feed, needs to be udpated<br />
#[http://tonychestnut.wordpress.com/category/mozilla/ubiquity/feed/]<br />
#name=Vu Dinh The (tonyvu)<br />
<br />
[http://opensourceproject.wordpress.com/category/open-source/feed/]<br />
name=Nabeel Khan (nkhan26)<br />
<br />
# Disabled 2011-04-27 - suspended domain<br />
#[http://solfu.net/tech/category/personas-for-thunderbird/feed/]<br />
#name=Yaoquan (seith)<br />
<br />
[http://xiajunshi.wordpress.com/category/open-source/feed/]<br />
name=Shelley Shi<br />
<br />
[http://hendrikinmozilla.wordpress.com/feed/]<br />
name=Hendrik<br />
<br />
[http://t3rrychan.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Terry Chen (jchen124)<br />
<br />
[http://blog.bchao.ca/feeds/posts/default?alt=rss]<br />
name=Boris Chao<br />
<br />
[http://ahiltssbr700.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Adam Hilts<br />
<br />
[http://ysasaki600.wordpress.com/feed/]<br />
name=Yu Sasaki<br />
<br />
[http://enderstruth.wordpress.com/category/open-source/feed/]<br />
name=Roger Dicke<br />
<br />
[http://wobblyretroaction.blogspot.com/feeds/posts/default/-/Open%20source]<br />
name=Matthew Lam<br />
<br />
[http://asydik.wordpress.com/category/professional/open-source/feed/]<br />
name=Mickael Medel (aSydiK)<br />
<br />
[http://cwdesautels.blogspot.com/feeds/posts/default]<br />
name=Carl Desautels<br />
<br />
[http://rselby-oop344.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Remington Selby<br />
<br />
[http://mikey-osd600a.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Michael Dennis<br />
<br />
# Disabled 2011-04-27 - empty blog<br />
#[http://tjprogramming.blogspot.com/feeds/posts/default/-/seneca]<br />
#name=Timothy Catibog<br />
<br />
[http://horndavid.blogspot.com/feeds/posts/default?alt=rss]<br />
name=David Horn<br />
<br />
[http://annasob.wordpress.com/feed/]<br />
name=Anna Sobiepanek<br />
<br />
[http://drozhkov.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Dmitriy Rozhkov<br />
<br />
[http://www.hodgin.ca/?feed=rss2&cat=4]<br />
name=Daniel Hodgin<br />
<br />
[http://xderick.blogspot.com/feeds/posts/default/-/OSD]<br />
name=Yong Hong<br />
<br />
# This next link does not lead to an RSS or Atom feed. Disabled 2009-10-25 by CTyler.<br />
#[http://hoonkoon.blogspot.com/2009/09/oop344.html]<br />
#name=Taehoon Kim<br />
<br />
[http://s2000c.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Sunny Chau<br />
<br />
# This next link does not lead to an RSS or Atom feed. Disabled 2009-10-25 by CTyler.<br />
#[http://s2000c.blogspot.com/2009/09/oop344c.html]<br />
#name=Sunny Chau<br />
<br />
[http://kxu9.blogspot.com/feeds/posts/default]<br />
name=Kai Xu<br />
<br />
[http://oop-era.blogspot.com/feeds/posts/default]<br />
name=Eric Austerberry<br />
<br />
[http://docsage.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Eric Dell<br />
<br />
[http://ehren.wordpress.com/category/Seneca/feed/]<br />
name=Ehren Metcalfe<br />
<br />
[http://bsmith19.wordpress.com/category/Seneca/feed/]<br />
name=Brandon Smith<br />
<br />
[http://dcucereavii.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Diana Cucereavii<br />
<br />
# Disabled 2011-04-27 - site unreachable<br />
#[http://www.savantosis.com/?feed=rss2&cat=3]<br />
#name=Justin Robertson<br />
<br />
[http://paul-oop344.blogspot.com/feeds/posts/default/]<br />
name=Paul Repasi<br />
<br />
[http://istessema.wordpress.com/category/oop344/feed/]<br />
name=Iyosias Tessema<br />
<br />
[http://nedape.blogspot.com/feeds/posts/default]<br />
name=Neda Pezeshki<br />
<br />
[http://justletmepassoop344.blogspot.com/feeds/posts/default]<br />
name=Brian Parreno<br />
<br />
[http://dliu53.wordpress.com/category/open-source/feed/]<br />
name=Donghui Liu<br />
<br />
# Disabled 2011-04-27 - site not found<br />
#[http://oopblog.tdotshack.net/feeds/posts/default/-/OOP344]<br />
#name=Ryan Alexander<br />
<br />
[http://oop344ylseow.blogspot.com/feeds/posts/default]<br />
name=Yip Lim, Seow<br />
<br />
[http://mercedes-oop344.blogspot.com/feeds/posts/default]<br />
name=Suwon An<br />
<br />
[http://dtychshenko.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Dmitriy Tychshenko<br />
<br />
[http://victran.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Victor Tran<br />
<br />
# Changed 2011-04-27 - updated feed URL to proper<br />
[http://krazyazn.blogspot.com/feeds/posts/default]<br />
name=Michael Lin<br />
<br />
[http://xshi18.blogspot.com/feeds/posts/default]<br />
name=Xiaozhe Shi<br />
<br />
[http://feihong-xiong.blogspot.com/feeds/posts/default]<br />
name=Feihong Xiong<br />
<br />
# Changed 2011-11-01 - created category just for PlanetCDOT<br />
[http://orbitalstation.wordpress.com/category/planetcdot/feed/]<br />
name=Hasan (northWind) Kamal-Al-Deen<br />
face=http://matrix.senecac.on.ca/~hkamal-al-deen/images/Exclaim65x85.png<br />
<br />
[http://hduan2.wordpress.com/feed/]<br />
name= Haoliang Duan<br />
<br />
[http://anastasias-myblog.blogspot.com/feeds/posts/default/-/OOP344]<br />
name= Anastasia Semionova<br />
<br />
[http://franksun123.blogspot.com/feeds/posts/default/]<br />
name= Dong Sun<br />
<br />
[http://rkyoop344.blogspot.com/feeds/posts/default/]<br />
name=Keyan Ren<br />
<br />
[http://ctran13.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Chi-Lea Tran<br />
<br />
[http://szymonsoop.blogspot.com/feeds/posts/default/]<br />
name= Szymon Ahmed<br />
<br />
[http://ywang268.blogspot.com/feeds/posts/default/]<br />
name=Yu Wang<br />
<br />
[http://wangcong422.blogspot.com/feeds/posts/default/]<br />
name=Cong Wang<br />
<br />
[http://dennyp.wordpress.com/category/Seneca/feed/]<br />
name=Denny Papagiannidis<br />
<br />
# Blog not found. Disabled 2010-09-23 CTyler.<br />
#[http://java-chinmay.blogspot.com/feeds/posts/default]<br />
#name= Chinmay Patel<br />
<br />
[http://saecob.blogspot.com/feeds/posts/default/-/OpenSource]<br />
name= Sergiu Ecob<br />
<br />
# Disabled 2011-04-27 - blog deleted<br />
#[http://satijas.wordpress.com/category/OOP344/feed/]<br />
#name=Sasha Atijas<br />
<br />
# 404. Disabled 2010-09-23 CTyler.<br />
#[http://auzix.com/seneca/?feed=rss2]<br />
#name=Tyler Hackwood<br />
<br />
#[http://starbuck-blog.blogspot.com/feeds/posts/default]<br />
#name=Verity Li<br />
<br />
[http://gkrilov.blogspot.com/feeds/posts/default]<br />
name=Greg Krilov<br />
<br />
[http://qinzhi2001.blogspot.com/feeds/posts/default]<br />
name=David Chen<br />
<br />
[http://tchen-oop344.blogspot.com/feeds/posts/default]<br />
name=Terence Chen<br />
<br />
[http://opp344-yxue.blogspot.com/feeds/posts/default]<br />
name=Yong Xue<br />
# Disabled 2011-04-28 - had 2 other duplicate feeds<br />
# http://opp344-yxue.blogspot.com/feeds/posts/default/-/seneca<br />
# http://opp344-yxue.blogspot.com/feeds/posts/default/-/OOP344<br />
<br />
[http://ttsuji1.blogspot.com/feeds/posts/default]<br />
name=Trevor Tsuji<br />
<br />
[http://oyoung4.blogspot.com/feeds/posts/default]<br />
name=Oliver Young<br />
<br />
[http://minyxo.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Edward Sin<br />
<br />
# Blog not found - disabled 2010-09-23 CTyler<br />
#[http://oop344f09-niki.blogspot.com/feeds/posts/default]<br />
#name=Niki Simmalavong<br />
<br />
[http://jdbcdps.blogspot.com/feeds/posts/default]<br />
name=Julia Vasserman<br />
<br />
[http://shunyao-cpa.blogspot.com/feeds/posts/default]<br />
name=Shun Yao Zhang<br />
<br />
# Disabled 2009-11-27 due to 500's on feed link<br />
# Re-enabled 2011-04-27 - incorrect URL format fixed<br />
[http://oop344ylseow.blogspot.com/feeds/posts/default]<br />
name=Yip Lim Seow<br />
<br />
[http://capereir.wordpress.com/feed/]<br />
name=Chris Pereira<br />
<br />
[http://dev-blog.zerogin.com/category/opensource/feed/]<br />
name=Tom Wisniewski (t0mmyw)<br />
<br />
# Disabled 2011-04-27 - empty feed, rest of blog is not related<br />
#[http://majorbludd.wordpress.com/category/school/feed/]<br />
#name=Michael Dawson<br />
<br />
[http://cdnpadawan.wordpress.com/feed/]<br />
name=Matthew Daniels<br />
<br />
[http://processingjs.org/blog/?feed=rss2]<br />
name=Processing.js Blog<br />
<br />
[http://dseifried.wordpress.com/category/school/feed/]<br />
name=David Seifried<br />
<br />
[http://tandemwebdesign.ca/blog/?feed=rss2&cat=3]<br />
name=Matthew Adams<br />
<br />
[http://s-aleinikov.blog.ca/feed/atom/posts/]<br />
name=Sergey Aleinikov<br />
<br />
[http://wfchen2010.blogspot.com/feeds/posts/default]<br />
name=Wen Fang Chen<br />
<br />
[http://donna-oberes.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Donna Oberes<br />
<br />
[http://carolynwoodley.blogspot.com/feeds/posts/default]<br />
name=Carolyn Woodley<br />
<br />
[http://shengwei-seneca.blogspot.com/feeds/posts/default]<br />
name=Shengwei Wang<br />
<br />
[http://zakoop344.blogspot.com/feeds/posts/default]<br />
name=Wei Tong<br />
<br />
[http://gtawaf.blogspot.com/feeds/posts/default/-/Seneca]<br />
name=Gamal Tawaf <br />
<br />
[http://rift-tlosam.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Brendan McDorman<br />
<br />
[http://hdc23.wordpress.com/category/OOP344/feed]<br />
name=Dachuan Huang<br />
<br />
# Disabled 2011-04-27 - blank feed, aged blod<br />
#[http://qwu26.blogspot.com/feeds/posts/default/-/OOP344]<br />
#name=Qingxi Wu<br />
<br />
# Disabled 2011-04-27 - blank blog<br />
#[http://lwang162.blogspot.com/feeds/posts/default/-/OOP344]<br />
#name=LianHe Wang<br />
<br />
# Disabled 2011-04-27 - blank blog, aged<br />
#[http://bmcohen.blogspot.com/feeds/posts/default/-/seneca]<br />
#name=Bryan Cohen<br />
<br />
[http://feliploko.wordpress.com/category/seneca/feed]<br />
name=Felipe de Oliveira<br />
<br />
# Following feed reports invalid content type.<br />
# Disabled 2010-09-23 CTyler<br />
#[http://lwang168.blogspot.com/feeds/posts/-/oop344]<br />
#name=Liang Wang<br />
<br />
[http://shunyao-cpa.blogspot.com/feeds/posts/default]<br />
name=shun yao zhang<br />
<br />
[http://galewis.blogspot.com/feeds/posts/default]<br />
name=Gustone Lewis<br />
<br />
[http://hmo6.blogspot.com/feeds/posts/default]<br />
name=Mo Hsiu Mei<br />
<br />
[http://derekambrose.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Derek Ambrose<br />
<br />
[http://scottdowne.wordpress.com/category/open-source/feed/]<br />
name=Scott Downe<br />
<br />
# Disabled 2011-04-27 - blog deleted<br />
#[http://anthonyisgood.blogspot.com/feeds/posts/default/-/open%20source]<br />
#name = Anthony Alves<br />
<br />
[http://jjleeos.blogspot.com/feeds/posts/default]<br />
name = Jeffrey Lee<br />
<br />
[http://harjinderv.tumblr.com/tagged/Open_Source/rss]<br />
name = Harjinder Virdi<br />
<br />
[http://cldenobrega.wordpress.com/category/open-source/feed/]<br />
name = Crystal de Nobrega (cldenobrega)<br />
<br />
[http://lchen97.blogspot.com/feeds/posts/default]<br />
name=Chris Chen<br />
<br />
# Parked domain. Disabled 2010-09-23 CTyler<br />
#[http://hotweiss.lifeflayer.com/?feed=atom]<br />
#name=Tianqi Liu<br />
<br />
[http://oleg-oop.blogspot.com/feeds/posts/default]<br />
name=Aleh Pliats<br />
<br />
[http://88mishok.blogspot.com/feeds/posts/default]<br />
name=Francois Des Jarlais<br />
<br />
[http://bikarin.blogspot.com/feeds/posts/default]<br />
name=Irina Balzamova<br />
<br />
[http://mashhaque.blogspot.com/feeds/posts/default]<br />
name=Mashfique Haque<br />
<br />
[http://yxue11.blogspot.com/feeds/posts/default]<br />
name=Yong Xue<br />
<br />
[http://tdao75.blogspot.com/feeds/posts/default]<br />
name=Thanh Dao<br />
<br />
[http://minooz.wordpress.com/category/CDOT/feed/]<br />
name=Minoo Ziaei<br />
<br />
[http://gbatumbya.wordpress.com/category/seneca/cdot/feed/]<br />
name=Grace Simon Batumbya<br />
<br />
[http://sonnilion.wordpress.com/feed/]<br />
name=Matt Postill<br />
<br />
[http://acchung1.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Alex Chun Yang Chung<br />
<br />
[http://hckim.wordpress.com/category/open-source/feed/]<br />
name=Han Chul Kim<br />
<br />
[http://xizhangblog.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Xi Zhang<br />
<br />
# Modified 2011-04-27 - changed from blank category<br />
[http://lwu11.blogspot.com/feeds/posts/default]<br />
name=Ling Wu<br />
<br />
[http://jasonquan.wordpress.com/category/OOP344/feed/]<br />
name=Jason Quan<br />
<br />
[http://myoop344blog.blogspot.com/feeds/posts/default/]<br />
name=Xiongwen LU<br />
<br />
[http://0zzym.wordpress.com/feed]<br />
name=Osman Mirza<br />
<br />
[http://adgezaza.posterous.com/rss.xml?tag=open%20source]<br />
name=Adrian Maurer<br />
<br />
[http://kumailhabib.blogspot.com/feeds/posts/default]<br />
name=Kumail Habib<br />
<br />
[http://imadorki3.blogspot.com/feeds/posts/default]<br />
name=Robin Co<br />
<br />
[http://danapao026.blogspot.com/feeds/posts/default]<br />
name=Don Armin Napao<br />
<br />
[http://cgm087.blogspot.com/feeds/posts/default/-/CDOT]<br />
name=Christopher G. Missen<br />
<br />
[http://crgosselin.blogspot.com/feeds/posts/default]<br />
name=Chris Ryan Gosselin<br />
<br />
[http://slaw12.wordpress.com/feed/ ]<br />
name=Stephanie Law<br />
<br />
[http://ysliu2.blogspot.com/feeds/posts/default]<br />
name=Yansong Liu<br />
<br />
[http://www.drizhepolov.com/blog/?feed=rss2]<br />
name=Vladimir Drizhepolov<br />
<br />
[http://bhavanesh.wordpress.com/feed/]<br />
name=Bhavanesh Patel<br />
<br />
[http://xwu0102.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Xiaojiang Wu<br />
<br />
[http://rhui4.wordpress.com/feed/ ]<br />
name=Richard Hui<br />
<br />
[http://invinciblyignorant.wordpress.com/category/OOP344/feed/]<br />
name=Jason Burton<br />
<br />
[http://goldenration.wordpress.com/feed/]<br />
name=HongGeun Park<br />
<br />
[http://thupten.veryusefulinfo.com/?feed=rss2]<br />
name=Thupten Choephel<br />
<br />
[http://priyadeep.wordpress.com/feed/]<br />
name=Priyadeep Gill<br />
<br />
[http://kyle205website.info/wordpress/?feed=rss2]<br />
name=Khai Huynh<br />
<br />
[http://dale.io/open-source.xml]<br />
name=Dale Karp<br />
<br />
[http://vbluzmans.wordpress.com/feed/]<br />
name=Vitaly Bluzmans<br />
<br />
[http://akkimblog.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Kerry Taylor<br />
<br />
<br />
[http://alf1488.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Yegor Tyunin<br />
<br />
[http://sbr600.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Matthew Ortofsky<br />
<br />
[http://pbrown9.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Paul Brown<br />
<br />
[http://jzaidi.wordpress.com/feed/]<br />
name=Jawwad Zaidi<br />
<br />
[http://blog.rainulf.ca/category/CDOT/feed/]<br />
name=Rainulf Pineda<br />
<br />
[http://donchel.wordpress.com/feed/]<br />
name=Dong Cheol Cha<br />
<br />
[http://sweerdenburg.wordpress.com/category/seneca/feed/]<br />
name=Steven Weerdenburg<br />
<br />
[http://jyang42.blogspot.com/feeds/posts/default]<br />
name=Jing Yang<br />
<br />
[http://tarinc.wordpress.com/feed/]<br />
name=Tarin Choudhury<br />
<br />
[http://jtdonaldson21.blogspot.com/feeds/posts/default]<br />
name=Jeshu Donaldson<br />
<br />
[http://bccp32.blogspot.com/feeds/posts/default]<br />
name=Yauheni Khabian<br />
<br />
[http://mark-os.blogspot.com/feeds/posts/default]<br />
name=Mark Eamiguel<br />
<br />
[http://kweber1.blogspot.com/feeds/posts/default]<br />
name=Kyle Weber<br />
<br />
[http://mustafaredha.wordpress.com/category/planet-cdot/feed]<br />
name=Mustafa Redha<br />
<br />
[http://andrewasdesigned.blogspot.com/feeds/posts/default/-/SBR600]<br />
name=Andrew Singh<br />
<br />
[http://escom0.blogspot.com/feeds/posts/default]<br />
name=Eric Shum<br />
<br />
# Disabled 2011-04-27 - blog was deleted<br />
#[http://open-ht.blogspot.com/feeds/posts/default]<br />
#name=Hoc Tran<br />
<br />
[http://vanjason.wordpress.com/category/sbr600/feed]<br />
name=Jason Van<br />
<br />
[http://kpangilinan.wordpress.com/feed]<br />
name=Kenneth Pangilinan<br />
<br />
[http://ajcondinho.blogspot.com/feeds/posts/default/-/opensource]<br />
name=Andrew Condinho<br />
<br />
[http://blog.esmnetworks.com/category/planet-cdot/feed]<br />
name=Adrian Pruteanu<br />
<br />
[http://stevebologna.wordpress.com/category/Open-Source/feed/]<br />
name=Stephen Bologna<br />
<br />
[http://www.winterleaf.ca/blog/category/oop344/feed/]<br />
name=Daniel Slessarev<br />
<br />
[http://ycshon.blogspot.com/feeds/posts/default]<br />
name=Young Chol Shon<br />
<br />
[http://jwpark2.blogspot.com/feeds/posts/default]<br />
name=Jaewoo Park<br />
<br />
[http://klasconia.wordpress.com/feed/]<br />
name=Kevin Lasconia<br />
<br />
[http://kaitlynmcdonald.wordpress.com/feed/]<br />
name=Kaitlyn McDonald<br />
<br />
[http://jrobinson7.wordpress.com/feed/]<br />
name=James Robinson<br />
<br />
[http://trusu.blogspot.com/feeds/posts/default]<br />
name=Traian Rusu<br />
<br />
[http://blockrockinpete.blogspot.com/feeds/posts/default/-/OSD600]<br />
name=Pete Leaning<br />
<br />
[http://tyler-taehee-lee.blogspot.com/feeds/posts/default/-/SBR600]<br />
name=Tae Hee Lee<br />
<br />
<br />
[http://www.kaitlyncallow.com/Blog/?feed=rss2&cat=87]<br />
name=Kaitlyn Callow<br />
face=http://www.kaitlyncallow.com/Dump/kait_avatar.jpg<br />
<br />
[http://www.kaitlyncallow.com/Blog/?feed=rss2&cat=96]<br />
name=Kaitlyn Callow<br />
face=http://www.kaitlyncallow.com/Dump/kait_avatar.jpg<br />
<br />
[http://saad-husain.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Saad Husain<br />
<br />
[http://jevangelos.wordpress.com/feed/]<br />
name=James Evangelista<br />
<br />
# Disabled 2011-04-27 - not a feed link<br />
#[http://sajed481.wordpress.com/SBR600/]<br />
#name=M.A Sajed Shadani<br />
<br />
[http://rizwanhaq.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Rizwan Haq<br />
<br />
[http://tuori.tk/blog/blogs/blog1.php?tempskin=_rss2&cat=15]<br />
name=Matthew Tuori<br />
<br />
[http://ktaraghi.blogspot.com/feeds/posts/default]<br />
name=Khosro Taraghi<br />
<br />
[http://opensourceftw.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Anthony Boccia<br />
<br />
[http://perfectlylogical.wordpress.com/category/sbr600/feed/]<br />
name=Stephen Hall<br />
<br />
[http://rocellaj.wordpress.com/feed/]<br />
name=Rocella Jimenez<br />
<br />
[http://justinpaulmorgan.blogspot.com/feeds/posts/default]<br />
name=Justin Morgan<br />
<br />
[http://gcasella.blogspot.com/feeds/posts/default]<br />
name=Gian-Luca Casella<br />
<br />
[http://archanasahota.com/category/open-source/feed/]<br />
name=Archana Sahota<br />
<br />
[http://pratikamin.wordpress.com/category/sbr600/feed/]<br />
name=Pratik Amin<br />
<br />
[http://syang00.wordpress.com/feed/]<br />
name=Stephanie Yang<br />
<br />
[http://tewestacott.wordpress.com/category/SBR600/feed/]<br />
name=Todd Westacott<br />
<br />
[http://aparda.wordpress.com/category/SBR600//feed/]<br />
name=Andrew Parda<br />
<br />
[http://gjuhasz1.wordpress.com/feed/]<br />
name=Gergely Juhasz<br />
<br />
[http://completefail.wordpress.com/category/SBR600/feed/]<br />
name=Joshua Y. Koh<br />
<br />
[http://myuberwebsite.blogspot.com/feeds/posts/default]<br />
name=Dmitry Artemenko<br />
<br />
[http://cgomes7.wordpress.com/feed/]<br />
name=Cesar Gomes<br />
<br />
[http://supbroseph.wordpress.com/feed/]<br />
name=Houssam haidar<br />
<br />
[http://www.bradchen.com/open-source-feed.xml]<br />
name=Brad Chen (vvasabi)<br />
<br />
[http://asabir.wordpress.com/feed/]<br />
name=Adeel Sabir (asabir)<br />
<br />
[http://libresparks.wordpress.com/category/SBR600/feed/]<br />
name=Alfred Liu<br />
<br />
[http://acook6.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Alan Cook<br />
<br />
[http://coding.shaunofthelive.com/feeds/posts/default/-/oop344]<br />
name=Shaun Hill<br />
<br />
[http://maoli1207.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Mao Hua Li<br />
<br />
# tmp disabled<br />
#[http://fossjon.wordpress.com/feed/]<br />
#name=Jon Chiappetta<br />
<br />
[http://dperit.blogspot.com/feeds/posts/default/-/cdot]<br />
name=David Perit<br />
<br />
[http://szafar8.wordpress.com/tag/cdot/feed/]<br />
name=Salman Zafar<br />
<br />
[http://mbuttu.wordpress.com/category/Open-Source/feed/]<br />
name=Mohammed Buttu<br />
<br />
[http://brianlimtemp.blogspot.com/feeds/posts/default/-/CDOT]<br />
name=Brian Lim<br />
<br />
[http://drigato.wordpress.com/category/open-source/feed/]<br />
name=Denise Rigato<br />
<br />
[http://jbraffoul.wordpress.com/category/open-source/feed/]<br />
name=Jordan Raffoul<br />
<br />
[http://kuznetsovnikita.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Nikita Kuznetsov<br />
<br />
[http://noahgitalis.wordpress.com/category/open-source/feed/]<br />
name=Noah Gitalis<br />
<br />
[http://rhotin.wordpress.com/category/open-source/feed/]<br />
name=Roman Hotin<br />
<br />
[http://nm486.wordpress.com/category/open-source/feed]<br />
name=Stanley Tsang<br />
<br />
[https://brattahlid.wordpress.com/tag/foss/feed/]<br />
name=Abhishek Bhatnagar<br />
<br />
[http://mendozamiche.wordpress.com/category/open-source/feed]<br />
name=Michelle Mendoza<br />
<br />
[http://kenxu99.wordpress.com/category/open-source/feed]<br />
name=Qian (Ken) Xu<br />
<br />
[http://steventseng.wordpress.com/category/open-source/feed/]<br />
name=Ching Wei Tseng (Steven)<br />
<br />
[http://myprogrammingblog.com/category/open-source/feed/]<br />
name=Anatoly Spektor<br />
<br />
[http://jasonmarciniak.wordpress.com/feed/]<br />
name=Jason Marciniak<br />
<br />
[http://hungryr.wordpress.com/category/open-source/feed]<br />
name=Hyungryul Steven Chun<br />
<br />
[http://jbhuestis.wordpress.com/feed/]<br />
name=Jordan Huestis<br />
<br />
[http://nicklmbrt.wordpress.com/feed]<br />
name=Nick Lambert<br />
<br />
<br />
[http://rkyosd.blogspot.com/feeds/posts/default]<br />
name=Keyan Ren<br />
<br />
[http://awong79.blogspot.com/feeds/posts/default]<br />
name=Anthony Wong<br />
<br />
[http://jekyjaw.wordpress.com/category/open-source/feed]<br />
name=Yevgeniy Ivanchenko<br />
<br />
[http://raymondhung.wordpress.com/category/open-source/feed/]<br />
name=Raymond Hung<br />
<br />
[http://topheruppercut.wordpress.com/category/open-source/feed/]<br />
name=Christopher Cheung<br />
<br />
[https://saadism.wordpress.com/feed/]<br />
name=Saad Mohammad<br />
<br />
[http://slee142.blogspot.com/feeds/posts/default]<br />
name=Sangjin (Eric) Lee<br />
<br />
[http://dliscio.wordpress.com/feed]<br />
name=David Liscio<br />
<br />
[http://guandayu.wordpress.com/feed/]<br />
name=Dayu Guan<br />
<br />
[http://elonli.ca/category/sbr600/feed/]<br />
name=Elon Li<br />
<br />
<br />
[http://blog.carsonyong.com/?feed=rss2]<br />
name=Carson Yong<br />
<br />
[http://snaqvi3.wordpress.com/category/open-source/feed/]<br />
name=Saba Naqvi<br />
<br />
[http://burrellaramone.wordpress.com/category/open_source/feed/]<br />
name=Ramone Burrell<br />
<br />
[http://moussa1.wordpress.com/category/open-source/feed/]<br />
name=Moussa Tabcharani<br />
<br />
[http://roottothehead.blogspot.com/feeds/posts/default/-/CDOT]<br />
name=Jordan Cwang<br />
<br />
[http://diogogmt.wordpress.com/category/open-source/feed/]<br />
name=Diogo Golovanevsky Monteiro<br />
<br />
[http://www.anuragbhatnagar.com/category/open-source/feed/]<br />
name=Anurag Bhatnagar<br />
face=http://www.anuragbhatnagar.com/wp-content/uploads/2011/09/anurag1.png<br />
<br />
[http://withs.tumblr.com/tagged/OSD/rss]<br />
name=Jacky Siu<br />
<br />
[http://jjbmiller.wordpress.com/feed/]<br />
name=Jeff Miller<br />
<br />
[http://toomymon.wordpress.com/feed/]<br />
name=Tommy Cho Long Chor<br />
<br />
[http://jsilver999.wordpress.com/category/open-source/feed/]<br />
name=Jesse Silver<br />
<br />
[http://justintrobinson.wordpress.com/category/bigbluebutton/feed/]<br />
name=Justin Robinson<br />
<br />
[http://cchoo2.blogspot.com/feeds/posts/default]<br />
name=Chris Choo<br />
<br />
[http://teddychilai.wordpress.com/category/sbr600/feed/]<br />
name=Chi Hsun Lai<br />
<br />
[http://dsun20.wordpress.com/feed/]<br />
name=Dong Sun<br />
<br />
[http://alberttruong.wordpress.com/category/SBR600/feed/]<br />
name=Albert Truong<br />
<br />
[http://jessefulton.wordpress.com/category/SBR600/feed/]<br />
name=Jesse Fulton<br />
<br />
[http://ligangbory.wordpress.com/feed/]<br />
name=Gang Li<br />
<br />
[http://kliu39.wordpress.com/feed/]<br />
name=Kun Liu<br />
<br />
[http://mariabustoss.wordpress.com/feed/]<br />
name=Maria Bustos-Roman<br />
<br />
[http://kavisbr.blogspot.com/feeds/posts/default]<br />
name=Kavishankar Srivamathevan<br />
<br />
[http://namsbloging.blogspot.com/feeds/posts/default]<br />
name=Nam Nguyen<br />
<br />
[http://dsegree.wordpress.com/feed/]<br />
name=Daniel Segree<br />
<br />
[http://sajed481.wordpress.com/opensource/feed/]<br />
name=Mohammad Abdullah Sajed Shadani<br />
<br />
[http://asalwi123.wordpress.com/feed/]<br />
name=Aries Alwi<br />
<br />
[http://jmulwani.wordpress.com/feed/]<br />
name=Jayaditya Mulwani<br />
<br />
[http://sbr600blog.blogspot.com/feeds/posts/default]<br />
name=Andrew Greene<br />
<br />
[http://chadpilkey.wordpress.com/category/opensource/feed/]<br />
name=Chad Pilkey<br />
<br />
[http://ejtorre.blog.ca/feed/rss2/posts/]<br />
name=Eugene Torre<br />
<br />
[http://lynart.wordpress.com/category/CDOT/feed/]<br />
name=Vince Lee<br />
<br />
[http://stani.ca/?feed=rss2&cat=3]<br />
name=Robert Stanica<br />
<br />
[http://cdot-callaghan.posterous.com/rss.xml?tag=CDOT]<br />
name=Peter Callaghan<br />
<br />
[http://shayanzafar.wordpress.com/category/open-source/feed/]<br />
name=Shayan Zafar Ahmad<br />
<br />
[http://zyu26.wordpress.com/feed/]<br />
name=Zhiping Yu<br />
<br />
[http://stiversc.blogspot.ca/feeds/posts/default/-/OSD600]<br />
name=Michael Stiver-Balla<br />
<br />
[http://maximumou.blogspot.com/feeds/posts/default]<br />
name=Zhi Chang Ou<br />
<br />
[http://www.kypertrast.net/seneca/category/open-source/feed/]<br />
name=Michael Afidchao<br />
<br />
[http://rickeyre.ca/open-source-feed.xml]<br />
name=Rick Eyre<br />
<br />
[http://ayufidin.blogspot.ca/feeds/posts/default]<br />
name=Alon Yufidin<br />
<br />
[http://sudodamha.blogspot.com/feeds/posts/default]<br />
name=Ahmad Taychouri<br />
<br />
[http://amartinencosbr600.blogspot.com/feeds/posts/default]<br />
name=Andrei Martinenco<br />
<br />
[http://sbr600.tumblr.com/rss]<br />
name=Daniel Delidjakov<br />
<br />
[http://ashtramwasser.blogspot.ca/feeds/posts/default]<br />
name=Alina Shtramwasser<br />
<br />
[http://limed3.wordpress.com/category/open-source/feed/]<br />
name=Edwin Lim<br />
<br />
# humphd: Disabled pending face to face discussions (humphd) - inappropriate language, post not within guidelines of planet etiquette.<br />
# caitp: I disagree, harmful language is always censored on these posts. And even if the occasional word slips through, people are<br />
# adults and can handle it.<br />
# ctyler: Temporarily re-disabled per humphd (above) and page locked. 2013-07-01_13:22<br />
#[http://caitpotter.blogspot.com/feeds/posts/default/-/open%20source] <br />
#name=Caitlin Potter<br />
#<br />
#[http://caitpotter.blogspot.com/feeds/posts/default/-/cdot] <br />
#name=Caitlin Potter<br />
<br />
[http://rlawrence5.wordpress.com/feed/]<br />
name=Ryan Lawrence<br />
<br />
[http://okhattab.wordpress.com/feed/]<br />
name=Omarr Khattab<br />
<br />
[http://aadavis1.blogspot.ca//feeds/posts/default]<br />
name=Alexander Davis<br />
<br />
[http://kdayalingam.wordpress.com/category/dpi908/feed]<br />
name=Kowrinanthan Dayalingam<br />
<br />
[http://jcqiu.wordpress.com/feed/]<br />
name=Jiecheng Qiu<br />
<br />
[http://mikeshutov.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Mike Shutov<br />
<br />
[http://avru.wordpress.com/category/open-source/feed/]<br />
name=Anh Tran<br />
<br />
[http://kyle.barnhart.ca/feeds/posts/default/-/Open%20Source]<br />
name=Kyle Barnhart<br />
<br />
[http://gloriaip.wordpress.com/feed/]<br />
name=Gloria Ip<br />
<br />
[http://www.mandeepgarg.wordpress.com/feed/]<br />
name=Mandeep Garg<br />
<br />
[http://bharmidy.blogspot.ca/feeds/posts/default/-/open%20source]<br />
name=Bryce Harmidy<br />
<br />
[http://andrewow.wordpress.com/category/sbr600/feed/]<br />
name=Andrew Oatley-Willis<br />
<br />
[http://dima1086.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Dmytro Kostenyuk<br />
<br />
[http://hapombo.blogspot.ca/feeds/posts/default]<br />
name=Hugo Pombo<br />
<br />
[http://petepabs.wordpress.com/feed/]<br />
name=Peter Valerio<br />
<br />
<br />
[http://sabanane.wordpress.com/feed/]<br />
name=Japheth N.<br />
<br />
[http://rtang12.blogspot.ca/feeds/posts/default]<br />
name=Ruowen Tang<br />
<br />
[http://softwarebuildrun.wordpress.com/feed/]<br />
name=Rudolf R Janns<br />
<br />
[http://wkhan10.wordpress.com/feed]<br />
name=Waqas Khan<br />
<br />
# No more new content here (Andrew 31aug2013)<br />
#[http://senecacd.wordpress.com/feed/]<br />
#name=Seneca-CD Research Project<br />
<br />
[http://blog.marcussaad.com/category/moz/feed/]<br />
name=Marcus Saad<br />
<br />
[http://sedgestuff.wordpress.com/category/open-source-cdot/feed/]<br />
name=Kieran Sedgwick<br />
<br />
[http://alicoding.com/rss/]<br />
name=Ali Al Dallal<br />
<br />
[http://garydengblog.wordpress.com/category/open-source/feed/]<br />
name=Gary Deng<br />
<br />
[http://dylansegna.wordpress.com/feed/]<br />
name=Dylan Segna<br />
<br />
[http://andreikopytov.wordpress.com/category/CDOT/feed/]<br />
name=Andrei Kopytov<br />
<br />
[http://igoryen.wordpress.com/category/CDOT/feed/]<br />
name=Igor Entaltsev<br />
<br />
[http://jasdeep.ca/ruby/feed/]<br />
name=Jasdeep Singh<br />
<br />
[http://echanna.blogspot.ca/feeds/posts/default/-/open-source]<br />
name=Edward Hanna<br />
<br />
[http://nexjmdi.blogspot.com/feeds/posts/default]<br />
name=Yoav Gurevich<br />
<br />
[http://senecahealth.wordpress.com/feed/]<br />
name=Seneca Health Projects Blog<br />
<br />
[http://tqyu.wordpress.com/]<br />
name=Tony Yu<br />
<br />
[http://kwkofler.wordpress.com/category/open-source/feed/]<br />
name=Kevin Kofler<br />
<br />
[http://revenlight.wordpress.com/category/open-source/feed/]<br />
name=Dzmitry Kavalchyk<br />
<br />
[http://mlveis.wordpress.com/category/open-source/feed/]<br />
name=Michael Veis<br />
<br />
[http://maronin.wordpress.com/category/open-source/feed/]<br />
name=Mark Aronin<br />
<br />
[http://elnushaj.wordpress.com/feed/]<br />
name=Elsi Nushaj<br />
<br />
[http://chaoboxie.wordpress.com/category/open-source/feed/]<br />
name=Chaobo Xie<br />
<br />
[http://mbbaig.wordpress.com/category/open-source/feed/]<br />
name=Mohamed Baig<br />
<br />
[http://cholantesh.wordpress.com/category/opensource/feed]<br />
name=Natesh Mayuranathan<br />
<br />
<br />
[http://shavyg2.wordpress.com/category/open-source/feed/]<br />
name=Shavauhn Gabay<br />
<br />
[http://pbouianov.wordpress.com/category/open-source/feed/]<br />
name=Petr Bouianov<br />
<br />
[http://tecknologikk.blogspot.ca/feeds/posts/default/-/sbr600]<br />
name=Taylor Barras<br />
<br />
[http://andeic1.wordpress.com/category/open-source/feed/]<br />
name=Alex Craig<br />
<br />
[http://basyager.wordpress.com/feed/]<br />
name=Slava Basatski<br />
<br />
[http://adow2.wordpress.com/category/opensource/feed/]<br />
name=Ai Dow<br />
<br />
[http://hfazal.wordpress.com/category/open-source/feed/]<br />
name=Husain Fazal<br />
<br />
[http://btulchinsky.wordpress.com/category/open-source/feed/]<br />
name=Barry Tulchinsky<br />
[http://ttran57.blogspot.com/feeds/posts/default]<br />
name=Thanh Tran <br />
<br />
[http://jasoncarman.wordpress.com/category/sbr600/feed/]<br />
name=Jason Carman<br />
<br />
[http://ywen10.blogspot.com/feeds/posts/default]<br />
name=Yue Wen<br />
<br />
[http://nitinprakash.wordpress.com/category/open-source/feed/]<br />
name=Nitin Prakash Panicker<br />
<br />
[http://msousa3.blogspot.com/feeds/posts/default]<br />
name=Michael Sousa<br />
<br />
[http://professorplumpi.wordpress.com/feed/]<br />
name=Richard Kim<br />
<br />
[http://cjiang13.wordpress.com/category/SBR600/feed/]<br />
name=Charley Jiang<br />
<br />
[http://yshin8.blogspot.com/feeds/posts/default]<br />
name=Yonghoon Shin<br />
<br />
[http://sspaleta.wordpress.com/feed/]<br />
name=Shiela Spaleta<br />
<br />
[http://darthjawa.wordpress.com/category/sbr600/cdot-planet/feed/]<br />
name=Dmitry Kozunov<br />
<br />
<br />
[http://matthewtorrance.com/category/osd/feed/]<br />
name=Matthew Torrance<br />
<br />
[http://bzcareermongodb.blogspot.ca/feeds/posts/default]<br />
name=Zakeria Hassan<br />
face=https://0.gravatar.com/avatar/66e5e21053f70a3c30325b392337d54d?d=https%3A%2F%2Fidenticons.github.com%2F01cbc34a00bb2b4209eca3ca9eceb565.png&s=420<br />
<br />
[http://singhrajdeepblog.wordpress.com/feed/]<br />
name=Rajdeep Singh<br />
<br />
[http://www.peymangg.com/feed/]<br />
name=Peyman Mahdi<br />
<br />
[http://kkmusinguzi.wordpress.com/feed/]<br />
name=Keith Musinguzi<br />
<br />
[http://atpenrose.wordpress.com/feed/]<br />
name=Adam Penrose<br />
<br />
[http://jdlatorre.blogspot.ca/feeds/posts/default]<br />
name= Juan Latorre<br />
<br />
<br />
[http://mbustossbr.wordpress.com/feed/]<br />
name=Maria Bustos-Roman<br />
<br />
[http://msmahmood1.blogspot.com/feeds/posts/default/-/opensource]<br />
name=Mohammad Shaheer Mahmood<br />
<br />
[http://alexkotliar.wordpress.com/category/open-source/feed/]<br />
name=Alex Kotliar<br />
<br />
[http://codescriptplay.blogspot.ca/feeds/posts/default/-/opensource]<br />
name=Kajanthan Tharmabalan<br />
<br />
[http://dchenxd.wordpress.com/category/open-source/feed/]<br />
name=Xiaodong Chen<br />
<br />
[http://jespiritucpp.wordpress.com/category/open-source/feed]<br />
name=Jeffrey Espiritu<br />
<br />
<br />
[http://thedib.blogspot.ca/feeds/posts/default]<br />
name=Jose Giagonia<br />
<br />
[http://mkmatthewblog.wordpress.com/feed]<br />
name=Matthew K Wong<br />
<br />
[http://jrromasanta1.wordpress.com/feed/]<br />
name=Jose Romasanta<br />
<br />
[http://shaj02.wordpress.com/feed/]<br />
name=Shajinth Pathmakulaseelan<br />
<br />
[http://jeremyedgell.wordpress.com/category/Programming/feed/]<br />
name=Jeremy Edgell<br />
[http://spo600yg.blogspot.com/feeds/posts/default]<br />
name=Yoav Gurevich<br />
<br />
[http://vprasanth.com/blog/archives/category/spo600-2/feed]<br />
name=Prasanth Vaaheeswaran<br />
<br />
[http://hzhong10.blogspot.ca/feeds/posts/default]<br />
name=Hua Zhong<br />
<br />
[http://nrkemp4.tumblr.com/tagged/spo600/rss]<br />
name=Nick Kemp<br />
<br />
[http://www.shlee.ca/feed/]<br />
name=Sanghyun Lee<br />
<br />
[http://mctenenbaum.wordpress.com/category/open-source/feed]<br />
name=Moshe Tenenbaum<br />
<br />
[http://estereh.wordpress.com/category/spo600/feed]<br />
name=Eugen (Jevenijs) Sterehov<br />
<br />
[http://compiledsprawl.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Matthew Grosvenor<br />
<br />
[http://sinomai.wordpress.com/category/planet-cdot/feed/]<br />
name=Matt Jang<br />
<br />
[http://admixdev.com/category/programming-2/feed/]<br />
name=Alexander Snurnikov<br />
</pre></div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Planet_CDOT_Feed_List&diff=103824Planet CDOT Feed List2014-01-21T00:49:30Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>= Introduction =<br />
<br />
Seneca students and faculty working on open source related projects and research, as well as some faculty, students, and researchers from other institutions, use [http://zenit.senecac.on.ca/~chris.tyler/planet/ Planet CDOT] to aggregate their blogs. This page contains the information about who is blogging in [http://www.planetplanet.org/ Planet Feed Reader format] and serves as the feed configuration for the planet.<br />
<br />
If you do not have an existing blog, you can open a free account at [http://wordpress.com/ Wordpress.com] or [https://www.blogger.com/ Blogger.com] or you can set up your own blog software such as [http://www.s9y.org Serendipity].<br />
<br />
'''Note:''' Additions to the feed list will not take effect until they are merged into the Planet configuration, which is an automatic process scheduled at regular intervals. If you add a feed and do not see it picked up in the Planet within three hours, please check your feed entry carefully and then contact [[User:Chris Tyler|Chris Tyler]] .<br />
<br />
= Requirements =<br />
<br />
* Blog postings fed to the planet must conform to the [[Blog Guidelines]].<br />
* Feeds that are inactive for a significant period of time may get deleted from this list.<br />
<br />
= Using a Tagged/Category Feed =<br />
<br />
A tagged or category feed includes only articles that are tagged with particular keywords or placed in a particular topic category. This can be useful for sending only selected posts to the planet.<br />
<br />
These are the URL formats for tagged or category feeds on popular blogging services/software:<br />
<br />
* [http://www.wordpress.com Wordpress]: <code><nowiki>[http://</nowiki>''blog-user-name''.wordpress.com/category/''category-name''/feed/]</code><br />
* [http://blogger.com Blogger]: <code><nowiki>[http://</nowiki>''blog-user-name''.blogspot.com/feeds/posts/default/-/''category-name'']</code><br />
* [http://s9y.org Serendipity]: <code><nowiki>[http://</nowiki>''blog-main-url''/index.php?/feeds/categories/''cateogrynumber''-''categoryname'']</code><br />
<br />
= Feed Info Format =<br />
<br />
You can add your blog's [http://en.wikipedia.org/wiki/RSS_(file_format) RSS feed] at the end of the list below by specifying the following:<br />
<br />
# The URL to your blog's open source Atom or [http://en.wikipedia.org/wiki/RSS_(file_format) RSS Feed] (i.e., a category or tag). NOTE: Please do not put the URL to your blog -- use the URL for your feed. Please do not use the feed for your entire blog (unless your blog contains only open source-related postings). We only want open source related content.<br />
# Your name as you want it to appear in the list of names for the planet<br />
# Optionally, a URL to a [http://en.wikipedia.org/wiki/Hackergotchi hackergotchi] ([http://wouterverhelst.livejournal.com/21322.html how to]). Your picture should be an 65x85 PNG with a transparent background.<br />
<br />
= Feeds =<br />
<br />
<pre><br />
[http://pphanopensource.blogspot.ca/feeds/posts/default/]<br />
name=Phuoc Phan<br />
<br />
<br />
[http://amkonopko.wordpress.com/feed/]<br />
name=Amadeus Konopko<br />
<br />
[http://fahmadi6.wordpress.com/feed/]<br />
name=Faranak Ahmadi<br />
<br />
[http://rsbr600.blogspot.ca/feeds/posts/default]<br />
name=Ronald Hernandez<br />
<br />
[http://sdealmeida.com/category/open-source/feed/]<br />
name=Simon de Almeida<br />
<br />
[http://jamaljalali.wordpress.com/feed/]<br />
name=Jamal Jalali-Dolatshahi<br />
<br />
[http://aadavis1.blogspot.ca/feeds/posts/default]<br />
name=Alexander Davis<br />
<br />
[http://thevakaran.wordpress.com/category/open-source/feed/]<br />
name=Thevakaran Virutthasalam<br />
<br />
[http://kyu6.wordpress.com/feed/]<br />
name=Keren Yu <br />
<br />
[http://chestersbr600.wordpress.com/]<br />
name=VicChester Ngo<br />
<br />
[http://cty6sbr600.wordpress.com/feed/]<br />
name=Kalpaniya Parmar<br />
<br />
[http://cty6.wordpress.com/feed/]<br />
name=Luis Fuentes<br />
<br />
[http://sbr600.wordpress.com/2012/01/26/build-from-source/]<br />
name=Rachit Chaudhary (DJ)<br />
<br />
[http://sbr600.wordpress.com/2012/01/26/introduction/]<br />
name=Rachit Chaudhary (DJ)<br />
<br />
[http://craigcain.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Craig Cain<br />
<br />
<br />
[http://i0x777.wordpress.com/feed/]<br />
name=Nikhil Sharma<br />
<br />
[http://wolfleaderslair.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Dennis Villasenor<br />
<br />
[http://gkrilov.com/category/open-source/feed/]<br />
name=Greg Krilov<br />
<br />
[http://rubensmaximus.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Rubens Maximus (GameArtist)<br />
<br />
[http://fedoraisfun.wordpress.com/category/open_source/feed/]<br />
name=Alan Lau<br />
<br />
[http://www.spectakular.com/category/open-source/feed/]<br />
name=Simon Jung<br />
<br />
[http://james.boelen.ca/category/open_source/feed/]<br />
name=James Boelen<br />
<br />
[http://jbuckley.ca/category/open-source/feed/]<br />
name=Jon Buckley<br />
<br />
[http://mbrzuzy.wordpress.com/category/open-source/feed/]<br />
name=Marcin Brzuzy<br />
<br />
[http://ben1amin.wordpress.com/category/seneca/feed/]<br />
name=Benjamin Chalovich<br />
<br />
[http://edghardest1.wordpress.com/category/open-source-topics/feed/]<br />
name=Ed Arvelaez<br />
<br />
[http://www.ashkansotoudeh.com/?tag=coding-2&feed=rss2]<br />
name=Ashkan Sotoudeh<br />
<br />
[http://dboddie46.wordpress.com/category/SBR600A/feed/]<br />
name=Derrick Boddie<br />
<br />
[http://aali83.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Ahmad Ali<br />
<br />
[http://gr8can8dian.wordpress.com/category/sbr600/feed/]<br />
name=Lorin Soura<br />
<br />
[http://kirtonmike.wordpress.com/category/SBR600/feed/]<br />
name=Mike Kirton<br />
<br />
[http://fuzzux.wordpress.com/category/SBR600/feed/]<br />
name=Tim Furzer<br />
<br />
[http://nageyi.wordpress.com/feed/]<br />
name=Faisal Nageyi<br />
<br />
[http://KrazyDre.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Andrei Artamonov<br />
<br />
[http://mjcorsame.wordpress.com/feed/]<br />
name=Michael John Corsame<br />
<br />
[http://msbreezy12.wordpress.com/category/SBR/feed/]<br />
name=Chantell Mcintosh<br />
<br />
# Disabled 2011-04-28 - empty blog<br />
#[http://mrtait1.blogspot.com/feeds/posts/default/-/oop344]<br />
#name=Matthew Tait<br />
<br />
[http://sbr600cabbott.blogspot.com/feeds/posts/default]<br />
name=Chris Abbott<br />
<br />
[http://kopay.wordpress.com/category/sbr600-win2011/feed]<br />
name=Pirathapan Sivalingam<br />
<br />
[http://mysnogorodsky.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Marina Ysnogorodsky<br />
<br />
[http://asa.veryusefulinfo.com/?feed=rss2]<br />
name=Ali Samimi<br />
<br />
# Disabled 2011-04-28 - empty blog<br />
#[http://coreyangus.blogspot.com/feeds/posts/default/-/oop344]<br />
#name = Corey Angus<br />
<br />
[http://wsong18.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Wei Song<br />
<br />
[http://davidsosd60020102blog.blogspot.com/feeds/posts/default]<br />
name=David Takasaki<br />
<br />
[http://zwang98.blogspot.com/feeds/posts/default]<br />
name=Joe Wang<br />
<br />
[http://sbr700.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Jonathan Deni<br />
#face=https://techontherun.sslpowered.com/techontherun.ca/jonthumb.png<br />
<br />
[http://dgilloch.blogspot.com/feeds/posts/default]<br />
name=Daniel Gilloch<br />
<br />
[http://jmchen11.wordpress.com/feed/]<br />
name=Jianming Chen<br />
<br />
[http://paulfedora.wordpress.com/tag/cdot/feed/]<br />
name=Paul Whalen<br />
<br />
[http://maxamaxim.wordpress.com/tag/cdot/feed/]<br />
name=M A <br />
<br />
[http://dmchisho.wordpress.com/feed/]<br />
name=David Chisholm<br />
<br />
[http://pokerface3.blogspot.com/feeds/posts/default/-/SBR?alt=rss]<br />
name=David Cabral<br />
<br />
[http://zbhuang1.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Zhibin Huang<br />
<br />
[http://sidsbr.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Sadiki Latty<br />
<br />
[http://orel60.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Or-el Mousaffi<br />
<br />
[http://aryafarzan.wordpress.com/category/OOP344/feed/]<br />
name=Arya Farzan<br />
<br />
[http://dsventura.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Dan Ventura<br />
<br />
[http://chrisdecairos.ca/tag/open-source/feed]<br />
name=Christopher DeCairos<br />
<br />
[http://acfunktron.blogspot.com/feeds/posts/default]<br />
name=Anton Chan<br />
<br />
[http://adaniel3.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Arlene Daniel<br />
<br />
[http://tyrant911-processingdotjs.blogspot.com/feeds/posts/default/-/processing.js]<br />
name=Alex Londono<br />
<br />
<br />
[http://ausleyj.blogspot.com/feeds/posts/default]<br />
name=Ausley Johnson<br />
<br />
[http://arminoop344.blogspot.com/feeds/posts/default]<br />
name=Armin Kumarshellah<br />
<br />
[http://cloudscorpion.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Joseph Hughes<br />
<br />
[http://travisrawn.blogspot.com/feeds/posts/default]<br />
name=Travis Rawn<br />
<br />
[http://jmpiltz.blogspot.com/feeds/posts/default]<br />
name=Jonathan Piltz<br />
<br />
[http://andrewgrimo.wordpress.com/category/open-source/feed/]<br />
name=Andrew Grimo<br />
<br />
[http://mschranz.wordpress.com/category/open_source/feed/]<br />
name=Matthew Schranz<br />
<br />
[http://apvsbr700.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Alex Vlahopoulos<br />
#face=https://techontherun.sslpowered.com/techontherun.ca/alexthumb.png<br />
<br />
[http://asalga.wordpress.com/category/open-source/feed/]<br />
name=Andor Salga (asalga)<br />
<br />
[http://jabhad.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Mohamed Aden<br />
<br />
[http://jonathandeni.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Jonathan Deni<br />
#face=https://techontherun.sslpowered.com/techontherun.ca/jonthumb.png<br />
<br />
[http://manoutoftime.wordpress.com/category/open-source/feed/]<br />
name=Konstantin Novichikhin<br />
<br />
[http://scorchedicee.wordpress.com/category/Seneca/feed/]<br />
name=Adam Sone<br />
<br />
# Temporarily disabled due to non-Seneca posts 2014-01-06 CTyler<br />
#[http://murraysaul.wordpress.com/feed/]<br />
#name=Murray Saul<br />
<br />
[http://xwn740arcadeproject.blogspot.com/feeds/posts/default]<br />
name=Arcade Project - LUX Group@<br />
#face=http://matrix.senecac.on.ca/~mpaivaneto/ourbaby.png<br />
<br />
[http://feeds.feedburner.com/lsblakk_open-source]<br />
name=Lukas Blakk (lsblakk)<br />
#face=http://avnerd.tv/sharedFiles/lukas_hackergotchi.png<br />
<br />
[http://nashutzu.blogspot.com/feeds/posts/default]<br />
name=George Popescu (GeorgeP)<br />
<br />
[http://blog.chris.tylers.info/index.php?/feeds/categories/20-Seneca-Planet.rss]<br />
name=Chris Tyler (ctyler)<br />
face=http://zenit.senecac.on.ca/~chris.tyler/chris_tyler_hackergotchi_4a.png<br />
<br />
[http://vocamus.net/dave/?feed=rss2&category_name=Seneca]<br />
name=David Humphrey<br />
<br />
[http://gratnam1.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Gajendran Ratnam (gratnam1)<br />
<br />
[http://senecajon.blogspot.com/feeds/posts/default]<br />
name=Jonathan Cheung (jcheung23)<br />
<br />
# Disabled 2011-04-28 - blog was removed<br />
#[http://blog.markparuzel.com/feed/]<br />
#name=Mark Paruzel<br />
<br />
[http://mmszuto.blogspot.com/feeds/posts/default]<br />
name=Michael Szutu<br />
<br />
[http://lsdaly.blogspot.com/feeds/posts/default]<br />
name=Louis Daly (lsdaly)<br />
<br />
# Disabled 2009-01-25 due to 404's (domain expired)<br />
#[http://www.foobartastic.com/feed/]<br />
#name=Tom Aratyn<br />
<br />
[http://bhearsum.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Ben Hearsum<br />
<br />
# Following feed is invitation-only. Disabled 2010-09-23 CTyler<br />
#[http://www.jyzyy.blogspot.com/feeds/posts/default/-/opensource]<br />
#name=Jyoti<br />
<br />
# Re-enabled 2011-04-29 - new blog URL<br />
# Disabled 2009-09-15 due to 404's (site rearranged?)<br />
[http://tea.cesaroliveira.net/archives/tag/seneca/feed]<br />
name=Cesar Oliveira<br />
<br />
[http://r3ap3r.wordpress.com/category/seneca/feed]<br />
name=Brandon Collins<br />
<br />
# Disabled 2011-04-28 - blog was deleted<br />
#[http://jrgoncal.blogspot.com/feeds/posts/default]<br />
#name=Justin Goncalves (jrgoncal)<br />
#face=http://img517.imageshack.us/img517/9865/bearzp5.jpg<br />
<br />
# Disabled 2011-04-28 - blog is now private<br />
#[http://tlo5.blogspot.com/feeds/posts/default]<br />
#name=Tommy Lo (tlo5)<br />
<br />
[http://armenzg.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Armen Zambrano G. (armenzg)<br />
<br />
[http://mikemoz.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Michael Mullin<br />
<br />
[http://mikemoz.blogspot.com/feeds/posts/default/-/Mozilla_GFX]<br />
name=Michael Mullin<br />
<br />
# Returned 410 on 2008-09-13 - disabled CTyler<br />
#[http://rueenfiez.wordpress.com/category/open-source/feed/]<br />
#name=Rueen Fiez<br />
<br />
# Returning 404 on 2008-09-13 - disabled CTyler<br />
#[http://jsafavi.wordpress.com/category/open-source/feed/]<br />
#name=Jason Safavi<br />
<br />
[http://vlam6.wordpress.com/category/open-source/feed/]<br />
name=Vincent Lam<br />
<br />
[http://dejant.blogspot.com/feeds/posts/default]<br />
name=Dejan Tolj<br />
<br />
[http://shivaris.blogspot.com/feeds/posts/default/-/OSD600]<br />
name=Hien Huynh<br />
<br />
[http://raynrant.blogspot.com/feeds/posts/default]<br />
name=Andrew Raynier (JM)<br />
face=http://zenit.senecac.on.ca/wiki/imgs/Hackergotchi.png<br />
<br />
[http://vijeysdps909.blogspot.com/feeds/posts/default]<br />
name=Vijey Bala<br />
<br />
[http://sedejong.blogspot.com/feeds/posts/default]<br />
name=Shomar Dejonge<br />
<br />
[http://dbaranski.wordpress.com/category/open-source/feed/]<br />
name=Dominic Baranski<br />
<br />
#[http://crashopensource.wordpress.com/category/open-source/feed/]<br />
#name=Lukas Blakk<br />
<br />
[http://kmsingh.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Kerry M. Singh<br />
<br />
[http://tjduavis.wordpress.com/category/open-source/feed/]<br />
name=Timothy Duavis<br />
<br />
# Disabled 2011-04-28 - entire website is missing<br />
#[http://ashughes.com/?q=taxonomy/term/2/0/feed]<br />
#name=Anthony Hughes<br />
<br />
[http://opensourcekennethlee.blogspot.com/feeds/posts/default]<br />
name=Kenneth Lee<br />
<br />
[http://cleung.wordpress.com/category/Seneca/feed/]<br />
name=Catherine Leung<br />
<br />
[http://dtheosab.wordpress.com/category/open-source/feed/]<br />
name=Daino Theosabrata<br />
<br />
# This is my old blog<br />
[http://simon-jung.blogspot.com/feeds/posts/default]<br />
name=Simon Jung (old)<br />
<br />
[http://aeraj.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=AJ Rehman<br />
<br />
[http://xrayon.blogspot.com/feeds/posts/default]<br />
name=Fima Kachinski<br />
<br />
[http://littlesvr.ca/grumble/category/safeforseneca/feed/]<br />
name=Andrew Smith<br />
<br />
# No more new posts here (Andrew 31Aug2013)<br />
#[http://littlesvr.ca/masters/feed]<br />
#name=Andrew Smith (master's)<br />
<br />
[http://jbopensrc.wordpress.com/category/open-source/feed]<br />
name=Jesse Buchanan<br />
<br />
[http://ayhfung.blogspot.com/feeds/posts/default]<br />
name=Andrew Fung<br />
<br />
# Returned 404 on 2008-09-13 - disabled CTyler<br />
#[http://sloose.wordpress.com/category/open-source/feed/]<br />
#name=Peter Ljubanovic<br />
<br />
[http://mozcoz.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Amit Gundu<br />
<br />
# Changed CTyler 2009-02-12 from [http://www.blogger.com/feeds/15922666655846514311/blogs]<br />
[http://dsmukherji.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Devashish<br />
<br />
[http://yhan11.wordpress.com/category/open-source/feed]<br />
name=Yongsheng Han<br />
<br />
[http://peter.sykokillers.com/category/open-source/feed/]<br />
name=Peter Chan<br />
<br />
[http://www.c3dl.org/index.php/category/c3dl-dev/feed]<br />
name=Seneca Canvas3D Team<br />
<br />
# Updated 2011-04-28 - corrected feed URL<br />
[http://peterevanoff.wordpress.com/category/open-source/feed/]<br />
name=Peter Evanoff<br />
<br />
# Disabled 2011-04-28 - flagged as a malware-loaded site by Google<br />
<br />
#[http://radoye.net1zen.com/wp-rss2.php?cat=3]<br />
#name=Radovan Nesic<br />
<br />
[http://blog.cresencia.ca/category/open-source/osd600/feed/]<br />
name=Joseph Cresencia<br />
<br />
[http://bertenshaw.blogspot.com/feeds/posts/default]<br />
name=David Bertenshaw<br />
<br />
[http://ljubomirgorscak.blogspot.com/feeds/posts/default]<br />
name=Ljubomir Gorscak<br />
<br />
[http://sameropensource.blogspot.com/feeds/posts/default]<br />
name=Samer Ziadeh (samer)<br />
<br />
# Following feed not working and temporarily disabled<br />
# 2010-09-23 by CTyler<br />
#[http://jamesboston.ca/cms/taxonomy/term/1/0/feed]<br />
#name=James Boston<br />
#face=http://jamesboston.ca/hackergotchi.png<br />
<br />
[http://dailypackage.fedorabook.com/index.php?/feeds/index.rss2]<br />
name=Fedora Daily Package<br />
<br />
[http://blog.fardad.com/feeds/posts/default/-/Seneca]<br />
name=Fardad Soleimanloo<br />
<br />
[http://selmys.wordpress.com/category/opensource/feed]<br />
name=John Selmys<br />
face=http://cs.senecac.on.ca/~selmys/john_selmys_hackergotchi.png<br />
<br />
[http://pconstantino.wordpress.com/feed]<br />
name=Patricia Constantino<br />
<br />
[http://bombshelter13.blogspot.com/feeds/posts/default]<br />
name=Katherine Masseau<br />
<br />
[http://zadkielm.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Ezadkiel Marbella<br />
<br />
[http://blog.sidkalra.com/category/opensource/feed]<br />
name=Sid Kalra<br />
<br />
[http://pplam3.blogspot.com/feeds/posts/default]<br />
name=Patrick Lam<br />
<br />
# Disabled 2011-04-28 - blog is now private<br />
#[http://twlai1.blogspot.com/feeds/posts/default]<br />
#name=Tony Lai<br />
<br />
[http://dee132.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Chris Bishop<br />
<br />
# Updated 2011-04-28 - updated feed URL<br />
[http://zghansar.wordpress.com/category/open-source/feed/]<br />
name=Zaid Ghansar<br />
face=http://www.alhudainstitute.ca/zaid/z.png<br />
<br />
[http://aaronmt.github.com/atom.xml]<br />
name=Aaron Train<br />
face=http://matrix.senecac.on.ca/~amtrain/other/mypic.png<br />
<br />
[http://scottosd.blogspot.com/feeds/posts/default/-/Open%20Source/]<br />
name=Scott Lunel<br />
<br />
# Updated 2009-04-16, new blog. - scarter4<br />
# Disabled 2009-11-27 due to wrong feed URL<br />
#[http://scarter4.wordpress.com/category/seneca/]<br />
#name=Stephen Carter<br />
<br />
# Disabled 2009-01-23 CTyler due to 404s<br />
#[http://shdinis.blogspot.com/feeds/posts/default]<br />
#name=Shawn Dinis<br />
<br />
[http://belligero.org/index.php?option=com_content&view=section&id=1&format=feed&type=rss]<br />
name=Jason Tarka<br />
<br />
# Updated 2011-04-28 - no more tag, but still Seneca related<br />
[http://petermcintyre.wordpress.com/feed/]<br />
name=Peter McIntyre<br />
<br />
[http://vesperrin.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Leonard Lee (vesper)<br />
<br />
[http://jsdoodnauth.wordpress.com/category/open-source/feed/]<br />
name=Joshua Doodnauth<br />
<br />
[http://johnhford.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=John Ford (John64)<br />
<br />
[http://mohaksblog.blogspot.com/feeds/posts/default]<br />
name=Mohak Vyas<br />
#face=http://matrix.senecac.on.ca/~mdvyas/MohakVyas.png<br />
<br />
[http://pdirezze.blogspot.com/feeds/posts/default]<br />
name=Paul DiRezze<br />
<br />
# Following link no longer valid. Disabled 2010-09-23 CTyler<br />
#[http://www.ndaversa.com/category/open-source/feed]<br />
#name=Nino D'Aversa<br />
<br />
[http://miltonpaiva.wordpress.com/feed/]<br />
name=Milton Paiva<br />
#face=http://matrix.senecac.on.ca/~mpaivaneto/orkut.png<br />
<br />
[http://de-luxer.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Nestor Chan<br />
#face=http://matrix.senecac.on.ca/~tnchan/n516840997_9173.PNG<br />
<br />
[http://varinderjhand.wordpress.com/feed/]<br />
name=Varinder Singh <br />
<br />
[http://ajhooper.blogspot.com/feeds/posts/default]<br />
name=Aaron Hooper<br />
<br />
[http://nadavid.blogspot.com/feeds/posts/default]<br />
name=Neil David<br />
<br />
[http://cdpatel1.blogspot.com/feeds/posts/default]<br />
name=Chinmay Patel<br />
#face=http://www.geocities.com/chinmay_patel@ymail.com/chinmay.jpg<br />
<br />
[http://jvalianes.blogspot.com/feeds/posts/default]<br />
name=Jesse Valianes<br />
<br />
[http://bbarcick.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Bartosz Barcicki<br />
<br />
[http://heidenreich.wordpress.com/tag/seneca-college/feed/]<br />
name=Michal Heidenreich<br />
<br />
[http://kezhong.wordpress.com/feed/atom/]<br />
name=Kezhong Liang <br />
<br />
[http://wfred.wordpress.com/category/open-source/feed/]<br />
name=Fred Wang<br />
<br />
[http://jsinghfoss.wordpress.com/category/spring-framework/feed/]<br />
name=Jatinder Singh<br />
<br />
[http://rparsi.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Rahi Parsi<br />
<br />
# Changed 2011-04-28 - missing a capital "S" from Seneca to display feed<br />
[http://aaronrey15.blogspot.com/feeds/posts/default/-/Seneca]<br />
name=Aaron Chan<br />
<br />
# Disabled 2011-04-28 - posts were deleted, empty feed<br />
#[http://flashalive.wordpress.com/category/Open%20Source/feed/]<br />
#name=Ryan Wang<br />
<br />
[http://kvuhome.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Khanh Vu<br />
<br />
[http://daeseonmoon.wordpress.com/category/open-source/feed/]<br />
name=Daeseon Moon<br />
<br />
[http://abraini.wordpress.com/category/seneca/feed/]<br />
name=Andrew Braini<br />
<br />
[http://minicheong.blogspot.com/feeds/posts/default]<br />
name=Frankie Law<br />
<br />
# Following feed changed from http://www.heyqule.net/blog/tech/oss/feed<br />
# on 2010-09-23 by CTyler.<br />
[http://www.heyqule.net/taxonomy/term/44/0/feed]<br />
name=Allen JF Xie (heyqule)<br />
<br />
[http://farhadnorouzi.blogspot.com/feeds/posts/default]<br />
name=Farhad Norouzi<br />
<br />
[http://jdeport.wordpress.com/category/software-development/open-source/feed/]<br />
name=John Dang<br />
<br />
[http://pliu.wordpress.com/category/open-source/feed/]<br />
name=Peter Liu<br />
<br />
# Feed not working - temporarily disabled 2010-09-23 CTyler<br />
#[http://www.jerrypau.ca/?feed=rss2&cat=3]<br />
#name=Jerry Pau<br />
#face=http://www.jerrypau.ca/blog-face-1.png<br />
<br />
[http://blog.wikiscraps.com/feeds/posts/default/-/oss]<br />
name=M. Mead Armsby (mead)<br />
<br />
[http://paritosha.blogspot.com/feeds/posts/default]<br />
name=Paritosh Aggarwal(paritosh1010)<br />
<br />
# Private blog. Disabled 2010-09-23 CTyler.<br />
#[http://myblog110.wordpress.com/category/open-source/feed]<br />
#name=Tahereh<br />
<br />
# Disabled 2011-04-28 - empty feed, all posts were removed<br />
#[http://challenger110.wordpress.com/category/software-development/open-source/censored/feed/]<br />
#name=Davoud Salahi Rad<br />
<br />
[http://wb-os.blogspot.com/feeds/posts/default]<br />
name=Le Yang<br />
<br />
[http://garykwong.wordpress.com/category/education/feed/]<br />
name=Gary Kwong (nth10sd)<br />
<br />
[http://yuenhoe.co.cc/blog/category/mozilla/feed/]<br />
name=Lim Yuen Hoe (moofang)<br />
<br />
# Disabled 2011-04-27 - empty feed, needs to be udpated<br />
#[http://tonychestnut.wordpress.com/category/mozilla/ubiquity/feed/]<br />
#name=Vu Dinh The (tonyvu)<br />
<br />
[http://opensourceproject.wordpress.com/category/open-source/feed/]<br />
name=Nabeel Khan (nkhan26)<br />
<br />
# Disabled 2011-04-27 - suspended domain<br />
#[http://solfu.net/tech/category/personas-for-thunderbird/feed/]<br />
#name=Yaoquan (seith)<br />
<br />
[http://xiajunshi.wordpress.com/category/open-source/feed/]<br />
name=Shelley Shi<br />
<br />
[http://hendrikinmozilla.wordpress.com/feed/]<br />
name=Hendrik<br />
<br />
[http://t3rrychan.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Terry Chen (jchen124)<br />
<br />
[http://blog.bchao.ca/feeds/posts/default?alt=rss]<br />
name=Boris Chao<br />
<br />
[http://ahiltssbr700.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Adam Hilts<br />
<br />
[http://ysasaki600.wordpress.com/feed/]<br />
name=Yu Sasaki<br />
<br />
[http://enderstruth.wordpress.com/category/open-source/feed/]<br />
name=Roger Dicke<br />
<br />
[http://wobblyretroaction.blogspot.com/feeds/posts/default/-/Open%20source]<br />
name=Matthew Lam<br />
<br />
[http://asydik.wordpress.com/category/professional/open-source/feed/]<br />
name=Mickael Medel (aSydiK)<br />
<br />
[http://cwdesautels.blogspot.com/feeds/posts/default]<br />
name=Carl Desautels<br />
<br />
[http://rselby-oop344.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Remington Selby<br />
<br />
[http://mikey-osd600a.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Michael Dennis<br />
<br />
# Disabled 2011-04-27 - empty blog<br />
#[http://tjprogramming.blogspot.com/feeds/posts/default/-/seneca]<br />
#name=Timothy Catibog<br />
<br />
[http://horndavid.blogspot.com/feeds/posts/default?alt=rss]<br />
name=David Horn<br />
<br />
[http://annasob.wordpress.com/feed/]<br />
name=Anna Sobiepanek<br />
<br />
[http://drozhkov.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Dmitriy Rozhkov<br />
<br />
[http://www.hodgin.ca/?feed=rss2&cat=4]<br />
name=Daniel Hodgin<br />
<br />
[http://xderick.blogspot.com/feeds/posts/default/-/OSD]<br />
name=Yong Hong<br />
<br />
# This next link does not lead to an RSS or Atom feed. Disabled 2009-10-25 by CTyler.<br />
#[http://hoonkoon.blogspot.com/2009/09/oop344.html]<br />
#name=Taehoon Kim<br />
<br />
[http://s2000c.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Sunny Chau<br />
<br />
# This next link does not lead to an RSS or Atom feed. Disabled 2009-10-25 by CTyler.<br />
#[http://s2000c.blogspot.com/2009/09/oop344c.html]<br />
#name=Sunny Chau<br />
<br />
[http://kxu9.blogspot.com/feeds/posts/default]<br />
name=Kai Xu<br />
<br />
[http://oop-era.blogspot.com/feeds/posts/default]<br />
name=Eric Austerberry<br />
<br />
[http://docsage.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Eric Dell<br />
<br />
[http://ehren.wordpress.com/category/Seneca/feed/]<br />
name=Ehren Metcalfe<br />
<br />
[http://bsmith19.wordpress.com/category/Seneca/feed/]<br />
name=Brandon Smith<br />
<br />
[http://dcucereavii.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Diana Cucereavii<br />
<br />
# Disabled 2011-04-27 - site unreachable<br />
#[http://www.savantosis.com/?feed=rss2&cat=3]<br />
#name=Justin Robertson<br />
<br />
[http://paul-oop344.blogspot.com/feeds/posts/default/]<br />
name=Paul Repasi<br />
<br />
[http://istessema.wordpress.com/category/oop344/feed/]<br />
name=Iyosias Tessema<br />
<br />
[http://nedape.blogspot.com/feeds/posts/default]<br />
name=Neda Pezeshki<br />
<br />
[http://justletmepassoop344.blogspot.com/feeds/posts/default]<br />
name=Brian Parreno<br />
<br />
[http://dliu53.wordpress.com/category/open-source/feed/]<br />
name=Donghui Liu<br />
<br />
# Disabled 2011-04-27 - site not found<br />
#[http://oopblog.tdotshack.net/feeds/posts/default/-/OOP344]<br />
#name=Ryan Alexander<br />
<br />
[http://oop344ylseow.blogspot.com/feeds/posts/default]<br />
name=Yip Lim, Seow<br />
<br />
[http://mercedes-oop344.blogspot.com/feeds/posts/default]<br />
name=Suwon An<br />
<br />
[http://dtychshenko.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Dmitriy Tychshenko<br />
<br />
[http://victran.blogspot.com/feeds/posts/default/-/OOP344]<br />
name=Victor Tran<br />
<br />
# Changed 2011-04-27 - updated feed URL to proper<br />
[http://krazyazn.blogspot.com/feeds/posts/default]<br />
name=Michael Lin<br />
<br />
[http://xshi18.blogspot.com/feeds/posts/default]<br />
name=Xiaozhe Shi<br />
<br />
[http://feihong-xiong.blogspot.com/feeds/posts/default]<br />
name=Feihong Xiong<br />
<br />
# Changed 2011-11-01 - created category just for PlanetCDOT<br />
[http://orbitalstation.wordpress.com/category/planetcdot/feed/]<br />
name=Hasan (northWind) Kamal-Al-Deen<br />
face=http://matrix.senecac.on.ca/~hkamal-al-deen/images/Exclaim65x85.png<br />
<br />
[http://hduan2.wordpress.com/feed/]<br />
name= Haoliang Duan<br />
<br />
[http://anastasias-myblog.blogspot.com/feeds/posts/default/-/OOP344]<br />
name= Anastasia Semionova<br />
<br />
[http://franksun123.blogspot.com/feeds/posts/default/]<br />
name= Dong Sun<br />
<br />
[http://rkyoop344.blogspot.com/feeds/posts/default/]<br />
name=Keyan Ren<br />
<br />
[http://ctran13.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Chi-Lea Tran<br />
<br />
[http://szymonsoop.blogspot.com/feeds/posts/default/]<br />
name= Szymon Ahmed<br />
<br />
[http://ywang268.blogspot.com/feeds/posts/default/]<br />
name=Yu Wang<br />
<br />
[http://wangcong422.blogspot.com/feeds/posts/default/]<br />
name=Cong Wang<br />
<br />
[http://dennyp.wordpress.com/category/Seneca/feed/]<br />
name=Denny Papagiannidis<br />
<br />
# Blog not found. Disabled 2010-09-23 CTyler.<br />
#[http://java-chinmay.blogspot.com/feeds/posts/default]<br />
#name= Chinmay Patel<br />
<br />
[http://saecob.blogspot.com/feeds/posts/default/-/OpenSource]<br />
name= Sergiu Ecob<br />
<br />
# Disabled 2011-04-27 - blog deleted<br />
#[http://satijas.wordpress.com/category/OOP344/feed/]<br />
#name=Sasha Atijas<br />
<br />
# 404. Disabled 2010-09-23 CTyler.<br />
#[http://auzix.com/seneca/?feed=rss2]<br />
#name=Tyler Hackwood<br />
<br />
#[http://starbuck-blog.blogspot.com/feeds/posts/default]<br />
#name=Verity Li<br />
<br />
[http://gkrilov.blogspot.com/feeds/posts/default]<br />
name=Greg Krilov<br />
<br />
[http://qinzhi2001.blogspot.com/feeds/posts/default]<br />
name=David Chen<br />
<br />
[http://tchen-oop344.blogspot.com/feeds/posts/default]<br />
name=Terence Chen<br />
<br />
[http://opp344-yxue.blogspot.com/feeds/posts/default]<br />
name=Yong Xue<br />
# Disabled 2011-04-28 - had 2 other duplicate feeds<br />
# http://opp344-yxue.blogspot.com/feeds/posts/default/-/seneca<br />
# http://opp344-yxue.blogspot.com/feeds/posts/default/-/OOP344<br />
<br />
[http://ttsuji1.blogspot.com/feeds/posts/default]<br />
name=Trevor Tsuji<br />
<br />
[http://oyoung4.blogspot.com/feeds/posts/default]<br />
name=Oliver Young<br />
<br />
[http://minyxo.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Edward Sin<br />
<br />
# Blog not found - disabled 2010-09-23 CTyler<br />
#[http://oop344f09-niki.blogspot.com/feeds/posts/default]<br />
#name=Niki Simmalavong<br />
<br />
[http://jdbcdps.blogspot.com/feeds/posts/default]<br />
name=Julia Vasserman<br />
<br />
[http://shunyao-cpa.blogspot.com/feeds/posts/default]<br />
name=Shun Yao Zhang<br />
<br />
# Disabled 2009-11-27 due to 500's on feed link<br />
# Re-enabled 2011-04-27 - incorrect URL format fixed<br />
[http://oop344ylseow.blogspot.com/feeds/posts/default]<br />
name=Yip Lim Seow<br />
<br />
[http://capereir.wordpress.com/feed/]<br />
name=Chris Pereira<br />
<br />
[http://dev-blog.zerogin.com/category/opensource/feed/]<br />
name=Tom Wisniewski (t0mmyw)<br />
<br />
# Disabled 2011-04-27 - empty feed, rest of blog is not related<br />
#[http://majorbludd.wordpress.com/category/school/feed/]<br />
#name=Michael Dawson<br />
<br />
[http://cdnpadawan.wordpress.com/feed/]<br />
name=Matthew Daniels<br />
<br />
[http://processingjs.org/blog/?feed=rss2]<br />
name=Processing.js Blog<br />
<br />
[http://dseifried.wordpress.com/category/school/feed/]<br />
name=David Seifried<br />
<br />
[http://tandemwebdesign.ca/blog/?feed=rss2&cat=3]<br />
name=Matthew Adams<br />
<br />
[http://s-aleinikov.blog.ca/feed/atom/posts/]<br />
name=Sergey Aleinikov<br />
<br />
[http://wfchen2010.blogspot.com/feeds/posts/default]<br />
name=Wen Fang Chen<br />
<br />
[http://donna-oberes.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Donna Oberes<br />
<br />
[http://carolynwoodley.blogspot.com/feeds/posts/default]<br />
name=Carolyn Woodley<br />
<br />
[http://shengwei-seneca.blogspot.com/feeds/posts/default]<br />
name=Shengwei Wang<br />
<br />
[http://zakoop344.blogspot.com/feeds/posts/default]<br />
name=Wei Tong<br />
<br />
[http://gtawaf.blogspot.com/feeds/posts/default/-/Seneca]<br />
name=Gamal Tawaf <br />
<br />
[http://rift-tlosam.blogspot.com/feeds/posts/default/-/seneca]<br />
name=Brendan McDorman<br />
<br />
[http://hdc23.wordpress.com/category/OOP344/feed]<br />
name=Dachuan Huang<br />
<br />
# Disabled 2011-04-27 - blank feed, aged blod<br />
#[http://qwu26.blogspot.com/feeds/posts/default/-/OOP344]<br />
#name=Qingxi Wu<br />
<br />
# Disabled 2011-04-27 - blank blog<br />
#[http://lwang162.blogspot.com/feeds/posts/default/-/OOP344]<br />
#name=LianHe Wang<br />
<br />
# Disabled 2011-04-27 - blank blog, aged<br />
#[http://bmcohen.blogspot.com/feeds/posts/default/-/seneca]<br />
#name=Bryan Cohen<br />
<br />
[http://feliploko.wordpress.com/category/seneca/feed]<br />
name=Felipe de Oliveira<br />
<br />
# Following feed reports invalid content type.<br />
# Disabled 2010-09-23 CTyler<br />
#[http://lwang168.blogspot.com/feeds/posts/-/oop344]<br />
#name=Liang Wang<br />
<br />
[http://shunyao-cpa.blogspot.com/feeds/posts/default]<br />
name=shun yao zhang<br />
<br />
[http://galewis.blogspot.com/feeds/posts/default]<br />
name=Gustone Lewis<br />
<br />
[http://hmo6.blogspot.com/feeds/posts/default]<br />
name=Mo Hsiu Mei<br />
<br />
[http://derekambrose.blogspot.com/feeds/posts/default/-/open%20source]<br />
name=Derek Ambrose<br />
<br />
[http://scottdowne.wordpress.com/category/open-source/feed/]<br />
name=Scott Downe<br />
<br />
# Disabled 2011-04-27 - blog deleted<br />
#[http://anthonyisgood.blogspot.com/feeds/posts/default/-/open%20source]<br />
#name = Anthony Alves<br />
<br />
[http://jjleeos.blogspot.com/feeds/posts/default]<br />
name = Jeffrey Lee<br />
<br />
[http://harjinderv.tumblr.com/tagged/Open_Source/rss]<br />
name = Harjinder Virdi<br />
<br />
[http://cldenobrega.wordpress.com/category/open-source/feed/]<br />
name = Crystal de Nobrega (cldenobrega)<br />
<br />
[http://lchen97.blogspot.com/feeds/posts/default]<br />
name=Chris Chen<br />
<br />
# Parked domain. Disabled 2010-09-23 CTyler<br />
#[http://hotweiss.lifeflayer.com/?feed=atom]<br />
#name=Tianqi Liu<br />
<br />
[http://oleg-oop.blogspot.com/feeds/posts/default]<br />
name=Aleh Pliats<br />
<br />
[http://88mishok.blogspot.com/feeds/posts/default]<br />
name=Francois Des Jarlais<br />
<br />
[http://bikarin.blogspot.com/feeds/posts/default]<br />
name=Irina Balzamova<br />
<br />
[http://mashhaque.blogspot.com/feeds/posts/default]<br />
name=Mashfique Haque<br />
<br />
[http://yxue11.blogspot.com/feeds/posts/default]<br />
name=Yong Xue<br />
<br />
[http://tdao75.blogspot.com/feeds/posts/default]<br />
name=Thanh Dao<br />
<br />
[http://minooz.wordpress.com/category/CDOT/feed/]<br />
name=Minoo Ziaei<br />
<br />
[http://gbatumbya.wordpress.com/category/seneca/cdot/feed/]<br />
name=Grace Simon Batumbya<br />
<br />
[http://sonnilion.wordpress.com/feed/]<br />
name=Matt Postill<br />
<br />
[http://acchung1.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Alex Chun Yang Chung<br />
<br />
[http://hckim.wordpress.com/category/open-source/feed/]<br />
name=Han Chul Kim<br />
<br />
[http://xizhangblog.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Xi Zhang<br />
<br />
# Modified 2011-04-27 - changed from blank category<br />
[http://lwu11.blogspot.com/feeds/posts/default]<br />
name=Ling Wu<br />
<br />
[http://jasonquan.wordpress.com/category/OOP344/feed/]<br />
name=Jason Quan<br />
<br />
[http://myoop344blog.blogspot.com/feeds/posts/default/]<br />
name=Xiongwen LU<br />
<br />
[http://0zzym.wordpress.com/feed]<br />
name=Osman Mirza<br />
<br />
[http://adgezaza.posterous.com/rss.xml?tag=open%20source]<br />
name=Adrian Maurer<br />
<br />
[http://kumailhabib.blogspot.com/feeds/posts/default]<br />
name=Kumail Habib<br />
<br />
[http://imadorki3.blogspot.com/feeds/posts/default]<br />
name=Robin Co<br />
<br />
[http://danapao026.blogspot.com/feeds/posts/default]<br />
name=Don Armin Napao<br />
<br />
[http://cgm087.blogspot.com/feeds/posts/default/-/CDOT]<br />
name=Christopher G. Missen<br />
<br />
[http://crgosselin.blogspot.com/feeds/posts/default]<br />
name=Chris Ryan Gosselin<br />
<br />
[http://slaw12.wordpress.com/feed/ ]<br />
name=Stephanie Law<br />
<br />
[http://ysliu2.blogspot.com/feeds/posts/default]<br />
name=Yansong Liu<br />
<br />
[http://www.drizhepolov.com/blog/?feed=rss2]<br />
name=Vladimir Drizhepolov<br />
<br />
[http://bhavanesh.wordpress.com/feed/]<br />
name=Bhavanesh Patel<br />
<br />
[http://xwu0102.blogspot.com/feeds/posts/default/-/oop344]<br />
name=Xiaojiang Wu<br />
<br />
[http://rhui4.wordpress.com/feed/ ]<br />
name=Richard Hui<br />
<br />
[http://invinciblyignorant.wordpress.com/category/OOP344/feed/]<br />
name=Jason Burton<br />
<br />
[http://goldenration.wordpress.com/feed/]<br />
name=HongGeun Park<br />
<br />
[http://thupten.veryusefulinfo.com/?feed=rss2]<br />
name=Thupten Choephel<br />
<br />
[http://priyadeep.wordpress.com/feed/]<br />
name=Priyadeep Gill<br />
<br />
[http://kyle205website.info/wordpress/?feed=rss2]<br />
name=Khai Huynh<br />
<br />
[http://dale.io/open-source.xml]<br />
name=Dale Karp<br />
<br />
[http://vbluzmans.wordpress.com/feed/]<br />
name=Vitaly Bluzmans<br />
<br />
[http://akkimblog.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Kerry Taylor<br />
<br />
<br />
[http://alf1488.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Yegor Tyunin<br />
<br />
[http://sbr600.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Matthew Ortofsky<br />
<br />
[http://pbrown9.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Paul Brown<br />
<br />
[http://jzaidi.wordpress.com/feed/]<br />
name=Jawwad Zaidi<br />
<br />
[http://blog.rainulf.ca/category/CDOT/feed/]<br />
name=Rainulf Pineda<br />
<br />
[http://donchel.wordpress.com/feed/]<br />
name=Dong Cheol Cha<br />
<br />
[http://sweerdenburg.wordpress.com/category/seneca/feed/]<br />
name=Steven Weerdenburg<br />
<br />
[http://jyang42.blogspot.com/feeds/posts/default]<br />
name=Jing Yang<br />
<br />
[http://tarinc.wordpress.com/feed/]<br />
name=Tarin Choudhury<br />
<br />
[http://jtdonaldson21.blogspot.com/feeds/posts/default]<br />
name=Jeshu Donaldson<br />
<br />
[http://bccp32.blogspot.com/feeds/posts/default]<br />
name=Yauheni Khabian<br />
<br />
[http://mark-os.blogspot.com/feeds/posts/default]<br />
name=Mark Eamiguel<br />
<br />
[http://kweber1.blogspot.com/feeds/posts/default]<br />
name=Kyle Weber<br />
<br />
[http://mustafaredha.wordpress.com/category/planet-cdot/feed]<br />
name=Mustafa Redha<br />
<br />
[http://andrewasdesigned.blogspot.com/feeds/posts/default/-/SBR600]<br />
name=Andrew Singh<br />
<br />
[http://escom0.blogspot.com/feeds/posts/default]<br />
name=Eric Shum<br />
<br />
# Disabled 2011-04-27 - blog was deleted<br />
#[http://open-ht.blogspot.com/feeds/posts/default]<br />
#name=Hoc Tran<br />
<br />
[http://vanjason.wordpress.com/category/sbr600/feed]<br />
name=Jason Van<br />
<br />
[http://kpangilinan.wordpress.com/feed]<br />
name=Kenneth Pangilinan<br />
<br />
[http://ajcondinho.blogspot.com/feeds/posts/default/-/opensource]<br />
name=Andrew Condinho<br />
<br />
[http://blog.esmnetworks.com/category/planet-cdot/feed]<br />
name=Adrian Pruteanu<br />
<br />
[http://stevebologna.wordpress.com/category/Open-Source/feed/]<br />
name=Stephen Bologna<br />
<br />
[http://www.winterleaf.ca/blog/category/oop344/feed/]<br />
name=Daniel Slessarev<br />
<br />
[http://ycshon.blogspot.com/feeds/posts/default]<br />
name=Young Chol Shon<br />
<br />
[http://jwpark2.blogspot.com/feeds/posts/default]<br />
name=Jaewoo Park<br />
<br />
[http://klasconia.wordpress.com/feed/]<br />
name=Kevin Lasconia<br />
<br />
[http://kaitlynmcdonald.wordpress.com/feed/]<br />
name=Kaitlyn McDonald<br />
<br />
[http://jrobinson7.wordpress.com/feed/]<br />
name=James Robinson<br />
<br />
[http://trusu.blogspot.com/feeds/posts/default]<br />
name=Traian Rusu<br />
<br />
[http://blockrockinpete.blogspot.com/feeds/posts/default/-/OSD600]<br />
name=Pete Leaning<br />
<br />
[http://tyler-taehee-lee.blogspot.com/feeds/posts/default/-/SBR600]<br />
name=Tae Hee Lee<br />
<br />
<br />
[http://www.kaitlyncallow.com/Blog/?feed=rss2&cat=87]<br />
name=Kaitlyn Callow<br />
face=http://www.kaitlyncallow.com/Dump/kait_avatar.jpg<br />
<br />
[http://www.kaitlyncallow.com/Blog/?feed=rss2&cat=96]<br />
name=Kaitlyn Callow<br />
face=http://www.kaitlyncallow.com/Dump/kait_avatar.jpg<br />
<br />
[http://saad-husain.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Saad Husain<br />
<br />
[http://jevangelos.wordpress.com/feed/]<br />
name=James Evangelista<br />
<br />
# Disabled 2011-04-27 - not a feed link<br />
#[http://sajed481.wordpress.com/SBR600/]<br />
#name=M.A Sajed Shadani<br />
<br />
[http://rizwanhaq.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Rizwan Haq<br />
<br />
[http://tuori.tk/blog/blogs/blog1.php?tempskin=_rss2&cat=15]<br />
name=Matthew Tuori<br />
<br />
[http://ktaraghi.blogspot.com/feeds/posts/default]<br />
name=Khosro Taraghi<br />
<br />
[http://opensourceftw.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Anthony Boccia<br />
<br />
[http://perfectlylogical.wordpress.com/category/sbr600/feed/]<br />
name=Stephen Hall<br />
<br />
[http://rocellaj.wordpress.com/feed/]<br />
name=Rocella Jimenez<br />
<br />
[http://justinpaulmorgan.blogspot.com/feeds/posts/default]<br />
name=Justin Morgan<br />
<br />
[http://gcasella.blogspot.com/feeds/posts/default]<br />
name=Gian-Luca Casella<br />
<br />
[http://archanasahota.com/category/open-source/feed/]<br />
name=Archana Sahota<br />
<br />
[http://pratikamin.wordpress.com/category/sbr600/feed/]<br />
name=Pratik Amin<br />
<br />
[http://syang00.wordpress.com/feed/]<br />
name=Stephanie Yang<br />
<br />
[http://tewestacott.wordpress.com/category/SBR600/feed/]<br />
name=Todd Westacott<br />
<br />
[http://aparda.wordpress.com/category/SBR600//feed/]<br />
name=Andrew Parda<br />
<br />
[http://gjuhasz1.wordpress.com/feed/]<br />
name=Gergely Juhasz<br />
<br />
[http://completefail.wordpress.com/category/SBR600/feed/]<br />
name=Joshua Y. Koh<br />
<br />
[http://myuberwebsite.blogspot.com/feeds/posts/default]<br />
name=Dmitry Artemenko<br />
<br />
[http://cgomes7.wordpress.com/feed/]<br />
name=Cesar Gomes<br />
<br />
[http://supbroseph.wordpress.com/feed/]<br />
name=Houssam haidar<br />
<br />
[http://www.bradchen.com/open-source-feed.xml]<br />
name=Brad Chen (vvasabi)<br />
<br />
[http://asabir.wordpress.com/feed/]<br />
name=Adeel Sabir (asabir)<br />
<br />
[http://libresparks.wordpress.com/category/SBR600/feed/]<br />
name=Alfred Liu<br />
<br />
[http://acook6.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Alan Cook<br />
<br />
[http://coding.shaunofthelive.com/feeds/posts/default/-/oop344]<br />
name=Shaun Hill<br />
<br />
[http://maoli1207.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Mao Hua Li<br />
<br />
# tmp disabled<br />
#[http://fossjon.wordpress.com/feed/]<br />
#name=Jon Chiappetta<br />
<br />
[http://dperit.blogspot.com/feeds/posts/default/-/cdot]<br />
name=David Perit<br />
<br />
[http://szafar8.wordpress.com/tag/cdot/feed/]<br />
name=Salman Zafar<br />
<br />
[http://mbuttu.wordpress.com/category/Open-Source/feed/]<br />
name=Mohammed Buttu<br />
<br />
[http://brianlimtemp.blogspot.com/feeds/posts/default/-/CDOT]<br />
name=Brian Lim<br />
<br />
[http://drigato.wordpress.com/category/open-source/feed/]<br />
name=Denise Rigato<br />
<br />
[http://jbraffoul.wordpress.com/category/open-source/feed/]<br />
name=Jordan Raffoul<br />
<br />
[http://kuznetsovnikita.blogspot.com/feeds/posts/default?alt=rss]<br />
name=Nikita Kuznetsov<br />
<br />
[http://noahgitalis.wordpress.com/category/open-source/feed/]<br />
name=Noah Gitalis<br />
<br />
[http://rhotin.wordpress.com/category/open-source/feed/]<br />
name=Roman Hotin<br />
<br />
[http://nm486.wordpress.com/category/open-source/feed]<br />
name=Stanley Tsang<br />
<br />
[https://brattahlid.wordpress.com/tag/foss/feed/]<br />
name=Abhishek Bhatnagar<br />
<br />
[http://mendozamiche.wordpress.com/category/open-source/feed]<br />
name=Michelle Mendoza<br />
<br />
[http://kenxu99.wordpress.com/category/open-source/feed]<br />
name=Qian (Ken) Xu<br />
<br />
[http://steventseng.wordpress.com/category/open-source/feed/]<br />
name=Ching Wei Tseng (Steven)<br />
<br />
[http://myprogrammingblog.com/category/open-source/feed/]<br />
name=Anatoly Spektor<br />
<br />
[http://jasonmarciniak.wordpress.com/feed/]<br />
name=Jason Marciniak<br />
<br />
[http://hungryr.wordpress.com/category/open-source/feed]<br />
name=Hyungryul Steven Chun<br />
<br />
[http://jbhuestis.wordpress.com/feed/]<br />
name=Jordan Huestis<br />
<br />
[http://nicklmbrt.wordpress.com/feed]<br />
name=Nick Lambert<br />
<br />
<br />
[http://rkyosd.blogspot.com/feeds/posts/default]<br />
name=Keyan Ren<br />
<br />
[http://awong79.blogspot.com/feeds/posts/default]<br />
name=Anthony Wong<br />
<br />
[http://jekyjaw.wordpress.com/category/open-source/feed]<br />
name=Yevgeniy Ivanchenko<br />
<br />
[http://raymondhung.wordpress.com/category/open-source/feed/]<br />
name=Raymond Hung<br />
<br />
[http://topheruppercut.wordpress.com/category/open-source/feed/]<br />
name=Christopher Cheung<br />
<br />
[https://saadism.wordpress.com/feed/]<br />
name=Saad Mohammad<br />
<br />
[http://slee142.blogspot.com/feeds/posts/default]<br />
name=Sangjin (Eric) Lee<br />
<br />
[http://dliscio.wordpress.com/feed]<br />
name=David Liscio<br />
<br />
[http://guandayu.wordpress.com/feed/]<br />
name=Dayu Guan<br />
<br />
[http://elonli.ca/category/sbr600/feed/]<br />
name=Elon Li<br />
<br />
<br />
[http://blog.carsonyong.com/?feed=rss2]<br />
name=Carson Yong<br />
<br />
[http://snaqvi3.wordpress.com/category/open-source/feed/]<br />
name=Saba Naqvi<br />
<br />
[http://burrellaramone.wordpress.com/category/open_source/feed/]<br />
name=Ramone Burrell<br />
<br />
[http://moussa1.wordpress.com/category/open-source/feed/]<br />
name=Moussa Tabcharani<br />
<br />
[http://roottothehead.blogspot.com/feeds/posts/default/-/CDOT]<br />
name=Jordan Cwang<br />
<br />
[http://diogogmt.wordpress.com/category/open-source/feed/]<br />
name=Diogo Golovanevsky Monteiro<br />
<br />
[http://www.anuragbhatnagar.com/category/open-source/feed/]<br />
name=Anurag Bhatnagar<br />
face=http://www.anuragbhatnagar.com/wp-content/uploads/2011/09/anurag1.png<br />
<br />
[http://withs.tumblr.com/tagged/OSD/rss]<br />
name=Jacky Siu<br />
<br />
[http://jjbmiller.wordpress.com/feed/]<br />
name=Jeff Miller<br />
<br />
[http://toomymon.wordpress.com/feed/]<br />
name=Tommy Cho Long Chor<br />
<br />
[http://jsilver999.wordpress.com/category/open-source/feed/]<br />
name=Jesse Silver<br />
<br />
[http://justintrobinson.wordpress.com/category/bigbluebutton/feed/]<br />
name=Justin Robinson<br />
<br />
[http://cchoo2.blogspot.com/feeds/posts/default]<br />
name=Chris Choo<br />
<br />
[http://teddychilai.wordpress.com/category/sbr600/feed/]<br />
name=Chi Hsun Lai<br />
<br />
[http://dsun20.wordpress.com/feed/]<br />
name=Dong Sun<br />
<br />
[http://alberttruong.wordpress.com/category/SBR600/feed/]<br />
name=Albert Truong<br />
<br />
[http://jessefulton.wordpress.com/category/SBR600/feed/]<br />
name=Jesse Fulton<br />
<br />
[http://ligangbory.wordpress.com/feed/]<br />
name=Gang Li<br />
<br />
[http://kliu39.wordpress.com/feed/]<br />
name=Kun Liu<br />
<br />
[http://mariabustoss.wordpress.com/feed/]<br />
name=Maria Bustos-Roman<br />
<br />
[http://kavisbr.blogspot.com/feeds/posts/default]<br />
name=Kavishankar Srivamathevan<br />
<br />
[http://namsbloging.blogspot.com/feeds/posts/default]<br />
name=Nam Nguyen<br />
<br />
[http://dsegree.wordpress.com/feed/]<br />
name=Daniel Segree<br />
<br />
[http://sajed481.wordpress.com/opensource/feed/]<br />
name=Mohammad Abdullah Sajed Shadani<br />
<br />
[http://asalwi123.wordpress.com/feed/]<br />
name=Aries Alwi<br />
<br />
[http://jmulwani.wordpress.com/feed/]<br />
name=Jayaditya Mulwani<br />
<br />
[http://sbr600blog.blogspot.com/feeds/posts/default]<br />
name=Andrew Greene<br />
<br />
[http://chadpilkey.wordpress.com/category/opensource/feed/]<br />
name=Chad Pilkey<br />
<br />
[http://ejtorre.blog.ca/feed/rss2/posts/]<br />
name=Eugene Torre<br />
<br />
[http://lynart.wordpress.com/category/CDOT/feed/]<br />
name=Vince Lee<br />
<br />
[http://stani.ca/?feed=rss2&cat=3]<br />
name=Robert Stanica<br />
<br />
[http://cdot-callaghan.posterous.com/rss.xml?tag=CDOT]<br />
name=Peter Callaghan<br />
<br />
[http://shayanzafar.wordpress.com/category/open-source/feed/]<br />
name=Shayan Zafar Ahmad<br />
<br />
[http://zyu26.wordpress.com/feed/]<br />
name=Zhiping Yu<br />
<br />
[http://stiversc.blogspot.ca/feeds/posts/default/-/OSD600]<br />
name=Michael Stiver-Balla<br />
<br />
[http://maximumou.blogspot.com/feeds/posts/default]<br />
name=Zhi Chang Ou<br />
<br />
[http://www.kypertrast.net/seneca/category/open-source/feed/]<br />
name=Michael Afidchao<br />
<br />
[http://rickeyre.ca/open-source-feed.xml]<br />
name=Rick Eyre<br />
<br />
[http://ayufidin.blogspot.ca/feeds/posts/default]<br />
name=Alon Yufidin<br />
<br />
[http://sudodamha.blogspot.com/feeds/posts/default]<br />
name=Ahmad Taychouri<br />
<br />
[http://amartinencosbr600.blogspot.com/feeds/posts/default]<br />
name=Andrei Martinenco<br />
<br />
[http://sbr600.tumblr.com/rss]<br />
name=Daniel Delidjakov<br />
<br />
[http://ashtramwasser.blogspot.ca/feeds/posts/default]<br />
name=Alina Shtramwasser<br />
<br />
[http://limed3.wordpress.com/category/open-source/feed/]<br />
name=Edwin Lim<br />
<br />
# humphd: Disabled pending face to face discussions (humphd) - inappropriate language, post not within guidelines of planet etiquette.<br />
# caitp: I disagree, harmful language is always censored on these posts. And even if the occasional word slips through, people are<br />
# adults and can handle it.<br />
# ctyler: Temporarily re-disabled per humphd (above) and page locked. 2013-07-01_13:22<br />
#[http://caitpotter.blogspot.com/feeds/posts/default/-/open%20source] <br />
#name=Caitlin Potter<br />
#<br />
#[http://caitpotter.blogspot.com/feeds/posts/default/-/cdot] <br />
#name=Caitlin Potter<br />
<br />
[http://rlawrence5.wordpress.com/feed/]<br />
name=Ryan Lawrence<br />
<br />
[http://okhattab.wordpress.com/feed/]<br />
name=Omarr Khattab<br />
<br />
[http://aadavis1.blogspot.ca//feeds/posts/default]<br />
name=Alexander Davis<br />
<br />
[http://kdayalingam.wordpress.com/category/dpi908/feed]<br />
name=Kowrinanthan Dayalingam<br />
<br />
[http://jcqiu.wordpress.com/feed/]<br />
name=Jiecheng Qiu<br />
<br />
[http://mikeshutov.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Mike Shutov<br />
<br />
[http://avru.wordpress.com/category/open-source/feed/]<br />
name=Anh Tran<br />
<br />
[http://kyle.barnhart.ca/feeds/posts/default/-/Open%20Source]<br />
name=Kyle Barnhart<br />
<br />
[http://gloriaip.wordpress.com/feed/]<br />
name=Gloria Ip<br />
<br />
[http://www.mandeepgarg.wordpress.com/feed/]<br />
name=Mandeep Garg<br />
<br />
[http://bharmidy.blogspot.ca/feeds/posts/default/-/open%20source]<br />
name=Bryce Harmidy<br />
<br />
[http://andrewow.wordpress.com/category/sbr600/feed/]<br />
name=Andrew Oatley-Willis<br />
<br />
[http://dima1086.blogspot.com/feeds/posts/default/-/Open%20Source]<br />
name=Dmytro Kostenyuk<br />
<br />
[http://hapombo.blogspot.ca/feeds/posts/default]<br />
name=Hugo Pombo<br />
<br />
[http://petepabs.wordpress.com/feed/]<br />
name=Peter Valerio<br />
<br />
<br />
[http://sabanane.wordpress.com/feed/]<br />
name=Japheth N.<br />
<br />
[http://rtang12.blogspot.ca/feeds/posts/default]<br />
name=Ruowen Tang<br />
<br />
[http://softwarebuildrun.wordpress.com/feed/]<br />
name=Rudolf R Janns<br />
<br />
[http://wkhan10.wordpress.com/feed]<br />
name=Waqas Khan<br />
<br />
# No more new content here (Andrew 31aug2013)<br />
#[http://senecacd.wordpress.com/feed/]<br />
#name=Seneca-CD Research Project<br />
<br />
[http://blog.marcussaad.com/category/moz/feed/]<br />
name=Marcus Saad<br />
<br />
[http://sedgestuff.wordpress.com/category/open-source-cdot/feed/]<br />
name=Kieran Sedgwick<br />
<br />
[http://alicoding.com/rss/]<br />
name=Ali Al Dallal<br />
<br />
[http://garydengblog.wordpress.com/category/open-source/feed/]<br />
name=Gary Deng<br />
<br />
[http://dylansegna.wordpress.com/feed/]<br />
name=Dylan Segna<br />
<br />
[http://andreikopytov.wordpress.com/category/CDOT/feed/]<br />
name=Andrei Kopytov<br />
<br />
[http://igoryen.wordpress.com/category/CDOT/feed/]<br />
name=Igor Entaltsev<br />
<br />
[http://jasdeep.ca/ruby/feed/]<br />
name=Jasdeep Singh<br />
<br />
[http://echanna.blogspot.ca/feeds/posts/default/-/open-source]<br />
name=Edward Hanna<br />
<br />
[http://nexjmdi.blogspot.com/feeds/posts/default]<br />
name=Yoav Gurevich<br />
<br />
[http://senecahealth.wordpress.com/feed/]<br />
name=Seneca Health Projects Blog<br />
<br />
[http://tqyu.wordpress.com/]<br />
name=Tony Yu<br />
<br />
[http://kwkofler.wordpress.com/category/open-source/feed/]<br />
name=Kevin Kofler<br />
<br />
[http://revenlight.wordpress.com/category/open-source/feed/]<br />
name=Dzmitry Kavalchyk<br />
<br />
[http://mlveis.wordpress.com/category/open-source/feed/]<br />
name=Michael Veis<br />
<br />
[http://maronin.wordpress.com/category/open-source/feed/]<br />
name=Mark Aronin<br />
<br />
[http://elnushaj.wordpress.com/feed/]<br />
name=Elsi Nushaj<br />
<br />
[http://chaoboxie.wordpress.com/category/open-source/feed/]<br />
name=Chaobo Xie<br />
<br />
[http://mbbaig.wordpress.com/category/open-source/feed/]<br />
name=Mohamed Baig<br />
<br />
[http://cholantesh.wordpress.com/category/opensource/feed]<br />
name=Natesh Mayuranathan<br />
<br />
<br />
[http://shavyg2.wordpress.com/category/open-source/feed/]<br />
name=Shavauhn Gabay<br />
<br />
[http://pbouianov.wordpress.com/category/open-source/feed/]<br />
name=Petr Bouianov<br />
<br />
[http://tecknologikk.blogspot.ca/feeds/posts/default/-/sbr600]<br />
name=Taylor Barras<br />
<br />
[http://andeic1.wordpress.com/category/open-source/feed/]<br />
name=Alex Craig<br />
<br />
[http://basyager.wordpress.com/feed/]<br />
name=Slava Basatski<br />
<br />
[http://adow2.wordpress.com/category/opensource/feed/]<br />
name=Ai Dow<br />
<br />
[http://hfazal.wordpress.com/category/open-source/feed/]<br />
name=Husain Fazal<br />
<br />
[http://btulchinsky.wordpress.com/category/open-source/feed/]<br />
name=Barry Tulchinsky<br />
[http://ttran57.blogspot.com/feeds/posts/default]<br />
name=Thanh Tran <br />
<br />
[http://jasoncarman.wordpress.com/category/sbr600/feed/]<br />
name=Jason Carman<br />
<br />
[http://ywen10.blogspot.com/feeds/posts/default]<br />
name=Yue Wen<br />
<br />
[http://nitinprakash.wordpress.com/category/open-source/feed/]<br />
name=Nitin Prakash Panicker<br />
<br />
[http://msousa3.blogspot.com/feeds/posts/default]<br />
name=Michael Sousa<br />
<br />
[http://professorplumpi.wordpress.com/feed/]<br />
name=Richard Kim<br />
<br />
[http://cjiang13.wordpress.com/category/SBR600/feed/]<br />
name=Charley Jiang<br />
<br />
[http://yshin8.blogspot.com/feeds/posts/default]<br />
name=Yonghoon Shin<br />
<br />
[http://sspaleta.wordpress.com/feed/]<br />
name=Shiela Spaleta<br />
<br />
[http://darthjawa.wordpress.com/category/sbr600/cdot-planet/feed/]<br />
name=Dmitry Kozunov<br />
<br />
<br />
[http://matthewtorrance.com/category/osd/feed/]<br />
name=Matthew Torrance<br />
<br />
[http://bzcareermongodb.blogspot.ca/feeds/posts/default]<br />
name=Zakeria Hassan<br />
face=https://0.gravatar.com/avatar/66e5e21053f70a3c30325b392337d54d?d=https%3A%2F%2Fidenticons.github.com%2F01cbc34a00bb2b4209eca3ca9eceb565.png&s=420<br />
<br />
[http://singhrajdeepblog.wordpress.com/feed/]<br />
name=Rajdeep Singh<br />
<br />
[http://www.peymangg.com/feed/]<br />
name=Peyman Mahdi<br />
<br />
[http://kkmusinguzi.wordpress.com/feed/]<br />
name=Keith Musinguzi<br />
<br />
[http://atpenrose.wordpress.com/feed/]<br />
name=Adam Penrose<br />
<br />
[http://jdlatorre.blogspot.ca/feeds/posts/default]<br />
name= Juan Latorre<br />
<br />
<br />
[http://mbustossbr.wordpress.com/feed/]<br />
name=Maria Bustos-Roman<br />
<br />
[http://msmahmood1.blogspot.com/feeds/posts/default/-/opensource]<br />
name=Mohammad Shaheer Mahmood<br />
<br />
[http://alexkotliar.wordpress.com/category/open-source/feed/]<br />
name=Alex Kotliar<br />
<br />
[http://codescriptplay.blogspot.ca/feeds/posts/default/-/opensource]<br />
name=Kajanthan Tharmabalan<br />
<br />
[http://dchenxd.wordpress.com/category/open-source/feed/]<br />
name=Xiaodong Chen<br />
<br />
[http://jespiritucpp.wordpress.com/category/open-source/feed]<br />
name=Jeffrey Espiritu<br />
<br />
<br />
[http://thedib.blogspot.ca/feeds/posts/default]<br />
name=Jose Giagonia<br />
<br />
[http://mkmatthewblog.wordpress.com/feed]<br />
name=Matthew K Wong<br />
<br />
[http://jrromasanta1.wordpress.com/feed/]<br />
name=Jose Romasanta<br />
<br />
[http://shaj02.wordpress.com/feed/]<br />
name=Shajinth Pathmakulaseelan<br />
<br />
[http://jeremyedgell.wordpress.com/category/Programming/feed/]<br />
name=Jeremy Edgell<br />
[http://spo600yg.blogspot.com/feeds/posts/default]<br />
name=Yoav Gurevich<br />
<br />
[http://vprasanth.com/blog/archives/category/spo600-2/feed]<br />
name=Prasanth Vaaheeswaran<br />
<br />
[http://hzhong10.blogspot.ca/feeds/posts/default]<br />
name=Hua Zhong<br />
<br />
[http://nrkemp4.tumblr.com/tagged/spo600/rss]<br />
name=Nick Kemp<br />
<br />
[http://www.shlee.ca/feed/]<br />
name=Sanghyun Lee<br />
<br />
[http://mctenenbaum.wordpress.com/category/open-source/feed]<br />
name=Moshe Tenenbaum<br />
<br />
[http://estereh.wordpress.com/category/spo600/feed]<br />
name=Eugen (Jevenijs) Sterehov<br />
<br />
[http://compiledsprawl.blogspot.com/feeds/posts/default/-/open-source]<br />
name=Matthew Grosvenor<br />
<br />
[http://sinomai.wordpress.com/category/planet-cdot/feed/]<br />
name=Matt Jang<br />
<br />
[http://admixdev.com/category/programming-2/]<br />
name=Alexander Snurnikov<br />
</pre></div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=103677Winter 2014 DPS911 and OSD700 Weekly Schedule2014-01-15T17:49:10Z<p>Oleksandr Snurnikov: /* Week 4 (Jan 27) */</p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=103676Winter 2014 DPS911 and OSD700 Weekly Schedule2014-01-15T17:48:30Z<p>Oleksandr Snurnikov: /* Week 9 (March 10) */</p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=103675Winter 2014 DPS911 and OSD700 Weekly Schedule2014-01-15T17:48:10Z<p>Oleksandr Snurnikov: /* Week 12 (March 31) [Release Due] */</p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Winter_2014_DPS911_and_OSD700_Weekly_Schedule&diff=103674Winter 2014 DPS911 and OSD700 Weekly Schedule2014-01-15T17:44:55Z<p>Oleksandr Snurnikov: </p>
<hr />
<div>=Introduction=<br />
<br />
The course will meet every Monday, with Thursday being optional office hours. Project deliverables are due on Fridays, and presentations will be done on Mondays. You are responsible to sign-up for your demo slots. Only 3 demos per week will be evaluated, and slots are provided on a first-come-first-served basis. Please sign-up below.<br />
<br />
=Weekly Schedule=<br />
<br />
== Week 1 (Jan 6) ==<br />
<br />
Course Intro<br />
<br />
== Week 2 (Jan 13) ==<br />
<br />
Pick projects, bugs<br />
<br />
== Week 3 (Jan 20) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 4 (Jan 27) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Alexander Snurnikov<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 5 (Feb 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 6 (Feb 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 7 (Feb 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. Alexander Snurnikov<br /><br />
3. <br /><br />
<br />
== Study Week (Feb 24) ==<br />
<br />
* No Presentations or Releases.<br />
<br />
== Week 8 (March 3) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 9 (March 10) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 10 (March 17) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 11 (March 24) ==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. <br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 12 (March 31) [Release Due]==<br />
<br />
* Student Demos (Monday 11:40-1:30)<br />
1. Michael Veis<br /><br />
2. <br /><br />
3. <br /><br />
<br />
== Week 13 (April 7) ==<br />
<br />
* Final Presentation, all students.<br />
<br />
== Week 14 (April 14) [Release Due]==<br />
<br />
* Exam Week<br />
* Release 1.0 Due</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=The_CUI_Framework_-_OOP344_20132&diff=97498The CUI Framework - OOP344 201322013-08-11T03:53:32Z<p>Oleksandr Snurnikov: /* Issues, Releases and Due Dates */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
<br />
=Objective=<br />
Your objective at this stage is to create series of core classes designed to interact with the user. These '''Core Classes''' then can be used in development of any interactive application.<br />
<br />
Please note that the class definitions here are minimum requirement for the Core Classes and you are free to add any enhancements or features you find useful. However make sure that you discuss these enhancements with your team and professor to make sure they are feasible before implementation.<br />
<br />
It is highly recommended to develop the classes in the order they are stated here. You must create your own tester programs for each class (if possible); However, close to due date of each release, a tester program may be provided to help you verify the functionality of your classes. If tester programs are provided, then executables of the test programs will be available on matrix to show you how it is supposed to run.<br />
<br />
Also object your professor's implementation of all the classes are available in your class notes repository. Please note the following:<br />
* these implementations include a header file for each class and an object file for each class and platform<br />
* these are for you to test your own implementation in case you need to have access to another class and they are not developed yet.<br />
* like any other implementation, these implementations could be buggy <br />
<br />
=Tips=<br />
* [[GIT for OOP344 Projects| Guide for using Github]]<br />
Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything).<br />
Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines:<br />
* Add recompilation safeguards to all your header files.<br />
* Always use forward declaration if possible instead of including a class header-file.<br />
* Use includes only in files in which the actual header file code is used. <br />
* '''Avoid "just in case" includes.'''<br />
<br />
=CUI General Header file (cuigh.h)=<br />
The general header file holds the common setting and definition between all the Core Classes. Review this header file at each stage of the project for changes. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#ifndef ___CUIGH_H__<br />
#define ___CUIGH_H__<br />
namespace cui{ <br />
#ifndef _CRT_SECURE_NO_DEPRECATE<br />
#define _CRT_SECURE_NO_DEPRECATE<br />
#endif<br />
#ifndef _CRT_SECURE_NO_WARNINGS<br />
#define _CRT_SECURE_NO_WARNINGS<br />
#endif<br />
<br />
#define C_INITIAL_NO_FIELDS 50<br />
#define C_DIALOG_EXPANSION_SIZE 20<br />
#define C_BUTTON_HIT 1<br />
#define C_MAX_LINE_CHARS (1024u)<br />
<br />
#define C_REFRESH -2<br />
#define C_FULL_FRAME -1<br />
#define C_NO_FRAME 0<br />
<br />
#define C_BORDER_CHARS "/-\\|/-\\|"<br />
enum CDirection {centre, left, right, up, down};<br />
// added after 0.3:<br />
enum MessageStatus{ClearMessage,SetMessage};<br />
<br />
<br />
#ifdef NO_HELPFUNC<br />
# undef NO_HELPFUNC<br />
#endif<br />
#define NO_HELPFUNC ((void(*)(MessageStatus, CDialog&))(0))<br />
#ifdef NO_VALDFUNC<br />
# undef NO_VALDFUNC<br />
#endif<br />
#define NO_VALDFUNC ((bool(*)(const char*, CDialog&))(0))<br />
<br />
<br />
#define C_MAX_LINE_CHARS (1024u)<br />
#define C_INITIAL_NUM_OF_LINES (100u)<br />
}<br />
#endif<br />
<br />
</syntaxhighlight></big><br />
<br />
=File Names=<br />
Use the following rules to create filenames for your class.<br />
*Each class MUST have its own header file and cpp file for implementation<br />
*Use the class name for the name of the file but make sure it is all '''''lowercase'''''.<br />
*:For example '''CFrame''' class should have '''cframe.h''' and '''cframe.cpp''' files for its implementation.<br />
<br />
=Hierarchy=<br />
<big><pre><br />
CFrame<br />
|<br />
|---CDialog<br />
|<br />
|<br />
|---CField<br />
|<br />
|-------- CLabel<br />
|<br />
|<br />
|-------- CButton<br />
|<br />
|<br />
|-------- CLineEdit<br />
| |<br />
| |-------CValEdit<br />
|<br />
|-------- CText<br />
|<br />
|<br />
|-------- CCheckMark<br />
|<br />
|<br />
|-------- CCheckList <br />
|<br />
|<br />
|-------- CMenuItem <br />
|<br />
|<br />
|-------- CMenu <br />
</pre></big><br />
<br />
=Issues, Releases and Due Dates=<br />
*Issue Name Format<br />
*:Issue and branch name format: '''V.V_Name''' <br /><br />
*:example; issue: Add Text Class to the project (issue 2.9.1) issue and branch name on github: '''2.9.1_AddTextClass'''<br /><br />
: <br />
* A2 Milestone 0.2 - Due Friday July 12th<br />
*: Split up work within group and document it in the team pages<br />
*: Add skeletons for each class (empty function definitions in .cpp files)<br />
*:<br />
* A2 Milestone 0.4 - Due Friday July 19th<br />
*: Implement CLabel<br />
*: Implement CButton<br />
*: Implement CLineEdit<br />
*:<br />
* A2 Milestone 0.5 - Due Friday July 26th<br />
*: Implement CDialog<br />
*: Implement CValEdit<br />
*: Implement CMenuItem<br />
*:<br />
* A2 Milestone 0.7 - Due Friday August 2nd<br />
*: Implement CCheckMark<br />
*: Implement CText<br />
*: Implement CCheckList<br />
*:<br />
* A2 Milestone 0.9 - Due Friday August 9th<br />
*: Implement CMenu<br />
*: Merge all projects and verify CUI framework is fully functional and bugless<br />
*:<br />
* A2 Milestone 1.0 - Due Friday August 15th<br />
*: The Application<br />
*:<br />
Please note these are latest recommendations and you should intend to have these completed BEFORE the due dates. The final dead-line for this project is August 15h, no projects will be accepted past this point.<br />
<br />
=Classes=<br />
==CFrame==<br />
The code for this class is provided in your repository. You must understand and use it to develop your core classes in your repository.<br />
<br />
CFrame class is responsible to create a frame or structure in which all user interface classes contain themselves in. It can draw a border around it self or be border-less. <br />
CFrame also, before displaying itself on the screen, will save the area it is about to cover, so it can redisplay them to hide itself.<br />
<br />
CFrame is base of all objects in our user interface system. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#include "cuigh.h"<br />
<br />
class CFrame{<br />
int _row; // relative row of left top corner to the container frame or the screen if _frame is null<br />
int _col; // relative col of left top corner to the container frame or the screen if _frame is null<br />
int _height; <br />
int _width;<br />
char _border[9]; // border characters<br />
bool _visible; // is bordered or not<br />
CFrame* _frame; // pointer to the container of the frame (the frame, surrounding this frame)<br />
char* _covered; // pointer to the characters of the screen which are covered by this frame, when displayed<br />
void capture(); // captures and saves the characters in the area covered by this frame when displayed and sets <br />
// _covered to point to it<br />
void free(); // deletes dynamic memory in the _covered pointer<br />
protected:<br />
int absRow()const; <br />
int absCol()const; <br />
public:<br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
<br />
virtual void draw(int fn=C_FULL_FRAME);<br />
virtual void move(CDirection dir);<br />
virtual void move();<br />
virtual void hide();<br />
<br />
virtual ~CFrame();<br />
<br />
/* setters and getters: */<br />
<br />
bool fullscreen()const;<br />
<br />
void visible(bool val);<br />
bool visible()const;<br />
<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
<br />
void row(int val);<br />
int row()const;<br />
<br />
void col(int val);<br />
int col()const;<br />
<br />
void height(int val);<br />
int height()const;<br />
<br />
void width(int val);<br />
int width()const;<br />
<br />
void refresh();<br />
};<br />
</syntaxhighlight></big><br />
===Properties===<br />
int _row, holds the relative coordinate of top row of this border with respect to its container.<br /><br />
int _col, same as _row, but for _col. <br /><br />
int _height, height of the entity. <br /><br />
int _width, width of the entity. <br /><br />
char _border[9], characters used to draw the border: <br /><br />
: _border[0], left top<br />
: _border[1], top side<br />
: _border[2], right top<br />
: _border[3], right side<br />
: _border[4], right bottom<br />
: _border[5], bottom side<br />
: _border[6], bottom left<br />
: _border[7], left side<br />
bool _visible; Indicates if the border surrounding the entity is to be drawn or not. <br /><br />
CFrame* _frame; holds the container (another CFrame) which has opened this one (owner or container of the current CFrame). '''_frame''' will be NULL if this CFrame does not have a container, in which case, it will be full screen and no matter what the values of row, col, width and height are, CFrame will be '''Full Screen''' (no border will be drawn)<br /><br />
char* _covered; is a pointer to a character array that hold what was under this frame before being drawn. When the CFrame wants to hide itself, it simple copies the content of this array back on the screen on its own coordinates.<br />
<br />
===Methods and Constructors===<br />
====Private Methods====<br />
<big><syntaxhighlight lang="cpp"><br />
void capture(); <br />
</syntaxhighlight></big><br />
:if _covered pointer is not pointing to any allocated memory, it will call the iol_capture function to capture the area that is going to be covered by this frame and keeps its address in _covered.<br />
<br />
====Protected Methods====<br />
*int absRow()const; calculates the absolute row (relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''row()''' of this border plus all the '''row()'''s of the '''_frame'''s<br />
*int absCol()const; calculates the absolute column(relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''col()''' of this border plus all the '''col()'''s of the '''_frame'''s<br />
<br />
====Public Methods====<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
</syntaxhighlight></big> <br />
:Sets the corresponding attributes to the incoming values in the argument list and set _covered to null<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
* First it will '''capture()''' the coordinates it is supposed to cover<br />
* If frame is '''fullscreen()''' then it just clears the screen and exits. <br /><br />
<br />
Otherwise:<br /><br />
*If the _visible flag is true, it will draw a box at _row and _col, with size of _width and _height using the _border characters and fills it with spaces. Otherwise it will just draw a box using spaces at the same location and same size.<br />
<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void move(CDirection dir);<br />
</syntaxhighlight></big><br />
First it will hide the Frame, then adjust the row and col to move to the "dir" direction and then draws the Frame back on screen.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void hide();<br />
</syntaxhighlight></big><br />
using iol_restore()it restores the characters behind the Frame back on screen. It will also free the memory pointed by _covered; <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CFrame();<br />
</syntaxhighlight></big><br />
It will make sure allocated memories are freed.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool fullscreen()const;<br />
void visible(bool val);<br />
bool visible()const;<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
void row(int val);<br />
int row()const;<br />
void col(int val);<br />
int col()const;<br />
void height(int val);<br />
int height()const;<br />
void width(int val);<br />
int width()const;<br />
</syntaxhighlight></big><br />
<br />
These functions set and get the attributes of the CFrame.<br />
===CFrame Student Resources===<br />
====CFrame Help/Questions Blogs====<br />
====CFrame Blog Posts====<br />
<br />
==CField==<br />
<br />
CField is an abstract base class that encapsulates the commonalities of all Input Outputs Console Fields which are placeable on a CDialog. All Fields could be Framed, therefore a CField is inherited from CFrame.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cframe.h"<br />
class CDialog;<br />
class CField : public CFrame{<br />
protected:<br />
void* _data;<br />
public:<br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CField();<br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
<br />
<br />
virtual void set(const void* data) = 0;<br />
virtual void* data()const; //<== check this, not sure<br />
<br />
void container(CDialog* theContainer);<br />
CDialog* container();<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void* _data;<br />
</syntaxhighlight></big><br />
Will hold the address of any type of data a CField can hold.<br />
===Constructors and Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes the corresponding attributes to it's parents (CFrame) constructor and then sets the _data attribute to the incoming Data argument. Also using '''container(CDialog* theContainer)''' it set the container to NULL.<br />
<big><syntaxhighlight lang="cpp"><br />
~CField();<br />
</syntaxhighlight></big><br />
Empty Destructor<br />
<big><syntaxhighlight lang="cpp"><br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
virtual void set(const void* data) = 0;<br />
</syntaxhighlight></big><br />
Pure virtual methods to enforce the children to implement;<br />
* an edit() method<br />
* an editable() method that returns true if the class is to edit data and false if the class is to only display data.<br />
* a set() method to set the _data attribute to the data the class is to work with.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void* data() const; <--- Check this not sure....<br />
</syntaxhighlight></big><br />
Returns _data.<br />
<big><syntaxhighlight lang="cpp"><br />
void container(CDialog* theContainer);<br />
</syntaxhighlight></big><br />
Casts '''"theContainer"''' to a CFrame pointer and passes it to CFrame::frame(CFrame*) method; (to set the frame of CDialog)<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog* container();<br />
</syntaxhighlight></big><br />
Casts the return value of CFrame::frame() to a CDialog pointer and returns it.<br />
===CField Student Resources===<br />
====CField Help/Questions Blogs====<br />
====CField Blog Posts====<br />
<br />
==CLabel==<br />
A readonly Field that encapsulates console.display() function. (i.e it is responsible to display a short character string on the display) CLabel although, by inheritance is Frame, but it is never '''bordered'''.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
class CLabel : public CField{<br />
// for length of the field:<br />
// Use void CFrame::width(int) to store length, and int CFrame::width() to retrieve the length<br />
<br />
public:<br />
CLabel(const CLabel& L);<br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
CLabel(int Row, int Col, int Len);<br />
~CLabel();<br />
void draw(int fn=C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
No attributes, (use Cframe attributes)<br />
<br />
===Constructors / Destructor ===<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
</syntaxhighlight></big><br />
passes the Row and Col to the CField constructor and then;<br />
if len is zero, it will allocate enough memory to store the string pointed by Str and then copies the Str into it.<br />
if len > 0, then it will allocate enough memory to store '''len''' chars, copying only len characters of str.<br />
In any way, the allocated memory is pointed by '''_data'''. Also it will set the width to the length of the memory allocated.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(int Row, int Col, int Len);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor, but len in this case can not be zero. (no validation required) and the string pointed by _data will be set to an empty string.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const CLabel& L);<br />
</syntaxhighlight></big><br />
Copies a CLabel safely to guaranty there is no memory leak.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLabel();<br />
</syntaxhighlight></big><br />
makes sure that memory pointed by _data is deallocated before the object is destroyed.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
makes a direct call to console.strdsp(), passing '''_data''' for the string to be printed and absRow() and absCol() for row and col and width() for len.<br />
this function ignores the argument fn.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
calls draw, returning 0.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always return false.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
if width() is greater than zero, it will copy the string pointed by str into the string pointed by _data upto width characters.<br />
if width() is zero,<br /> It will delete the memory pointed by _data and reallocates enough memory for str and copies the string pointed by str into the newly allocated memory pointed by _data.<br />
<br />
===CLabel Student Resources===<br />
====CLabel Help/Questions Blogs====<br />
====CLabel Blog Posts====<br />
<br />
==CDialog==<br />
Organizes CField objects on the screen, displays them and then lets the user edit them one by one. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cuigh.h"<br />
#include "cframe.h"<br />
namespace cui{<br />
class CField;<br />
class CDialog: public CFrame{<br />
private:<br />
int _fnum;<br />
int _curidx;<br />
CField** _fld;<br />
bool* _dyn;<br />
bool _editable;<br />
unsigned int _fldSize;<br />
public:<br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CDialog();<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit(int fn = C_FULL_FRAME);<br />
<br />
int add(CField* field, bool dynamic = true);<br />
int add(CField& field, bool dynamic = false);<br />
CDialog& operator<<(CField* field);<br />
CDialog& operator<<(CField& field);<br />
<br />
bool editable();<br />
int fieldNum()const;<br />
int curIndex()const;<br />
<br />
CField& operator[](unsigned int index);<br />
CField& curField();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _fnum; <br />
</syntaxhighlight></big><br />
Holds the number of Fields added to the Dialog<br />
<big><syntaxhighlight lang="cpp"><br />
bool _editable;<br />
</syntaxhighlight></big><br />
will be set to true if any of the Fields added are editable. <br />
This is optional because it depends on how you are going to implement the collection of CFields:<br />
<big><syntaxhighlight lang="cpp"><br />
int _curidx;<br />
</syntaxhighlight></big><br />
Holds the index of the Field that is currently being edited.<br />
<big><syntaxhighlight lang="cpp"><br />
CField** _fld;<br />
</syntaxhighlight></big><br />
Dynamic array of CField pointers to hold the address of the CField objects added to the screen. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br />
<big><syntaxhighlight lang="cpp"><br />
bool* _dyn;<br />
</syntaxhighlight></big><br />
A dynamic bool array that holds series of booleans to the exact number of fields, and each boolean here will hold false if the corresponding field pointed by _fld is allocated dynamically or not. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br /> <br />
This array will later on be used by destructor to decide which object is dynamic and to be deleted.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _fldSize; <br />
</syntaxhighlight></big><br />
Holds the current length of '''''_fld''''' and '''''_dyn'''''. <br />When adding a field to dialog if '''_fnum''' reaches '''_fldSize''', then the size of '''_fld''' and '''_dyn''' is expanded by '''''C_DIALOG_EXPANSION_SIZE''''', defined in '''cuigh.h'''<br />
<br />
===Constructors/Destructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Borderd = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
The constructor passes all the incoming arguments to the corresponding arguments of the apparent constructor '''CFrame'''.<br /><br />
Then it will set all called attributes to their default values and then sets all the field pointers (_fld) to NULL.<br />
It also sets all the dynamic (_dyn) flags to false. <br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CDialog();<br />
</syntaxhighlight></big><br />
The destructor will loop through all the field pointers and if the corresponding dynamic flag is true then it will delete the field pointed to by the field pointer.<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''fn''' is '''C_FULL_FRAME''', it will call its parent draw. Then It will draw all the '''Fields''' in the '''Dialog'''. <br /><br />
If '''fn''' is Zero, then it will just draw all the '''Fields''' in the '''Dialog'''.<br /><br />
If '''fn''' is a non-zero positive value, then it will only draw '''Field''' number '''fn''' in the dialog. (First added '''Field''' is field number one.)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''CDialog''' is not editable (all fields are non-editable), it will just display the Dialog and then waits for the user to enter a key and then terminates the function returning the key.<br /><br />
If fn is '''0''' or less, then before editing, the draw method is called with '''fn''' as its argument and then editing begins from the first editable Field.<br />
<br />
If fn is greater than '''0''' then editing begins from the first editable key on or after Field number '''fn'''.<br />
<br />
Note that fn is the sequence number of field and not the index. (First field number is one)<br />
<br />
Start editing from field number '''fn''';<br />
<br />
Call the edit of each field and depending on the value returned, do the following:<br /><br />
# For '''ENTER_KEY''', '''TAB_KEY''' and '''DOWN_KEY''', go to next editable Field , if this is the last editable Field then restart from Field number one.<br />
# For '''UP_KEY''' go to the previous editable Field, if there is no previous editable Field, go to the last editable Field in the Dialog.<br />
# For any other key, terminate the edit function returning the character which caused the termination.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField* field, bool dynamic = true);<br />
</syntaxhighlight></big><br />
First, this function will check the value of _fnum. If '''_fnum''' has reached '''_fldSize''', ('''_fld''' and '''_dyn''' arrays are full) it will expand '''_fld''' and '''_dyn''' by '''C_DIALOG_EXPANSION_SIZE''' (defined in '''cuigh.h''') to make room for more '''CField'''.<br /><br />
Then, it adds the CField pointed by '''field''' to the Fields of the Dialog; by appending the value of the field pointer after the last added ''field'' in the _fld array , setting the corresponding _dyn element to the value of dynamic argument and then increasing _fnum by one and returning the index of added Field in the CDialog object.<br /><br />
'''important note:'''<br /><br />
Make sure that add() sets the container of the added CField to this CDialog object, using the container() method of CField<br /><br />
Also make sure, if size of _fld and _dyn are expanded, then _fldSize is also increased.<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField& field, bool dynamic = false);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method.<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField* field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField& field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the second add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable();<br />
</syntaxhighlight></big><br />
Returns '''_editable''';<br />
<big><syntaxhighlight lang="cpp"><br />
int fieldNum()const;<br />
</syntaxhighlight></big><br />
returns '''_fnum'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int curIndex()const;<br />
</syntaxhighlight></big><br />
returns '''_curidx''';<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CField& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
Returns the reference of the Field with incoming index. (Note that here, the first field index is '''0''')<br />
<big><syntaxhighlight lang="cpp"><br />
CField& curField();<br />
</syntaxhighlight></big><br />
Returns the reference of the Field that was just being edited.<br />
<br />
===CDialog Student Resources===<br />
====CDialog Help/Questions Blogs====<br />
<br />
====CDialog Blog Posts====<br />
<br />
==CLineEdit==<br />
'''ClineEdit''' encapsulates the console.edit() function of Console class.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
namespace cui{<br />
class CLineEdit: public CField{<br />
bool _dyn;<br />
int _maxdatalen;<br />
bool* _insertmode;<br />
int _curpos;<br />
int _offset;<br />
public:<br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CLineEdit();<br />
void draw(int Refresh = C_FULL_FRAME);<br />
<br />
int edit();<br />
bool editable()const;<br />
<br />
void set(const void* Str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _dyn;<br />
</syntaxhighlight></big><br />
_dyn is set to true if the object dynamically allocated memory and is responsible to free it at destruction time.<br />
<big><syntaxhighlight lang="cpp"><br />
int _maxdatalen;<br />
</syntaxhighlight></big><br />
no comment!<br />
<big><syntaxhighlight lang="cpp"><br />
bool* _insertmode;<br />
</syntaxhighlight></big><br />
points to the location of input method (insert or overstrike)<br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
</syntaxhighlight></big><br />
current position of cursor<br />
<big><syntaxhighlight lang="cpp"><br />
int _offset;<br />
</syntaxhighlight></big><br />
current offset<br />
<br />
===Constructors / Destructor=== <br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
<br />
LineEdit, sets the Field's _data to the value of str. If LineEdit is instantiated with this constructor then it will edit an external string provided by the caller function of LineEdit. LineEdit in this case is not creating any dynamic memory, therefore _dyn is set to false (therefore the destructor will not attempt to deallocate the memory pointed by _data).<br /><br />
The location (row and col) and Bordered are directly passed to the parent (CField) and str is passed as data to the parent constructor. Unlike Label, LineEdit could have border or not so depending on this (Bordered being true or false) the Height is set to 3 or 1 respectfully. <br /><br />
(hint: use '''? :''' operator to pass the proper Height value to CField's constructor)<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor with one difference; since no external data is passed to be edited here, this constructor must allocate enough dynamic memory to accommodate editing of '''Maxdatalen''' characters. Then make it an empty string and set Fields's _data to point to it. Make sure _dyn is set to true in this case, so the destructor knows that it has to deallocate the memory at the end.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLineEdit();<br />
</syntaxhighlight></big><br />
If '''_dyn''' is true, it will deallocate the character array pointed by Fields's '''_data'''<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int Refresh = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
It will first call Frame's draw passing '''Refresh''' as an argument to it.<br /><br />
Then it will make a direct call to console.display() to show the data kept in Field's '''_data'''.<br /><br />
The values used for the arguments of console.display() are:<br />
*str: address of string pointed by _data + the value of _offset<br />
*row: absRow() (''add one if border is visible'')<br />
*col: absCol() (''add one if border is visible'')<br />
*len: width() (''reduce by two if border is visible''')<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Makes a direct call to, and returns '''console.stredit()'''.<br />
For the coordinates and width arguments follow the same rules as the draw function.<br />
For the rest of the arguments of console.edit(), use the attributes of '''CLineEdit'''.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Str);<br />
</syntaxhighlight></big><br />
Copies the characters pointed by '''Str''' into the memory pointed by Field's '''_data''' up to '''_maxdatalen''' characters.<br />
<br />
===CLineEdit Student Resources===<br />
====CLineEdit Help/Questions Blogs====<br />
<br />
* [http://ksidhucode.blogspot.ca/2013/07/should-they-be-friends.html Kevin S - Need help with draw()]<br />
<br />
====CLineEdit Blog Posts====<br />
==CButton==<br />
Button is a child of CField.<br />
It displays a small piece of text (usually one word or two) and accepts one key hit entry.<br />
When in edit mode, to indicate the editing mode, it will surround the text with squared brackets.<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
namespace cui{<br />
class CButton: public CField{<br />
<br />
public:<br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CButton();<br />
void draw(int rn=C_FULL_FRAME);<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
This class does not have any attributes of its own!<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
When creating a Button, allocate enough memory to hold the contents of the '''Str''' and set Field's _data to point to it. Then copy the content of '''Str''' into the newly allocated memory.<br /><br />
Pass all the arguments directly to Field's constructor.<br /><br />
For Field size (width and hight) do the following:<br /><br />
For width: Set width to the length of '''Str''' + 2 (adding 2 for surrounding brackets) or if the Button is bordered set width to the length of '''Str''' + 4 (adding 2 for surrounding brackets and 2 for the borders).<br />
For height: Set the height to 1 or if the Button is bordered, set the height to 3.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CButton();<br />
</syntaxhighlight></big><br />
Deallocates the allocated memory pointed by Field's '''_data'''.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the Button with border around it if it is Bordered. Note that there should be a space before and after of the text that will be used to surround the text with "[" and "]"<br /><br />
hint:<br /><br />
:*First calls Frame's draw(fn) (passing the fn argument to the parents draw)<br />
<br />
:Use console.display() to display the Button's text (pointed by Field's _data)<br />
:*If not bordered<br />
:*:display the text at absRow() and absCol()<br />
:*If bordered<br />
:*:display the text at absRow()+1 and absCol()+2<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
First draw() the Button, then surround it by squared brackets, place the cursor under the first character of Button's text and wait for user entry.<br /><br />
When user hits a key, if the key is ENTER_KEY or SPACE, return C_BUTTON_HIT (defined in cuigh.h) otherwise return the entered key.<br /><br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
First deallocated what is pointed by Field's _data.<br />
Then allocate new memory to the size of content of str and copy the content into it and make<br />
Field's _data point to it.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always returns true<br />
<br />
===CButton Student Resources===<br />
====CButton Help/Questions Blogs====<br />
[http://pankajsama01.blogspot.ca/2013/03/cbuttonhit-key.html C_BUTTON_HIT Key] is not defined(Pankaj Sama)<br />
** It is defined in the new cuigh.h file. It is defined #define C_BUTTON_HIT 1. Gary Chen<br />
<br />
<br />
'''HELP: Brackets around buttons' labels'''<br />
: [http://namniak.blogspot.ca/2013/07/help-cbutton-brackets.html link] Vadim Namniak<br />
<br />
====CButton Blog Posts====<br />
==CValEdit==<br />
This class works exactly like CLineEdit and improves it by adding two features; Validation and Help. CValEdit is capable of validating the user input on exit and also provide help when CValEdit::edit() is active by invoking a '''"help"''' method before and after editing. If these two functions, (Validation and Help) are not provided, then CValEdit literally works like CLineEdit.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clineedit.h"<br />
<br />
namespace cui{<br />
class CValEdit: public CLineEdit{<br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
public:<br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
int edit();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
</syntaxhighlight></big><br />
*_help, holds the address of the help logic (function) or NULL if there is no help function is assigned <br />
*_validate, holds the address of the validation logic (function) or NULL if there is no validation function is assgned<br />
<br />
===Constructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
These constructors pass all their arguments to corresponding arguments of CLineEdit constructor and then set '''_help''' and '''_validate''' attributes to the corresponding incoming arguments<br />
<br />
===Method===<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
If the container() is NULL then this function works exactly like LineEdit::edit().<br /><br />
If the container() is not NULL:<br />
#If _help function exist, it calls the function passing MessageStatus::SetMessage and container()'s reference as arguments.<br />
#Calls CLineEdit's edit()<br />
#If validation function exists, and the terminating key of CLineEdit's edit() is a navigation key(see below)<br />
#:It will call the validation function on the Field's _data, if the data is valid, it goes to next step, otherwise it will repeat calling CLineEdit's edit().<br />
#After validation is done, if _help function exists, it will recall the help function using MessageStatus::ClearMessage and contianer()'s reference as arguments.<br />
#It will return the terminating key<br />
<br />
''Navigation keys are Up key, Down key, Tab key or Enter key.''<br /><br />
''MessageStatus is enumerated in '''cuigh.h'''''<br />
===CValedit Student Resources===<br />
====CValEdit Help/Questions Blogs====<br />
====CValedit Blog Posts====<br />
<br />
==CCheckMark==<br />
Creates a single CheckMark on the screen and allows the user to:<br /><br />
# Toggle it, if it is set to be a CheckMark for a Check List.<br />
# Only check it when its unchecked, if it is set to be a CheckMark for a Radio Button List.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
#include "clabel.h"<br />
namespace cui{<br />
class CCheckMark : public CField{<br />
bool _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
public:<br />
CCheckMark(bool Checked,const char* Format, const char* Text,<br />
int Row, int Col, int Width, bool IsRadio = false);<br />
CCheckMark(const CCheckMark& C);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* flag);<br />
bool checked()const;<br />
void checked(bool val);<br />
bool radio(); <br />
void radio(bool isRadio);<br />
operator bool(); <br />
operator char*(); <br />
bool operator=(bool flag);<br />
};<br />
}<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
</syntaxhighlight></big><br />
*'''_flag''' holds the status of the Checkbox (0: unchecked or 1: checked ) and is pointed by _data pointer .<br />
*'''_radio''' dictates the behavior of the Checkbox as a radio-button, or a check-mark.<br />
*'''_format''' holds the characters, the Checkbox is drawn with (i.e. "[X]", "(O)", "<*>", etc...).<br />
*'''_Label''' holds the Label attached to the this Checkbox<br />
<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(bool Checked,const char* Format, const char* Text, int Row, int Col, int Width, bool IsRadio = false);<br />
</syntaxhighlight></big><br />
*Passes the ''Row, Col, Width and "1"'' to ''row, col, width and height'' arguments of CField and directly initializes _Label with ''Text, 0, 4, and (Width-4)'' for ''Str, Row, Col and Len'', arguments of CLabel's Constructor.<br /><br />
<br />
*Sets the frame of _Label to its owner (Checkmark i.e. 'this');<br />
*Sets _flag to Checked<br />
*Sets _radio to IsRadio<br />
*Copies Format to _format<br />
*Sets _data to the address of _flag<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(const CCheckMark& C);<br />
</syntaxhighlight></big><br />
*Passes incoming CCheckMark reference ("C") to CField's copy constructor, and directly initializes the _Label with the _Label of C<br />
*Sets all the attributes of this object to the attributes of incoming CCheckMark reference ("C")<br />
*Sets _data to the address of _flag<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
Using Console methods:<br /><br />
#displays the _format string at absRow() and absCol()<br />
#if _flag is false, it will overwrite the second character printed above, with a space (removes the check mark on console)<br />
#draw()s the _Label<br />
#sets the position of the cursor at the checkmark (second character of printed _format)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the checkmark<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##if _radio is true, it will set the _flag to true<br />
##if _radio is false, it will flip the value of _flag. <br />
##draw()s the checkmark again<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
*Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* flag);<br />
</syntaxhighlight></big><br />
*Casts the incoming flag pointer to an (bool*) and sets the content of '''_flag''' to where '''flag''' is pointing to.<br />
<big><syntaxhighlight lang="cpp"><br />
bool checked()const;<br />
void checked(bool val);<br />
</syntaxhighlight></big><br />
*These methods set and get _flag.<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio(); // addition for R0.6<br />
void radio(bool isRadio); // addition for R0.6<br />
</syntaxhighlight></big><br />
* These to methods, get and set the '''_radio''' attribute.<br />
<big><syntaxhighlight lang="cpp"><br />
operator bool(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''bool''' cast to return the value of '''_flag'''<br />
<big><syntaxhighlight lang="cpp"><br />
operator char*(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''char*''' cast to return the value of '''_Label.data()'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool operator=(bool flag);; // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the operator= and set the _flag to flag<br />
<br />
===CCheckMark Student Resources===<br />
====CCheckMark Help/Questions Blogs====<br />
<br />
<br />
Hey Guys, In the constructor for CCheckmark it says : set the frame of _Label to its owner<br />
(checkmark i.e, "this")<br />
Can anyone tell me what this means or what the purpose of this is. Thanks in advance.<br />
<br />
Use this with caution since I don't really know if it is correct, but I did<br />
'''Label.container(this->container());'''<br />
<br />
-Bo Li<br />
<br />
http://lhmcintosh.blogspot.ca/2013/03/this.html Hope this helps! - LMC<br />
<br />
Please help - http://oop344class.wordpress.com/2013/03/29/setting-cursor-position-in-ccheckmark-draw-function/<br />
<br />
-S.E.<br />
<br />
I think you may try to change to console.setPos(row, ++col).<br />
-Ivy<br />
<br />
====CCheckMark Blog Posts====<br />
<br />
==CMenuItem==<br />
CMenuItem provides a Label that can be marked as selected by pressing the space bar.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clabel.h"<br />
#include "cfield.h"<br />
namespace cui{<br />
class CMenuItem:public CField{<br />
bool _selected;<br />
char _format[3];<br />
CLabel Label;<br />
public:<br />
CMenuItem(bool Selected,const char* Format, const char* Text,<br />
int Row, int Col, int Width);<br />
CMenuItem(const CMenuItem &CM);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* Selected);<br />
bool selected()const;<br />
void selected(bool val);<br />
const char* Text();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _selected;<br />
</syntaxhighlight></big><br />
Holds the status of the MenuItem, being selected or not;<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
Holds the surrounding characters with which a selected MenuItem is shown:<br /><br />
If _format holds "[]", then a selected MenuItem will be like [MenuText]<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel Label;<br />
</syntaxhighlight></big><br />
Hold the Text of the MenuItem.<br />
<br />
===Constructors / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(bool Selected,const char* Format, const char* Text, int Row, int Col, int Width);<br />
</syntaxhighlight></big><br />
#Initializes the CField with Row, Col, Width and 1 for Height<br />
#Initializes the Label with (Text, 0, 1 and Width-2) for (Str, Row, Col, and Len)<br />
#Sets the attributes to corresponding arguments<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object. <br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(const CMenuItem &CM);<br />
</syntaxhighlight></big><br />
#Passes CM to CField and Initializes the Label with CM<br />
#Sets the _selected to _selected of CM<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
#Draws the Label with fn <br />
#If _selected is true, it surrounds the Label Text the _format[0] and _format[1]<br />
#If _selected if false, it surrounds the Label with SPACEs (overwrites _format[0] and _format[1])<br />
#Positions the cursor at the first character of the Label<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the MenuItem<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##it will set the _selected to true<br />
##draw()s the MenuItem again<br />
#returns the key<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Returns true.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Selected);<br />
</syntaxhighlight></big><br />
Sets _selected to where Selected is pointing to<br />
<big><syntaxhighlight lang="cpp"><br />
bool selected()const;<br />
</syntaxhighlight></big><br />
Returns Selected<br />
<big><syntaxhighlight lang="cpp"><br />
void selected(bool val);<br />
</syntaxhighlight></big><br />
Sets _selected to val<br />
<big><syntaxhighlight lang="cpp"><br />
const char* Text();<br />
</syntaxhighlight></big><br />
Returns the text of Label<br />
<br />
===CMenuItem Student Resources===<br />
====CMenuItem Help/Questions Blogs====<br />
<br />
====CMenuItem Blog Posts====<br />
<br />
==CText==<br />
CText is a CField to edit a multiline text.<br /><br />
To do this, it will use the [[#The_Text_Helper_Class|Text class]] to convert a character string containing a text into a (simulated) two dimensional array. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#pragma once<br />
#include "cfield.h"<br />
#include "text.h"<br />
<br />
using namespace cui;<br />
<br />
<br />
class CText:public CField{<br />
Text _T;<br />
bool _displayOnly;<br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
int _lcurpos;<br />
int _loffset;<br />
public:<br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
void draw(int fn = C_FULL_FRAME);<br />
<br />
void set(const void *Str);<br />
void *data()const;<br />
<br />
int edit();<br />
bool editable()const;<br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
};<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
Text _T;<br />
</syntaxhighlight></big><br />
An instance of the [[#The_Text_Helper_Class|Text class]]<br />
<big><syntaxhighlight lang="cpp"><br />
bool _displayOnly;<br />
</syntaxhighlight></big><br />
If it is set to true, then the Text can only be viewed but not edited; All scrolling, page UP, DOWN, etc... is enabled but any attempt to change the text, is ignored quietly. This attribute is passed to ReadOnly argument of Console::edit(......). <br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
</syntaxhighlight></big><br />
Values used by Console::edit(......)<br />
<big><syntaxhighlight lang="cpp"><br />
int _lcurpos;<br />
int _loffset;<br />
</syntaxhighlight></big><br />
Vertical cursor position in text.<br />
Vertical offset of the text relative to the frame of CText. This value indicates, how many line are hidden above the frame when text is scrolled down.<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Initialized the CField with the corresponding incoming arguments and then sets all the attributes to their corresponding arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor but it also '''set()'''s the class to '''Str'''.<br />
<br />
===Methods=== <br />
'''Under Construction'''<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
First it will draw the CField using the fn arguement.<br /><br />
Then it will use console.display to display all the Lines of _T that are positioned inside the frame of the CText. (i.e. from _loffset to _loffset + Height() - 2).<br /><br />
Two Important things to note:<br />
# you should note that '''Lines''' are '''console.display()'''ed from _offset character. (i.e. &_T[theLineNumber][_offset]).<br />
# Also you should '''console.display()''' the Lines only if the length of the line is more than the _offset(i.e. _T[theLineNumver].strlen() > _offset)<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void *Str);<br />
</syntaxhighlight></big><br />
Sets the '''_T''' attribute to the incoming string.<br />
<big><syntaxhighlight lang="cpp"><br />
void *data()const;<br />
</syntaxhighlight></big><br />
Exports the string out of _T and returns its address after casting it to '''void*'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
# Create local variables to hold the following attributes in case ESCAPE is hit to undo:<br />
## _T<br />
## _curpos<br />
## _offset<br />
## _lcurpos<br />
## _loffset<br />
# Create the usual '''while(!done)''' structure for interfacing with user<br />
# '''draw()''' the text<br />
# '''console.edit()''' the Line at where vertical cursor is after _loffset.<br />
## use absRow() and _lcurpos to calculate the row on which the editing should happen<br />
## use absCol() to calculate the column on which editing to happen.<br />
## use width() to calculate the fieldLen for '''console.edit()'''<br />
## use the '''size()''' of the current '''Line''' in '''_T''' to determine the maximum data length of the string to '''console.edit()'''<br />
## the isTextEditor is always true<br />
## the ReadOnly depends on the value of '''_displayOnly'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
</syntaxhighlight></big><br />
These methods Get and Set the '''_displayOnly''' attribute.<br />
<br />
===The Text Helper Class===<br />
[https://github.com/Seneca-OOP344/20132notes/tree/master/textClass Text class]<br />
<br />
===CText Student Resources===<br />
====CText Help/Questions Blogs====<br />
====CText Blog Posts====<br />
<br />
==CCheckList==<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
#include "ccheckmark.h"<br />
namespace cui{<br />
<br />
class CCheckList : public CField{<br />
CCheckMark* _checkmarks[32];<br />
bool _radio;<br />
char _format[4];<br />
unsigned int _cnt;<br />
unsigned int _flags;<br />
unsigned int _cur;<br />
public:<br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
~CCheckList(void);<br />
CCheckList& add(const char* Text, bool selected = false);<br />
CCheckList& operator<<(const char* Text);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void* data();<br />
void set(const void* data);<br />
CCheckMark& operator[](unsigned int index);<br />
bool editable()const;<br />
bool radio()const;<br />
void radio(bool val);<br />
unsigned int flags()const;<br />
void flags(unsigned int theFlags);<br />
int selectedIndex()const;<br />
void selectedIndex(int index);<br />
unsigned int length();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark* _checkmarks[32];<br />
</syntaxhighlight></big><br />
An array of 32 CCheckmark pointers that will point to _cnt dynamically allocated CCheckMarks.<br />
<big><syntaxhighlight lang="cpp"><br />
bool _radio;<br />
</syntaxhighlight></big><br />
Holds the behaviour of the CCheckList to be like a Radio Button List or Check Mark List<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[4];<br />
</syntaxhighlight></big><br />
Holds the format with which a check mark is displayed (i.e. "[X]" or "(o)" etc...)<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
Holds the number of CCheckMarks currently in CCheckList<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _flags;<br />
</syntaxhighlight></big><br />
Always holds the bit pattern corresponding to the status of the CCheckMarks in the List. Note that bit 0 (right most) will correspond to the first CCheckMark.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cur;<br />
</syntaxhighlight></big><br />
Holds the index of the CCheckMark in the "_checkmarks" array which is currently being edited. (focused)<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes corresponding values to the Base class (CField) then <br />
#sets the _data attribute to the address of _flags<br />
#copies '''Format''' and '''radio''' into '''_format''' and '''_radio''' respectively <br />
#sets '''_cnt, _cur''' and '''_flags''' to zero<br />
<big><syntaxhighlight lang="cpp"><br />
~CCheckList(void);<br />
</syntaxhighlight></big><br />
Goes through '''_checkmarks''' up to '''_cnt''' and if deletes them one by one.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
* Only adds a new CCheckMark if '''_cnt''' does not exceed the maximum amount of '''_checkmarks''' (32)<br />
* Creates a new CCheckMark with the row being '''_cnt'''+1, the height being 1 and the length being the length of '''Text'''+4<br />
* Sets the newly created CCheckMarks' frame to '''this'''<br />
* Automatically expands the width of the CCheckList if the width of the newly created CCheckMark is bigger than the current width of the CCheckList<br />
* Sets the height of the CCheckList to '''_cnt'''+3<br />
* Updates the bit pattern of '''_flags'''<br />
* Increments '''_cnt'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text).<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the frame and then draws all the '''_checkmarks''', making sure the cursor is standing under the first checked checkmark.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
*Draws the '''CCheckList''' then starts editing the '''_checkmarks''' form '''_cur''' and according to the return key of CCheckMark::edit():<br />
**If Down or Right key is hit it goes to the next '''_checkmark''', if '''_cur''' is the last one, then it exits the edit, returning the last key entered.<br />
**UP and Left key works in opposite direction of Down and Right, if '''_cur''' is already zero, then it exits the edit, returning the last key entered.<br />
**If Space is hit, then if '''_radio''' is true, it will uncheck all the '''_checkmarks''' other than the '''_cur'''rent one.<br />
<big><syntaxhighlight lang="cpp"><br />
void* data();<br />
</syntaxhighlight></big><br />
returns the bit pattern held in _flags. <br /><br />
''make sure _flags are updated to the status of the '''_checkmarks'''''<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' and updates the '''_checkmarks''' to the bitpattern of '''_flags'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
returns the CCheckMark corresponding the '''index''' value.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always returns true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio()const;<br />
</syntaxhighlight></big><br />
returns '''_radio'''<br />
<big><syntaxhighlight lang="cpp"><br />
void radio(bool val);<br />
</syntaxhighlight></big><br />
sets the _radio and updates all _checkMarks radio value.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int flags()const;<br />
</syntaxhighlight></big><br />
returns the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
void flags(unsigned int theFlags);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
int selectedIndex()const;<br />
</syntaxhighlight></big><br />
returns the index of the first CCheckMark that is selected, and -1 if nothing is selected.<br />
<big><syntaxhighlight lang="cpp"><br />
void selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selectedindex. (only un-selects the rest if object is in radio mode)<br /><br />
if index is less than zero, then it will un-selects all<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int length();<br />
</syntaxhighlight></big><br />
returns '''_cnt'''<br />
<br />
===CCheckList Student Resources===<br />
====CCheckList Help/Questions Blogs====<br />
<br />
* If you copied the header (''cchecklist.h'') from the ''20132notes'' repository, make sure to remove the const keyword after the ''void* data()'' function, since it is not.<br />
* The same thing is for ''<u>void selectedIndex(int index)</u>'' and ''<u>int selectedIndex()const</u>'' — it is how they should look like.<br />
<br />
====CCheckList Blog Posts====<br />
<br />
==CMenu and MNode (optional)==<br />
CMenu is a linked list of MNodes. Providing menu selection for the user in two formats; Drop Down List, or a simple menu.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#ifndef __CUI__CMENU_H__<br />
#define __CUI__CMENU_H__<br />
#include "cuigh.h"<br />
#include "cfield.h"<br />
#include "cmenuitem.h"<br />
#include "cbutton.h"<br />
namespace cui{<br />
class Cmenu;<br />
<br />
class MNode{<br />
CMenuItem* _item;<br />
MNode* _next;<br />
MNode* _prev;<br />
unsigned int _index;<br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
~MNode(void);<br />
friend class CMenu;<br />
};<br />
<br />
class CMenu : public CField{<br />
MNode* _first;<br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
char _format[3];<br />
unsigned int _cnt;<br />
int _selectedIndex;<br />
bool _dropdown;<br />
bool _dropped;<br />
bool goNext();<br />
bool goPrev();<br />
CButton _Title;<br />
public:<br />
static const bool Select;<br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
CMenu& add(const char* Text, bool selected = false);<br />
CMenu& operator<<(const char* Text);<br />
CMenu& operator<<(bool select);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void set(const void* data);<br />
int selectedIndex() const;<br />
int selectedIndex(int index);<br />
const char* selectedText();<br />
bool editable()const;<br />
~CMenu(void);<br />
};<br />
extern const bool Select;<br />
}<br />
<br />
#endif<br />
</syntaxhighlight></big><br />
===MNode===<br />
MNode holds information about an Item in the menu:<br />
# The CMenuItem object<br />
# The index of this Item<br />
MNode is a fully private class and is only accessible by CMenu.<br />
====Attributes====<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem* _item;<br />
</syntaxhighlight></big><br />
Holds the address of a dynamically allocated CMenuItem<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _index;<br />
</syntaxhighlight></big><br />
Holds the index (sequence -1) number of the '''CMenuItem''' in the '''CMenu'''.<br />
<big><syntaxhighlight lang="cpp"><br />
MNode* _next;<br />
MNode* _prev;<br />
</syntaxhighlight></big><br />
Standard next and previous pointer for a linked list node.<br />
<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang="cpp"><br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
</syntaxhighlight></big><br />
Sets the corresponding attributes to the values of the arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
~MNode(void);<br />
</syntaxhighlight></big><br />
deletes the '''_item'''<br />
<br />
===CMenu===<br />
CMenu is a linked list of MNodes and also contains a CButton for a Title (only used on if in '''_dropdown''' mode). <br /><br />
Assuming that a CMenu is created with a title as "FILE" and menu-items as "Save, Load, Print, Quit":<br />
*When in '''_dropdown''' mode:<br />
When drawing, Only the _Title(CButton) is drawn (and not the menu itself)<br />
<big><pre><br />
FILE<br />
</pre></big><br />
When edited (in '''_dropdown''' mode) the CButton gets activated and if it is hit, then the Menu will be dropped down (drawn) under the CButton and user can browse through the options and select one of them. selecting the option in this case will close the menu and CButton gets activated again:<br /><br />
when active, CMenu looks like this:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits enter: (since nothing is selected all menu items are unselected)<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
| Print |<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
Now the cursor is standing under '''S'''ave.<br />
User hits down arrow twice to select '''P'''rint and then hits Space:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
The Print is selected and The menu is closed and FILE is active again.<br />
If the user hits Enter again:<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
We will see the Print is selected and the cursor in under P.<br />
If user hits Enter instead of space, the selection wont change and whatever was selected before will remain the same:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits navigation keys and moves out of the CMenu Field.<br />
''Note that if '''left''' or '''right''' navigation keys are hit when the title is active, then they are translated to '''up''' or '''down''' respectively.<br />
*When NOT in '''_dropdown''' mode:<br />
*:The CButton will not be displayed at all, and when user starts to edit, he enters the menu browsing the items and if he gets to the end of the menu, the control goes to the next field in the dialog. If user goes up and passes the first them, then the control will go to the previous field in the dalog.<br />
<big><pre><br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
''Note that if the number of menu items are more than the space provided by the CField's frame, then the menu items should scroll up and down to accommodate the selection'' <br />
====Attributes====<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _first;<br />
</syntaxhighlight></big><br />
points to the first CMenuItem visible on the menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
</syntaxhighlight></big><br />
standard Link list pointers<br />
<big><syntaxhighlight lang = "cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
The two characters used to surround the selected menu item<br />
<big><syntaxhighlight lang = "cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
The number of CMenuItems in CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
int _selectedIndex;<br />
</syntaxhighlight></big><br />
The index of the selected CMenuItem (saved in MNode::index), if there is no selected menu, then this value is -1.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropdown;<br />
</syntaxhighlight></big><br />
True if the Menu is a Drop Down Menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropped;<br />
</syntaxhighlight></big><br />
Flag used to hold the status of a Drop Down Menu, (_dropped or not)<br />
<big><syntaxhighlight lang = "cpp"><br />
bool goNext();<br />
bool goPrev();<br />
</syntaxhighlight></big><br />
standard gonext() and goprev() in linked lists<br />
<big><syntaxhighlight lang = "cpp"><br />
CButton _Title;<br />
</syntaxhighlight></big><br />
CButton holding the Title of this menu<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
#Initializes CField as follows:<br />
#* Row: Passes Row, if this menu is not a dropdown, otherwise it will pass Row+1.<br />
#* Col, Width, Height are passed directly<br />
#* Data: a void null pointer is passed for data<br />
#* Bordered: since CMenu is always bordered, true is passed here<br />
#* Border is directly passed.<br />
#Initializes _Title (the CButton) as follows:<br />
#* Str, Title is passed here<br />
#* Row, -1<br />
#* Col, 1<br />
#* Bordered, since the title of the dorpdown is alway NOT bordered, then false is passed here.<br />
#Constructor Settings:<br />
#* Link list attributes are set as standard linked list contructor<br />
#* Format is copied into _format<br />
#* _cnt is set to zero<br />
#* _selectedIndex is set to -1<br />
#* _data is set to address of _selectedIndex<br />
#* _dropdown is set to dropdown<br />
#* _dropped is set to false<br />
#* _Title's frame is set to the CMenu object (this)<br />
<big><syntaxhighlight lang = "cpp"><br />
~CMenu();<br />
</syntaxhighlight></big><br />
Standard Linked list destructor<br />
<br />
====Methods====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
Standard append for a linked list:<br />
#creates an MNode with<br />
#* a new CMenutItem with<br />
#*:selected, _format, Text for first three arguments<br />
#*:1, 1, and (width of the menu) -2, for Row col and width<br />
#* the rest are what is needed for a standard append procedure for a linked list<br />
#appends the new MNode to the end of the list<br />
#if the new added CMenuItem is selected, it will update the selected index<br />
'''''Note that if the added CMenuItem is the first CMenuItem in the list, then the _first pointer should be pointing to it'''''<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text)<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(bool select);<br />
</syntaxhighlight></big><br />
if select is true, it will select the last CMenuItem added to the CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
#if this is a '''_dropdown''', then it will draw the _Title<br />
#: and then if '''_dropped''' is true, it will draw the CField and then draw the CMenuItems starting form what _first is pointing to, up to (CField's hieght -2) times.<br />
#if this not a '''_dropdown''' then the _Title will never be drawn and the CMenuItems should be drawn as above.<br />
<big><syntaxhighlight lang = "cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Edits the menu the way it is explains in [[#CMenu|CMenu]] description.<br /><br />
If it is too confusing, this [[CMenu pseudo code - OOP344 20113|pseudo code]] may help.<br />
<big><syntaxhighlight lang = "cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
Sets the selected index to the integer pointed by data;<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex() const;<br />
</syntaxhighlight></big><br />
returns the selected index or -1 if nothing is selected<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selected index.<br />
<big><syntaxhighlight lang = "cpp"><br />
const char* selectedText();<br />
</syntaxhighlight></big><br />
returns the text of the selected menu. If nothing is selected, empty string is returned.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
returns true if '''_cnt''' is greater than zero<br />
<br />
===CMenu Student Resources===<br />
====CMenu Help/Questions Blogs====<br />
====CMenu Blog Posts====</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97430Weekly Schedule 20132 - OOP3442013-07-31T01:57:18Z<p>Oleksandr Snurnikov: /* This Week 9 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion [http://www.cplusplus.com/articles/D2N36Up4/ some documentations]<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post] - Alexander Snurnikov<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
* Templates excercise[http://template-inheritance.blogspot.ca/ Template Blog Post]- Prabhleen Bhupal<br />
<br />
* [http://brackethunter.blogspot.ca/2013/07/int-to-bin-v01.html Int to Bin attempt] - Brad Stuart (I can't find the base code for the templates stuff, so I created this one for making an array of whatevers)<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
*Static Variable review<br />
*The compilation process [http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work compilation steps]<br />
*:Compilation order<br />
*:The linker<br />
*:Common Linker Errors<br />
*Multiple Inheritance Cont<br />
*:Virtual Inheritance<br />
*Advanced Template Use<br />
*:Template functions cont<br />
*:Template definition in CPPs<br />
*Const review [http://duramecho.com/ComputerInformation/WhyHowCppConst.html why & how?!]<br />
*New Keywords<br />
*:Volatile<br />
*:Union<br />
*Arrays<br />
*:Basic arrays review<br />
*:Heterogeneous Arrays<br />
*Standard Template Library<br />
*:std::string class<br />
*[http://www.cplusplus.com/doc/tutorial/typecasting/ Constrained Casting]<br />
*:static_cast<br />
*:reinterpret_cast<br />
*:const_cast<br />
*:dynamic_cast<br />
*Bit-wise Introduction<br />
<br />
=== To Do 11===<br />
*A2 0.4 Milestone - Due July 19th<br />
*No code exercise this week... INSTEAD: Blog about how you feel about the world of programming, where you want to go with your career, what professional options you are considering, etc!<br />
=== Resources 11===<br />
* Does anybody know any good link to study heterogeneous array???<br />
<br />
=== blog posts 11===<br />
* [http://admixdev.com/2013/07/23/how-i-feel-about-the-world-of-programming/ About the World of programming and future at all] - Alexander Snurnikov<br />
* [http://lisyonok85.wordpress.com/2013/07/23/pro-gro-min-whaaa/ The world of art and me] -Artem Luzyanin<br />
* [http://brackethunter.blogspot.ca/2013/07/programming-from-pet-basic-to-php.html/ An old man laments] -Brad Stuart (Link is broken...)<br />
<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
*Bitwise operations<br />
*:Bitwise Negation<br />
*:Bitwise AND(&), OR(|), XOR(^)<br />
*:Bit Shifting<br />
*:Circular Bit Shifting<br />
*:Flag definition<br />
*Basic Encryption<br />
*:XOR Cipher with key shifting<br />
*STL<br />
*:std::queue<br />
*:std::vector review<br />
*:std::string review<br />
*:std::iterator review<br />
*:std::find<br />
*:std::sort<br />
*:std::binary_search<br />
*File Streams<br />
*:fstream review<br />
*:fstream flags<br />
*:binary files<br />
*:saving and loading state from binary<br />
=== To Do 12===<br />
*A2 0.6 Milstone - Due July 26th<br />
* Implement a serialization function on our [https://github.com/Seneca-OOP344/20132notes/blob/master/SecAB/07-July%209/DoublyLinkedList.h Doubly Linked List] that writes the list to a binary file and a load function that loads the list from the binary file. Be sure to keep the list's structure intact. Proper implementations will net the student a bonus 0.5%, blog about result, but do not post code, instead email me your solutions.<br />
<br />
=== Resources 12===<br />
=== blog posts 12===<br />
<br />
[http://lisyonok85.wordpress.com/?p=20 Artem's success]<br />
<br />
[http://markieta.blogspot.ca/2013/07/binary-serialization-of-doubly-linked.html Christopher Markieta]<br />
<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97337Weekly Schedule 20132 - OOP3442013-07-23T03:48:25Z<p>Oleksandr Snurnikov: /* blog posts 11 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post] - Alexander Snurnikov<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
* Templates excercise[http://template-inheritance.blogspot.ca/ Template Blog Post]- Prabhleen Bhupal<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
*Static Variable review<br />
*The compilation process [http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work compilation steps]<br />
*:Compilation order<br />
*:The linker<br />
*:Common Linker Errors<br />
*Multiple Inheritance Cont<br />
*:Virtual Inheritance<br />
*Advanced Template Use<br />
*:Template functions cont<br />
*:Template definition in CPPs<br />
*Const review [http://duramecho.com/ComputerInformation/WhyHowCppConst.html why & how?!]<br />
*New Keywords<br />
*:Volatile<br />
*:Union<br />
*Arrays<br />
*:Basic arrays review<br />
*:Homogeneous Arrays<br />
*Standard Template Library<br />
*:std::string class<br />
*[http://www.cplusplus.com/doc/tutorial/typecasting/ Constrained Casting]<br />
*:static_cast<br />
*:reinterpret_cast<br />
*:const_cast<br />
*:dynamic_cast<br />
*Bit-wise Introduction<br />
<br />
=== To Do 11===<br />
*A2 0.4 Milestone - Due July 19th<br />
*No code exercise this week... INSTEAD: Blog about how you feel about the world of programming, where you want to go with your career, what professional options you are considering, etc!<br />
=== Resources 11===<br />
=== blog posts 11===<br />
* [http://admixdev.com/2013/07/23/how-i-feel-about-the-world-of-programming/ About the World of programming and future at all] - Alexander Snurnikov<br />
<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=The_CUI_Framework_-_OOP344_20132&diff=97327The CUI Framework - OOP344 201322013-07-20T02:50:05Z<p>Oleksandr Snurnikov: /* CCheckList Help/Questions Blogs */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
<br />
=Objective=<br />
Your objective at this stage is to create series of core classes designed to interact with the user. These '''Core Classes''' then can be used in development of any interactive application.<br />
<br />
Please note that the class definitions here are minimum requirement for the Core Classes and you are free to add any enhancements or features you find useful. However make sure that you discuss these enhancements with your team and professor to make sure they are feasible before implementation.<br />
<br />
It is highly recommended to develop the classes in the order they are stated here. You must create your own tester programs for each class (if possible); However, close to due date of each release, a tester program may be provided to help you verify the functionality of your classes. If tester programs are provided, then executables of the test programs will be available on matrix to show you how it is supposed to run.<br />
<br />
Also object your professor's implementation of all the classes are available in your class notes repository. Please note the following:<br />
* these implementations include a header file for each class and an object file for each class and platform<br />
* these are for you to test your own implementation in case you need to have access to another class and they are not developed yet.<br />
* like any other implementation, these implementations could be buggy <br />
<br />
=Tips=<br />
* [[GIT for OOP344 Projects| Guide for using Github]]<br />
Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything).<br />
Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines:<br />
* Add recompilation safeguards to all your header files.<br />
* Always use forward declaration if possible instead of including a class header-file.<br />
* Use includes only in files in which the actual header file code is used. <br />
* '''Avoid "just in case" includes.'''<br />
<br />
=CUI General Header file (cuigh.h)=<br />
The general header file holds the common setting and definition between all the Core Classes. Review this header file at each stage of the project for changes. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#ifndef ___CUIGH_H__<br />
#define ___CUIGH_H__<br />
namespace cui{ <br />
#ifndef _CRT_SECURE_NO_DEPRECATE<br />
#define _CRT_SECURE_NO_DEPRECATE<br />
#endif<br />
#ifndef _CRT_SECURE_NO_WARNINGS<br />
#define _CRT_SECURE_NO_WARNINGS<br />
#endif<br />
<br />
#define C_INITIAL_NO_FIELDS 50<br />
#define C_DIALOG_EXPANSION_SIZE 20<br />
#define C_BUTTON_HIT 1<br />
#define C_MAX_LINE_CHARS (1024u)<br />
<br />
#define C_REFRESH -2<br />
#define C_FULL_FRAME -1<br />
#define C_NO_FRAME 0<br />
<br />
#define C_BORDER_CHARS "/-\\|/-\\|"<br />
enum CDirection {centre, left, right, up, down};<br />
// added after 0.3:<br />
enum MessageStatus{ClearMessage,SetMessage};<br />
<br />
<br />
#ifdef NO_HELPFUNC<br />
# undef NO_HELPFUNC<br />
#endif<br />
#define NO_HELPFUNC ((void(*)(MessageStatus, CDialog&))(0))<br />
#ifdef NO_VALDFUNC<br />
# undef NO_VALDFUNC<br />
#endif<br />
#define NO_VALDFUNC ((bool(*)(const char*, CDialog&))(0))<br />
<br />
<br />
#define C_MAX_LINE_CHARS (1024u)<br />
#define C_INITIAL_NUM_OF_LINES (100u)<br />
}<br />
#endif<br />
<br />
</syntaxhighlight></big><br />
<br />
=File Names=<br />
Use the following rules to create filenames for your class.<br />
*Each class MUST have its own header file and cpp file for implementation<br />
*Use the class name for the name of the file but make sure it is all '''''lowercase'''''.<br />
*:For example '''CFrame''' class should have '''cframe.h''' and '''cframe.cpp''' files for its implementation.<br />
<br />
=Hierarchy=<br />
<big><pre><br />
CFrame<br />
|<br />
|---CDialog<br />
|<br />
|<br />
|---CField<br />
|<br />
|-------- CLabel<br />
|<br />
|<br />
|-------- CButton<br />
|<br />
|<br />
|-------- CLineEdit<br />
| |<br />
| |-------CValEdit<br />
|<br />
|-------- CText<br />
|<br />
|<br />
|-------- CCheckMark<br />
|<br />
|<br />
|-------- CCheckList <br />
|<br />
|<br />
|-------- CMenuItem <br />
|<br />
|<br />
|-------- CMenu <br />
</pre></big><br />
<br />
=Issues, Releases and Due Dates=<br />
*Issue Name Format<br />
*:Issue and branch name format: '''V.V_Name''' <br /><br />
*:example; issue: Add Text Class to the project (issue 2.9.1) issue and branch name on github: '''2.9.1_AddTextClass'''<br /><br />
: <br />
* A2 Milestone 0.2 - Due Friday July 12th<br />
*: Split up work within group and document it in the team pages<br />
*: Add skeletons for each class (empty function definitions in .cpp files)<br />
*:<br />
* A2 Milestone 0.4 - Due Friday July 19th<br />
*: Implement CLabel<br />
*: Implement CButton<br />
*: Implement CLineEdit<br />
*:<br />
* A2 Milestone 0.5 - Due Friday July 26th<br />
*: Implement CDialog<br />
*: Implement CValEdit<br />
*: Implement CMenuItem<br />
*:<br />
* A2 Milestone 0.7 - Due Friday August 3rd<br />
*: Implement CCheckMark<br />
*: Implement CText<br />
*: Implement CCheckList<br />
*:<br />
* A2 Milestone 0.9 - Due Friday August 9th<br />
*: Implement CMenu<br />
*: Merge all projects and verify CIO framework is fully functional and bugless<br />
*:<br />
* A2 Milestone 1.0 - Due Friday August 15th<br />
*: The Application<br />
*:<br />
Please note these are latest recommendations and you should intend to have these completed BEFORE the due dates. The final dead-line for this project is August 15h, no projects will be accepted past this point.<br />
<br />
=Classes=<br />
==CFrame==<br />
The code for this class is provided in your repository. You must understand and use it to develop your core classes in your repository.<br />
<br />
CFrame class is responsible to create a frame or structure in which all user interface classes contain themselves in. It can draw a border around it self or be border-less. <br />
CFrame also, before displaying itself on the screen, will save the area it is about to cover, so it can redisplay them to hide itself.<br />
<br />
CFrame is base of all objects in our user interface system. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#include "cuigh.h"<br />
<br />
class CFrame{<br />
int _row; // relative row of left top corner to the container frame or the screen if _frame is null<br />
int _col; // relative col of left top corner to the container frame or the screen if _frame is null<br />
int _height; <br />
int _width;<br />
char _border[9]; // border characters<br />
bool _visible; // is bordered or not<br />
CFrame* _frame; // pointer to the container of the frame (the frame, surrounding this frame)<br />
char* _covered; // pointer to the characters of the screen which are covered by this frame, when displayed<br />
void capture(); // captures and saves the characters in the area covered by this frame when displayed and sets <br />
// _covered to point to it<br />
void free(); // deletes dynamic memory in the _covered pointer<br />
protected:<br />
int absRow()const; <br />
int absCol()const; <br />
public:<br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
<br />
virtual void draw(int fn=C_FULL_FRAME);<br />
virtual void move(CDirection dir);<br />
virtual void move();<br />
virtual void hide();<br />
<br />
virtual ~CFrame();<br />
<br />
/* setters and getters: */<br />
<br />
bool fullscreen()const;<br />
<br />
void visible(bool val);<br />
bool visible()const;<br />
<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
<br />
void row(int val);<br />
int row()const;<br />
<br />
void col(int val);<br />
int col()const;<br />
<br />
void height(int val);<br />
int height()const;<br />
<br />
void width(int val);<br />
int width()const;<br />
<br />
void refresh();<br />
};<br />
</syntaxhighlight></big><br />
===Properties===<br />
int _row, holds the relative coordinate of top row of this border with respect to its container.<br /><br />
int _col, same as _row, but for _col. <br /><br />
int _height, height of the entity. <br /><br />
int _width, width of the entity. <br /><br />
char _border[9], characters used to draw the border: <br /><br />
: _border[0], left top<br />
: _border[1], top side<br />
: _border[2], right top<br />
: _border[3], right side<br />
: _border[4], right bottom<br />
: _border[5], bottom side<br />
: _border[6], bottom left<br />
: _border[7], left side<br />
bool _visible; Indicates if the border surrounding the entity is to be drawn or not. <br /><br />
CFrame* _frame; holds the container (another CFrame) which has opened this one (owner or container of the current CFrame). '''_frame''' will be NULL if this CFrame does not have a container, in which case, it will be full screen and no matter what the values of row, col, width and height are, CFrame will be '''Full Screen''' (no border will be drawn)<br /><br />
char* _covered; is a pointer to a character array that hold what was under this frame before being drawn. When the CFrame wants to hide itself, it simple copies the content of this array back on the screen on its own coordinates.<br />
<br />
===Methods and Constructors===<br />
====Private Methods====<br />
<big><syntaxhighlight lang="cpp"><br />
void capture(); <br />
</syntaxhighlight></big><br />
:if _covered pointer is not pointing to any allocated memory, it will call the iol_capture function to capture the area that is going to be covered by this frame and keeps its address in _covered.<br />
<br />
====Protected Methods====<br />
*int absRow()const; calculates the absolute row (relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''row()''' of this border plus all the '''row()'''s of the '''_frame'''s<br />
*int absCol()const; calculates the absolute column(relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''col()''' of this border plus all the '''col()'''s of the '''_frame'''s<br />
<br />
====Public Methods====<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
</syntaxhighlight></big> <br />
:Sets the corresponding attributes to the incoming values in the argument list and set _covered to null<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
* First it will '''capture()''' the coordinates it is supposed to cover<br />
* If frame is '''fullscreen()''' then it just clears the screen and exits. <br /><br />
<br />
Otherwise:<br /><br />
*If the _visible flag is true, it will draw a box at _row and _col, with size of _width and _height using the _border characters and fills it with spaces. Otherwise it will just draw a box using spaces at the same location and same size.<br />
<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void move(CDirection dir);<br />
</syntaxhighlight></big><br />
First it will hide the Frame, then adjust the row and col to move to the "dir" direction and then draws the Frame back on screen.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void hide();<br />
</syntaxhighlight></big><br />
using iol_restore()it restores the characters behind the Frame back on screen. It will also free the memory pointed by _covered; <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CFrame();<br />
</syntaxhighlight></big><br />
It will make sure allocated memories are freed.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool fullscreen()const;<br />
void visible(bool val);<br />
bool visible()const;<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
void row(int val);<br />
int row()const;<br />
void col(int val);<br />
int col()const;<br />
void height(int val);<br />
int height()const;<br />
void width(int val);<br />
int width()const;<br />
</syntaxhighlight></big><br />
<br />
These functions set and get the attributes of the CFrame.<br />
===CFrame Student Resources===<br />
====CFrame Help/Questions Blogs====<br />
====CFrame Blog Posts====<br />
<br />
==CField==<br />
<br />
CField is an abstract base class that encapsulates the commonalities of all Input Outputs Console Fields which are placeable on a CDialog. All Fields could be Framed, therefore a CField is inherited from CFrame.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cframe.h"<br />
class CDialog;<br />
class CField : public CFrame{<br />
protected:<br />
void* _data;<br />
public:<br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CField();<br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
<br />
<br />
virtual void set(const void* data) = 0;<br />
virtual void* data()const; //<== check this, not sure<br />
<br />
void container(CDialog* theContainer);<br />
CDialog* container();<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void* _data;<br />
</syntaxhighlight></big><br />
Will hold the address of any type of data a CField can hold.<br />
===Constructors and Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes the corresponding attributes to it's parents (CFrame) constructor and then sets the _data attribute to the incoming Data argument. Also using '''container(CDialog* theContainer)''' it set the container to NULL.<br />
<big><syntaxhighlight lang="cpp"><br />
~CField();<br />
</syntaxhighlight></big><br />
Empty Destructor<br />
<big><syntaxhighlight lang="cpp"><br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
virtual void set(const void* data) = 0;<br />
</syntaxhighlight></big><br />
Pure virtual methods to enforce the children to implement;<br />
* an edit() method<br />
* an editable() method that returns true if the class is to edit data and false if the class is to only display data.<br />
* a set() method to set the _data attribute to the data the class is to work with.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void* data() const; <--- Check this not sure....<br />
</syntaxhighlight></big><br />
Returns _data.<br />
<big><syntaxhighlight lang="cpp"><br />
void container(CDialog* theContainer);<br />
</syntaxhighlight></big><br />
Casts '''"theContainer"''' to a CFrame pointer and passes it to CFrame::frame(CFrame*) method; (to set the frame of CDialog)<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog* container();<br />
</syntaxhighlight></big><br />
Casts the return value of CFrame::frame() to a CDialog pointer and returns it.<br />
===CField Student Resources===<br />
====CField Help/Questions Blogs====<br />
====CField Blog Posts====<br />
<br />
==CLabel==<br />
A readonly Field that encapsulates console.display() function. (i.e it is responsible to display a short character string on the display) CLabel although, by inheritance is Frame, but it is never '''bordered'''.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
class CLabel : public CField{<br />
// for length of the field:<br />
// Use void CFrame::width(int) to store length, and int CFrame::width() to retrieve the length<br />
<br />
public:<br />
CLabel(const CLabel& L);<br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
CLabel(int Row, int Col, int Len);<br />
~CLabel();<br />
void draw(int fn=C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
No attributes, (use Cframe attributes)<br />
<br />
===Constructors / Destructor ===<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
</syntaxhighlight></big><br />
passes the Row and Col to the CField constructor and then;<br />
if len is zero, it will allocate enough memory to store the string pointed by Str and then copies the Str into it.<br />
if len > 0, then it will allocate enough memory to store '''len''' chars, copying only len characters of str.<br />
In any way, the allocated memory is pointed by '''_data'''. Also it will set the width to the length of the memory allocated.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(int Row, int Col, int Len);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor, but len in this case can not be zero. (no validation required) and the string pointed by _data will be set to an empty string.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const CLabel& L);<br />
</syntaxhighlight></big><br />
Copies a CLabel safely to guaranty there is no memory leak.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLabel();<br />
</syntaxhighlight></big><br />
makes sure that memory pointed by _data is deallocated before the object is destroyed.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
makes a direct call to console.strdsp(), passing '''_data''' for the string to be printed and absRow() and absCol() for row and col and width() for len.<br />
this function ignores the argument fn.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
calls draw, returning 0.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always return false.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
if width() is greater than zero, it will copy the string pointed by str into the string pointed by _data upto width characters.<br />
if width() is zero,<br /> It will delete the memory pointed by _data and reallocates enough memory for str and copies the string pointed by str into the newly allocated memory pointed by _data.<br />
<br />
===CLabel Student Resources===<br />
====CLabel Help/Questions Blogs====<br />
====CLabel Blog Posts====<br />
<br />
==CDialog==<br />
Organizes CField objects on the screen, displays them and then lets the user edit them one by one. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cuigh.h"<br />
#include "cframe.h"<br />
namespace cui{<br />
class CField;<br />
class CDialog: public CFrame{<br />
private:<br />
int _fnum;<br />
int _curidx;<br />
CField** _fld;<br />
bool* _dyn;<br />
bool _editable;<br />
unsigned int _fldSize;<br />
public:<br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CDialog();<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit(int fn = C_FULL_FRAME);<br />
<br />
int add(CField* field, bool dynamic = true);<br />
int add(CField& field, bool dynamic = false);<br />
CDialog& operator<<(CField* field);<br />
CDialog& operator<<(CField& field);<br />
<br />
bool editable();<br />
int fieldNum()const;<br />
int curIndex()const;<br />
<br />
CField& operator[](unsigned int index);<br />
CField& curField();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _fnum; <br />
</syntaxhighlight></big><br />
Holds the number of Fields added to the Dialog<br />
<big><syntaxhighlight lang="cpp"><br />
bool _editable;<br />
</syntaxhighlight></big><br />
will be set to true if any of the Fields added are editable. <br />
This is optional because it depends on how you are going to implement the collection of CFields:<br />
<big><syntaxhighlight lang="cpp"><br />
int _curidx;<br />
</syntaxhighlight></big><br />
Holds the index of the Field that is currently being edited.<br />
<big><syntaxhighlight lang="cpp"><br />
CField** _fld;<br />
</syntaxhighlight></big><br />
Dynamic array of CField pointers to hold the address of the CField objects added to the screen. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br />
<big><syntaxhighlight lang="cpp"><br />
bool* _dyn;<br />
</syntaxhighlight></big><br />
A dynamic bool array that holds series of booleans to the exact number of fields, and each boolean here will hold false if the corresponding field pointed by _fld is allocated dynamically or not. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br /> <br />
This array will later on be used by destructor to decide which object is dynamic and to be deleted.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _fldSize; <br />
</syntaxhighlight></big><br />
Holds the current length of '''''_fld''''' and '''''_dyn'''''. <br />When adding a field to dialog if '''_fnum''' reaches '''_fldSize''', then the size of '''_fld''' and '''_dyn''' is expanded by '''''C_DIALOG_EXPANSION_SIZE''''', defined in '''cuigh.h'''<br />
<br />
===Constructors/Destructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Borderd = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
The constructor passes all the incoming arguments to the corresponding arguments of the apparent constructor '''CFrame'''.<br /><br />
Then it will set all called attributes to their default values and then sets all the field pointers (_fld) to NULL.<br />
It also sets all the dynamic (_dyn) flags to false. <br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CDialog();<br />
</syntaxhighlight></big><br />
The destructor will loop through all the field pointers and if the corresponding dynamic flag is true then it will delete the field pointed to by the field pointer.<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''fn''' is '''C_FULL_FRAME''', it will call its parent draw. Then It will draw all the '''Fields''' in the '''Dialog'''. <br /><br />
If '''fn''' is Zero, then it will just draw all the '''Fields''' in the '''Dialog'''.<br /><br />
If '''fn''' is a non-zero positive value, then it will only draw '''Field''' number '''fn''' in the dialog. (First added '''Field''' is field number one.)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''CDialog''' is not editable (all fields are non-editable), it will just display the Dialog and then waits for the user to enter a key and then terminates the function returning the key.<br /><br />
If fn is '''0''' or less, then before editing, the draw method is called with '''fn''' as its argument and then editing begins from the first editable Field.<br />
<br />
If fn is greater than '''0''' then editing begins from the first editable key on or after Field number '''fn'''.<br />
<br />
Note that fn is the sequence number of field and not the index. (First field number is one)<br />
<br />
Start editing from field number '''fn''';<br />
<br />
Call the edit of each field and depending on the value returned, do the following:<br /><br />
# For '''ENTER_KEY''', '''TAB_KEY''' and '''DOWN_KEY''', go to next editable Field , if this is the last editable Field then restart from Field number one.<br />
# For '''UP_KEY''' go to the previous editable Field, if there is no previous editable Field, go to the last editable Field in the Dialog.<br />
# For any other key, terminate the edit function returning the character which caused the termination.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField* field, bool dynamic = true);<br />
</syntaxhighlight></big><br />
First, this function will check the value of _fnum. If '''_fnum''' has reached '''_fldSize''', ('''_fld''' and '''_dyn''' arrays are full) it will expand '''_fld''' and '''_dyn''' by '''C_DIALOG_EXPANSION_SIZE''' (defined in '''cuigh.h''') to make room for more '''CField'''.<br /><br />
Then, it adds the CField pointed by '''field''' to the Fields of the Dialog; by appending the value of the field pointer after the last added ''field'' in the _fld array , setting the corresponding _dyn element to the value of dynamic argument and then increasing _fnum by one and returning the index of added Field in the CDialog object.<br /><br />
'''important note:'''<br /><br />
Make sure that add() sets the container of the added CField to this CDialog object, using the container() method of CField<br /><br />
Also make sure, if size of _fld and _dyn are expanded, then _fldSize is also increased.<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField& field, bool dynamic = false);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method.<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField* field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField& field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the second add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable();<br />
</syntaxhighlight></big><br />
Returns '''_editable''';<br />
<big><syntaxhighlight lang="cpp"><br />
int fieldNum()const;<br />
</syntaxhighlight></big><br />
returns '''_fnum'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int curIndex()const;<br />
</syntaxhighlight></big><br />
returns '''_curidx''';<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CField& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
Returns the reference of the Field with incoming index. (Note that here, the first field index is '''0''')<br />
<big><syntaxhighlight lang="cpp"><br />
CField& curField();<br />
</syntaxhighlight></big><br />
Returns the reference of the Field that was just being edited.<br />
<br />
===CDialog Student Resources===<br />
====CDialog Help/Questions Blogs====<br />
<br />
====CDialog Blog Posts====<br />
<br />
==CLineEdit==<br />
'''ClineEdit''' encapsulates the console.edit() function of Console class.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
namespace cui{<br />
class CLineEdit: public CField{<br />
bool _dyn;<br />
int _maxdatalen;<br />
bool* _insertmode;<br />
int _curpos;<br />
int _offset;<br />
public:<br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CLineEdit();<br />
void draw(int Refresh = C_FULL_FRAME);<br />
<br />
int edit();<br />
bool editable()const;<br />
<br />
void set(const void* Str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _dyn;<br />
</syntaxhighlight></big><br />
_dyn is set to true if the object dynamically allocated memory and is responsible to free it at destruction time.<br />
<big><syntaxhighlight lang="cpp"><br />
int _maxdatalen;<br />
</syntaxhighlight></big><br />
no comment!<br />
<big><syntaxhighlight lang="cpp"><br />
bool* _insertmode;<br />
</syntaxhighlight></big><br />
points to the location of input method (insert or overstrike)<br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
</syntaxhighlight></big><br />
current position of cursor<br />
<big><syntaxhighlight lang="cpp"><br />
int _offset;<br />
</syntaxhighlight></big><br />
current offset<br />
<br />
===Constructors / Destructor=== <br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
<br />
LineEdit, sets the Field's _data to the value of str. If LineEdit is instantiated with this constructor then it will edit an external string provided by the caller function of LineEdit. LineEdit in this case is not creating any dynamic memory, therefore _dyn is set to false (therefore the destructor will not attempt to deallocate the memory pointed by _data).<br /><br />
The location (row and col) and Bordered are directly passed to the parent (CField) and str is passed as data to the parent constructor. Unlike Label, LineEdit could have border or not so depending on this (Bordered being true or false) the Height is set to 3 or 1 respectfully. <br /><br />
(hint: use '''? :''' operator to pass the proper Height value to CField's constructor)<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor with one difference; since no external data is passed to be edited here, this constructor must allocate enough dynamic memory to accommodate editing of '''Maxdatalen''' characters. Then make it an empty string and set Fields's _data to point to it. Make sure _dyn is set to true in this case, so the destructor knows that it has to deallocate the memory at the end.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLineEdit();<br />
</syntaxhighlight></big><br />
If '''_dyn''' is true, it will deallocate the character array pointed by Fields's '''_data'''<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int Refresh = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
It will first call Frame's draw passing '''Refresh''' as an argument to it.<br /><br />
Then it will make a direct call to console.display() to show the data kept in Field's '''_data'''.<br /><br />
The values used for the arguments of console.display() are:<br />
*str: address of string pointed by _data + the value of _offset<br />
*row: absRow() (''add one if border is visible'')<br />
*col: absCol() (''add one if border is visible'')<br />
*len: width() (''reduce by two if border is visible''')<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Makes a direct call to, and returns '''console.stredit()'''.<br />
For the coordinates and width arguments follow the same rules as the draw function.<br />
For the rest of the arguments of console.edit(), use the attributes of '''CLineEdit'''.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Str);<br />
</syntaxhighlight></big><br />
Copies the characters pointed by '''Str''' into the memory pointed by Field's '''_data''' up to '''_maxdatalen''' characters.<br />
<br />
===CLineEdit Student Resources===<br />
====CLineEdit Help/Questions Blogs====<br />
<br />
* [http://ksidhucode.blogspot.ca/2013/07/should-they-be-friends.html Kevin S - Need help with draw()]<br />
<br />
====CLineEdit Blog Posts====<br />
==CButton==<br />
Button is a child of CField.<br />
It displays a small piece of text (usually one word or two) and accepts one key hit entry.<br />
When in edit mode, to indicate the editing mode, it will surround the text with squared brackets.<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
namespace cui{<br />
class CButton: public CField{<br />
<br />
public:<br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CButton();<br />
void draw(int rn=C_FULL_FRAME);<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
This class does not have any attributes of its own!<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
When creating a Button, allocate enough memory to hold the contents of the '''Str''' and set Field's _data to point to it. Then copy the content of '''Str''' into the newly allocated memory.<br /><br />
Pass all the arguments directly to Field's constructor.<br /><br />
For Field size (width and hight) do the following:<br /><br />
For width: Set width to the length of '''Str''' + 2 (adding 2 for surrounding brackets) or if the Button is bordered set width to the length of '''Str''' + 4 (adding 2 for surrounding brackets and 2 for the borders).<br />
For height: Set the height to 1 or if the Button is bordered, set the height to 3.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CButton();<br />
</syntaxhighlight></big><br />
Deallocates the allocated memory pointed by Field's '''_data'''.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the Button with border around it if it is Bordered. Note that there should be a space before and after of the text that will be used to surround the text with "[" and "]"<br /><br />
hint:<br /><br />
:*First calls Frame's draw(fn) (passing the fn argument to the parents draw)<br />
<br />
:Use console.display() to display the Button's text (pointed by Field's _data)<br />
:*If not bordered<br />
:*:display the text at absRow() and absCol()<br />
:*If bordered<br />
:*:display the text at absRow()+1 and absCol()+2<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
First draw() the Button, then surround it by squared brackets, place the cursor under the first character of Button's text and wait for user entry.<br /><br />
When user hits a key, if the key is ENTER_KEY or SPACE, return C_BUTTON_HIT (defined in cuigh.h) otherwise return the entered key.<br /><br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
First deallocated what is pointed by Field's _data.<br />
Then allocate new memory to the size of content of str and copy the content into it and make<br />
Field's _data point to it.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always returns true<br />
<br />
===CButton Student Resources===<br />
====CButton Help/Questions Blogs====<br />
[http://pankajsama01.blogspot.ca/2013/03/cbuttonhit-key.html C_BUTTON_HIT Key] is not defined(Pankaj Sama)<br />
** It is defined in the new cuigh.h file. It is defined #define C_BUTTON_HIT 1. Gary Chen<br />
<br />
====CButton Blog Posts====<br />
==CValEdit==<br />
This class works exactly like CLineEdit and improves it by adding two features; Validation and Help. CValEdit is capable of validating the user input on exit and also provide help when CValEdit::edit() is active by invoking a '''"help"''' method before and after editing. If these two functions, (Validation and Help) are not provided, then CValEdit literally works like CLineEdit.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clineedit.h"<br />
<br />
namespace cui{<br />
class CValEdit: public CLineEdit{<br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
public:<br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
int edit();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
</syntaxhighlight></big><br />
*_help, holds the address of the help logic (function) or NULL if there is no help function is assigned <br />
*_validate, holds the address of the validation logic (function) or NULL if there is no validation function is assgned<br />
<br />
===Constructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
These constructors pass all their arguments to corresponding arguments of CLineEdit constructor and then set '''_help''' and '''_validate''' attributes to the corresponding incoming arguments<br />
<br />
===Method===<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
If the container() is NULL then this function works exactly like LineEdit::edit().<br /><br />
If the container() is not NULL:<br />
#If _help function exist, it calls the function passing MessageStatus::SetMessage and container()'s reference as arguments.<br />
#Calls CLineEdit's edit()<br />
#If validation function exists, and the terminating key of CLineEdit's edit() is a navigation key(see below)<br />
#:It will call the validation function on the Field's _data, if the data is valid, it goes to next step, otherwise it will repeat calling CLineEdit's edit().<br />
#After validation is done, if _help function exists, it will recall the help function using MessageStatus::ClearMessage and contianer()'s reference as arguments.<br />
#It will return the terminating key<br />
<br />
''Navigation keys are Up key, Down key, Tab key or Enter key.''<br /><br />
''MessageStatus is enumerated in '''cuigh.h'''''<br />
===CValedit Student Resources===<br />
====CValEdit Help/Questions Blogs====<br />
====CValedit Blog Posts====<br />
<br />
==CCheckMark==<br />
Creates a single CheckMark on the screen and allows the user to:<br /><br />
# Toggle it, if it is set to be a CheckMark for a Check List.<br />
# Only check it when its unchecked, if it is set to be a CheckMark for a Radio Button List.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
#include "clabel.h"<br />
namespace cui{<br />
class CCheckMark : public CField{<br />
bool _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
public:<br />
CCheckMark(bool Checked,const char* Format, const char* Text,<br />
int Row, int Col, int Width, bool IsRadio = false);<br />
CCheckMark(const CCheckMark& C);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* flag);<br />
bool checked()const;<br />
void checked(bool val);<br />
bool radio(); <br />
void radio(bool isRadio);<br />
operator bool(); <br />
operator char*(); <br />
bool operator=(bool flag);<br />
};<br />
}<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
</syntaxhighlight></big><br />
*'''_flag''' holds the status of the Checkbox (0: unchecked or 1: checked ) and is pointed by _data pointer .<br />
*'''_radio''' dictates the behavior of the Checkbox as a radio-button, or a check-mark.<br />
*'''_format''' holds the characters, the Checkbox is drawn with (i.e. "[X]", "(O)", "<*>", etc...).<br />
*'''_Label''' holds the Label attached to the this Checkbox<br />
<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(bool Checked,const char* Format, const char* Text, int Row, int Col, int Width, bool IsRadio = false);<br />
</syntaxhighlight></big><br />
*Passes the ''Row, Col, Width and "1"'' to ''row, col, width and height'' arguments of CField and directly initializes _Label with ''Text, 0, 4, and (Width-4)'' for ''Str, Row, Col and Len'', arguments of CLabel's Constructor.<br /><br />
<br />
*Sets the frame of _Label to its owner (Checkmark i.e. 'this');<br />
*Sets _flag to Checked<br />
*Sets _radio to IsRadio<br />
*Copies Format to _format<br />
*Sets _data to the address of _flag<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(const CCheckMark& C);<br />
</syntaxhighlight></big><br />
*Passes incoming CCheckMark reference ("C") to CField's copy constructor, and directly initializes the _Label with the _Label of C<br />
*Sets all the attributes of this object to the attributes of incoming CCheckMark reference ("C")<br />
*Sets _data to the address of _flag<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
Using Console methods:<br /><br />
#displays the _format string at absRow() and absCol()<br />
#if _flag is false, it will overwrite the second character printed above, with a space (removes the check mark on console)<br />
#draw()s the _Label<br />
#sets the position of the cursor at the checkmark (second character of printed _format)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the checkmark<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##if _radio is true, it will set the _flag to true<br />
##if _radio is false, it will flip the value of _flag. <br />
##draw()s the checkmark again<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
*Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* flag);<br />
</syntaxhighlight></big><br />
*Casts the incoming flag pointer to an (bool*) and sets the content of '''_flag''' to where '''flag''' is pointing to.<br />
<big><syntaxhighlight lang="cpp"><br />
bool checked()const;<br />
void checked(bool val);<br />
</syntaxhighlight></big><br />
*These methods set and get _flag.<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio(); // addition for R0.6<br />
void radio(bool isRadio); // addition for R0.6<br />
</syntaxhighlight></big><br />
* These to methods, get and set the '''_radio''' attribute.<br />
<big><syntaxhighlight lang="cpp"><br />
operator bool(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''bool''' cast to return the value of '''_flag'''<br />
<big><syntaxhighlight lang="cpp"><br />
operator char*(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''char*''' cast to return the value of '''_Label.data()'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool operator=(bool flag);; // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the operator= and set the _flag to flag<br />
<br />
===CCheckMark Student Resources===<br />
====CCheckMark Help/Questions Blogs====<br />
<br />
<br />
Hey Guys, In the constructor for CCheckmark it says : set the frame of _Label to its owner<br />
(checkmark i.e, "this")<br />
Can anyone tell me what this means or what the purpose of this is. Thanks in advance.<br />
<br />
Use this with caution since I don't really know if it is correct, but I did<br />
'''Label.container(this->container());'''<br />
<br />
-Bo Li<br />
<br />
http://lhmcintosh.blogspot.ca/2013/03/this.html Hope this helps! - LMC<br />
<br />
Please help - http://oop344class.wordpress.com/2013/03/29/setting-cursor-position-in-ccheckmark-draw-function/<br />
<br />
-S.E.<br />
<br />
====CCheckMark Blog Posts====<br />
<br />
==CMenuItem==<br />
CMenuItem provides a Label that can be marked as selected by pressing the space bar.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clabel.h"<br />
#include "cfield.h"<br />
namespace cui{<br />
class CMenuItem:public CField{<br />
bool _selected;<br />
char _format[3];<br />
CLabel Label;<br />
public:<br />
CMenuItem(bool Selected,const char* Format, const char* Text,<br />
int Row, int Col, int Width);<br />
CMenuItem(const CMenuItem &CM);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* Selected);<br />
bool selected()const;<br />
void selected(bool val);<br />
const char* Text();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _selected;<br />
</syntaxhighlight></big><br />
Holds the status of the MenuItem, being selected or not;<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
Holds the surrounding characters with which a selected MenuItem is shown:<br /><br />
If _format holds "[]", then a selected MenuItem will be like [MenuText]<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel Label;<br />
</syntaxhighlight></big><br />
Hold the Text of the MenuItem.<br />
<br />
===Constructors / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(bool Selected,const char* Format, const char* Text, int Row, int Col, int Width);<br />
</syntaxhighlight></big><br />
#Initializes the CField with Row, Col, Width and 1 for Height<br />
#Initializes the Label with (Text, 0, 1 and Width-2) for (Str, Row, Col, and Len)<br />
#Sets the attributes to corresponding arguments<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object. <br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(const CMenuItem &CM);<br />
</syntaxhighlight></big><br />
#Passes CM to CField and Initializes the Label with CM<br />
#Sets the _selected to _selected of CM<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
#Draws the Label with fn <br />
#If _selected is true, it surrounds the Label Text the _format[0] and _format[1]<br />
#If _selected if false, it surrounds the Label with SPACEs (overwrites _format[0] and _format[1])<br />
#Positions the cursor at the first character of the Label<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the MenuItem<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##it will set the _selected to true<br />
##draw()s the MenuItem again<br />
#returns the key<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Returns true.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Selected);<br />
</syntaxhighlight></big><br />
Sets _selected to where Selected is pointing to<br />
<big><syntaxhighlight lang="cpp"><br />
bool selected()const;<br />
</syntaxhighlight></big><br />
Returns Selected<br />
<big><syntaxhighlight lang="cpp"><br />
void selected(bool val);<br />
</syntaxhighlight></big><br />
Sets _selected to val<br />
<big><syntaxhighlight lang="cpp"><br />
const char* Text();<br />
</syntaxhighlight></big><br />
Returns the text of Label<br />
<br />
===CMenuItem Student Resources===<br />
====CMenuItem Help/Questions Blogs====<br />
<br />
====CMenuItem Blog Posts====<br />
<br />
==CText==<br />
CText is a CField to edit a multiline text.<br /><br />
To do this, it will use the [[#The_Text_Helper_Class|Text class]] to convert a character string containing a text into a (simulated) two dimensional array. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#pragma once<br />
#include "cfield.h"<br />
#include "text.h"<br />
<br />
using namespace cui;<br />
<br />
<br />
class CText:public CField{<br />
Text _T;<br />
bool _displayOnly;<br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
int _lcurpos;<br />
int _loffset;<br />
public:<br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
void draw(int fn = C_FULL_FRAME);<br />
<br />
void set(const void *Str);<br />
void *data()const;<br />
<br />
int edit();<br />
bool editable()const;<br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
};<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
Text _T;<br />
</syntaxhighlight></big><br />
An instance of the [[#The_Text_Helper_Class|Text class]]<br />
<big><syntaxhighlight lang="cpp"><br />
bool _displayOnly;<br />
</syntaxhighlight></big><br />
If it is set to true, then the Text can only be viewed but not edited; All scrolling, page UP, DOWN, etc... is enabled but any attempt to change the text, is ignored quietly. This attribute is passed to ReadOnly argument of Console::edit(......). <br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
</syntaxhighlight></big><br />
Values used by Console::edit(......)<br />
<big><syntaxhighlight lang="cpp"><br />
int _lcurpos;<br />
int _loffset;<br />
</syntaxhighlight></big><br />
Vertical cursor position in text.<br />
Vertical offset of the text relative to the frame of CText. This value indicates, how many line are hidden above the frame when text is scrolled down.<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Initialized the CField with the corresponding incoming arguments and then sets all the attributes to their corresponding arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor but it also '''set()'''s the class to '''Str'''.<br />
<br />
===Methods=== <br />
'''Under Construction'''<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
First it will draw the CField using the fn arguement.<br /><br />
Then it will use console.display to display all the Lines of _T that are positioned inside the frame of the CText. (i.e. from _loffset to _loffset + Height() - 2).<br /><br />
Two Important things to note:<br />
# you should note that '''Lines''' are '''console.display()'''ed from _offset character. (i.e. &_T[theLineNumber][_offset]).<br />
# Also you should '''console.display()''' the Lines only if the length of the line is more than the _offset(i.e. _T[theLineNumver].strlen() > _offset)<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void *Str);<br />
</syntaxhighlight></big><br />
Sets the '''_T''' attribute to the incoming string.<br />
<big><syntaxhighlight lang="cpp"><br />
void *data()const;<br />
</syntaxhighlight></big><br />
Exports the string out of _T and returns its address after casting it to '''void*'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
# Create local variables to hold the following attributes in case ESCAPE is hit to undo:<br />
## _T<br />
## _curpos<br />
## _offset<br />
## _lcurpos<br />
## _loffset<br />
# Create the usual '''while(!done)''' structure for interfacing with user<br />
# '''draw()''' the text<br />
# '''console.edit()''' the Line at where vertical cursor is after _loffset.<br />
## use absRow() and _lcurpos to calculate the row on which the editing should happen<br />
## use absCol() to calculate the column on which editing to happen.<br />
## use width() to calculate the fieldLen for '''console.edit()'''<br />
## use the '''size()''' of the current '''Line''' in '''_T''' to determine the maximum data length of the string to '''console.edit()'''<br />
## the isTextEditor is always true<br />
## the ReadOnly depends on the value of '''_displayOnly'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
</syntaxhighlight></big><br />
These methods Get and Set the '''_displayOnly''' attribute.<br />
<br />
===The Text Helper Class===<br />
[https://github.com/Seneca-OOP344/20131-notes/tree/master/TextClass Text class]<br />
<br />
===CText Student Resources===<br />
====CText Help/Questions Blogs====<br />
====CText Blog Posts====<br />
<br />
==CCheckList==<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
#include "ccheckmark.h"<br />
namespace cui{<br />
<br />
class CCheckList : public CField{<br />
CCheckMark* _checkmarks[32];<br />
bool _radio;<br />
char _format[4];<br />
unsigned int _cnt;<br />
unsigned int _flags;<br />
unsigned int _cur;<br />
public:<br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
~CCheckList(void);<br />
CCheckList& add(const char* Text, bool selected = false);<br />
CCheckList& operator<<(const char* Text);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void* data();<br />
void set(const void* data);<br />
CCheckMark& operator[](unsigned int index);<br />
bool editable()const;<br />
bool radio()const;<br />
void radio(bool val);<br />
unsigned int flags()const;<br />
void flags(unsigned int theFlags);<br />
int selectedIndex()const;<br />
void selectedIndex(int index);<br />
unsigned int length();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark* _checkmarks[32];<br />
</syntaxhighlight></big><br />
An array of 32 CCheckmark pointers that will point to _cnt dynamically allocated CCheckMarks.<br />
<big><syntaxhighlight lang="cpp"><br />
bool _radio;<br />
</syntaxhighlight></big><br />
Holds the behaviour of the CCheckList to be like a Radio Button List or Check Mark List<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[4];<br />
</syntaxhighlight></big><br />
Holds the format with which a check mark is displayed (i.e. "[X]" or "(o)" etc...)<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
Holds the number of CCheckMarks currently in CCheckList<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _flags;<br />
</syntaxhighlight></big><br />
Always holds the bit pattern corresponding to the status of the CCheckMarks in the List. Note that bit 0 (right most) will correspond to the first CCheckMark.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cur;<br />
</syntaxhighlight></big><br />
Holds the index of the CCheckMark in the "_checkmarks" array which is currently being edited. (focused)<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes corresponding values to the Base class (CField) then <br />
#sets the _data attribute to the address of _flags<br />
#copies '''Format''' and '''radio''' into '''_format''' and '''_radio''' respectively <br />
#sets '''_cnt, _cur''' and '''_flags''' to zero<br />
<big><syntaxhighlight lang="cpp"><br />
~CCheckList(void);<br />
</syntaxhighlight></big><br />
Goes through '''_checkmarks''' up to '''_cnt''' and if deletes them one by one.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
* Only adds a new CCheckMark if '''_cnt''' does not exceed the maximum amount of '''_checkmarks''' (32)<br />
* Creates a new CCheckMark with the row being '''_cnt'''+1, the height being 1 and the length being the length of '''Text'''+4<br />
* Sets the newly created CCheckMarks' frame to '''this'''<br />
* Automatically expands the width of the CCheckList if the width of the newly created CCheckMark is bigger than the current width of the CCheckList<br />
* Sets the height of the CCheckList to '''_cnt'''+3<br />
* Updates the bit pattern of '''_flags'''<br />
* Increments '''_cnt'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text).<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the frame and then draws all the '''_checkmarks''', making sure the cursor is standing under the first checked checkmark.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
*Draws the '''CCheckList''' then starts editing the '''_checkmarks''' form '''_cur''' and according to the return key of CCheckMark::edit():<br />
**If Down or Right key is hit it goes to the next '''_checkmark''', if '''_cur''' is the last one, then it exits the edit, returning the last key entered.<br />
**UP and Left key works in opposite direction of Down and Right, if '''_cur''' is already zero, then it exits the edit, returning the last key entered.<br />
**If Space is hit, then if '''_radio''' is true, it will uncheck all the '''_checkmarks''' other than the '''_cur'''rent one.<br />
<big><syntaxhighlight lang="cpp"><br />
void* data();<br />
</syntaxhighlight></big><br />
returns the bit pattern held in _flags. <br /><br />
''make sure _flags are updated to the status of the '''_checkmarks'''''<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' and updates the '''_checkmarks''' to the bitpattern of '''_flags'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
returns the CCheckMark corresponding the '''index''' value.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always returns true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio()const;<br />
</syntaxhighlight></big><br />
returns '''_radio'''<br />
<big><syntaxhighlight lang="cpp"><br />
void radio(bool val);<br />
</syntaxhighlight></big><br />
sets the _radio and updates all _checkMarks radio value.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int flags()const;<br />
</syntaxhighlight></big><br />
returns the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
void flags(unsigned int theFlags);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
int selectedIndex()const;<br />
</syntaxhighlight></big><br />
returns the index of the first CCheckMark that is selected, and -1 if nothing is selected.<br />
<big><syntaxhighlight lang="cpp"><br />
void selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selectedindex. (only un-selects the rest if object is in radio mode)<br /><br />
if index is less than zero, then it will un-selects all<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int length();<br />
</syntaxhighlight></big><br />
returns '''_cnt'''<br />
<br />
===CCheckList Student Resources===<br />
====CCheckList Help/Questions Blogs====<br />
<br />
* If you copied the header (''cchecklist.h'') from the ''20132notes'' repository, make sure to remove the const keyword after the ''void* data()'' function, since it is not.<br />
* The same thing is for ''<u>void selectedIndex(int index)</u>'' and ''<u>int selectedIndex()const</u>'' — it is how they should look like.<br />
<br />
====CCheckList Blog Posts====<br />
<br />
==CMenu and MNode (optional)==<br />
CMenu is a linked list of MNodes. Providing menu selection for the user in two formats; Drop Down List, or a simple menu.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#ifndef __CUI__CMENU_H__<br />
#define __CUI__CMENU_H__<br />
#include "cuigh.h"<br />
#include "cfield.h"<br />
#include "cmenuitem.h"<br />
#include "cbutton.h"<br />
namespace cui{<br />
class Cmenu;<br />
<br />
class MNode{<br />
CMenuItem* _item;<br />
MNode* _next;<br />
MNode* _prev;<br />
unsigned int _index;<br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
~MNode(void);<br />
friend class CMenu;<br />
};<br />
<br />
class CMenu : public CField{<br />
MNode* _first;<br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
char _format[3];<br />
unsigned int _cnt;<br />
int _selectedIndex;<br />
bool _dropdown;<br />
bool _dropped;<br />
bool goNext();<br />
bool goPrev();<br />
CButton _Title;<br />
public:<br />
static const bool Select;<br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
CMenu& add(const char* Text, bool selected = false);<br />
CMenu& operator<<(const char* Text);<br />
CMenu& operator<<(bool select);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void set(const void* data);<br />
int selectedIndex() const;<br />
int selectedIndex(int index);<br />
const char* selectedText();<br />
bool editable()const;<br />
~CMenu(void);<br />
};<br />
extern const bool Select;<br />
}<br />
<br />
#endif<br />
</syntaxhighlight></big><br />
===MNode===<br />
MNode holds information about an Item in the menu:<br />
# The CMenuItem object<br />
# The index of this Item<br />
MNode is a fully private class and is only accessible by CMenu.<br />
====Attributes====<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem* _item;<br />
</syntaxhighlight></big><br />
Holds the address of a dynamically allocated CMenuItem<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _index;<br />
</syntaxhighlight></big><br />
Holds the index (sequence -1) number of the '''CMenuItem''' in the '''CMenu'''.<br />
<big><syntaxhighlight lang="cpp"><br />
MNode* _next;<br />
MNode* _prev;<br />
</syntaxhighlight></big><br />
Standard next and previous pointer for a linked list node.<br />
<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang="cpp"><br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
</syntaxhighlight></big><br />
Sets the corresponding attributes to the values of the arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
~MNode(void);<br />
</syntaxhighlight></big><br />
deletes the '''_item'''<br />
<br />
===CMenu===<br />
CMenu is a linked list of MNodes and also contains a CButton for a Title (only used on if in '''_dropdown''' mode). <br /><br />
Assuming that a CMenu is created with a title as "FILE" and menu-items as "Save, Load, Print, Quit":<br />
*When in '''_dropdown''' mode:<br />
When drawing, Only the _Title(CButton) is drawn (and not the menu itself)<br />
<big><pre><br />
FILE<br />
</pre></big><br />
When edited (in '''_dropdown''' mode) the CButton gets activated and if it is hit, then the Menu will be dropped down (drawn) under the CButton and user can browse through the options and select one of them. selecting the option in this case will close the menu and CButton gets activated again:<br /><br />
when active, CMenu looks like this:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits enter: (since nothing is selected all menu items are unselected)<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
| Print |<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
Now the cursor is standing under '''S'''ave.<br />
User hits down arrow twice to select '''P'''rint and then hits Space:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
The Print is selected and The menu is closed and FILE is active again.<br />
If the user hits Enter again:<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
We will see the Print is selected and the cursor in under P.<br />
If user hits Enter instead of space, the selection wont change and whatever was selected before will remain the same:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits navigation keys and moves out of the CMenu Field.<br />
''Note that if '''left''' or '''right''' navigation keys are hit when the title is active, then they are translated to '''up''' or '''down''' respectively.<br />
*When NOT in '''_dropdown''' mode:<br />
*:The CButton will not be displayed at all, and when user starts to edit, he enters the menu browsing the items and if he gets to the end of the menu, the control goes to the next field in the dialog. If user goes up and passes the first them, then the control will go to the previous field in the dalog.<br />
<big><pre><br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
''Note that if the number of menu items are more than the space provided by the CField's frame, then the menu items should scroll up and down to accommodate the selection'' <br />
====Attributes====<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _first;<br />
</syntaxhighlight></big><br />
points to the first CMenuItem visible on the menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
</syntaxhighlight></big><br />
standard Link list pointers<br />
<big><syntaxhighlight lang = "cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
The two characters used to surround the selected menu item<br />
<big><syntaxhighlight lang = "cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
The number of CMenuItems in CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
int _selectedIndex;<br />
</syntaxhighlight></big><br />
The index of the selected CMenuItem (saved in MNode::index), if there is no selected menu, then this value is -1.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropdown;<br />
</syntaxhighlight></big><br />
True if the Menu is a Drop Down Menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropped;<br />
</syntaxhighlight></big><br />
Flag used to hold the status of a Drop Down Menu, (_dropped or not)<br />
<big><syntaxhighlight lang = "cpp"><br />
bool goNext();<br />
bool goPrev();<br />
</syntaxhighlight></big><br />
standard gonext() and goprev() in linked lists<br />
<big><syntaxhighlight lang = "cpp"><br />
CButton _Title;<br />
</syntaxhighlight></big><br />
CButton holding the Title of this menu<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
#Initializes CField as follows:<br />
#* Row: Passes Row, if this menu is not a dropdown, otherwise it will pass Row+1.<br />
#* Col, Width, Height are passed directly<br />
#* Data: a void null pointer is passed for data<br />
#* Bordered: since CMenu is always bordered, true is passed here<br />
#* Border is directly passed.<br />
#Initializes _Title (the CButton) as follows:<br />
#* Str, Title is passed here<br />
#* Row, -1<br />
#* Col, 1<br />
#* Bordered, since the title of the dorpdown is alway NOT bordered, then false is passed here.<br />
#Constructor Settings:<br />
#* Link list attributes are set as standard linked list contructor<br />
#* Format is copied into _format<br />
#* _cnt is set to zero<br />
#* _selectedIndex is set to -1<br />
#* _data is set to address of _selectedIndex<br />
#* _dropdown is set to dropdown<br />
#* _dropped is set to false<br />
#* _Title's frame is set to the CMenu object (this)<br />
<big><syntaxhighlight lang = "cpp"><br />
~CMenu();<br />
</syntaxhighlight></big><br />
Standard Linked list destructor<br />
<br />
====Methods====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
Standard append for a linked list:<br />
#creates an MNode with<br />
#* a new CMenutItem with<br />
#*:selected, _format, Text for first three arguments<br />
#*:1, 1, and (width of the menu) -2, for Row col and width<br />
#* the rest are what is needed for a standard append procedure for a linked list<br />
#appends the new MNode to the end of the list<br />
#if the new added CMenuItem is selected, it will update the selected index<br />
'''''Note that if the added CMenuItem is the first CMenuItem in the list, then the _first pointer should be pointing to it'''''<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text)<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(bool select);<br />
</syntaxhighlight></big><br />
if select is true, it will select the last CMenuItem added to the CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
#if this is a '''_dropdown''', then it will draw the _Title<br />
#: and then if '''_dropped''' is true, it will draw the CField and then draw the CMenuItems starting form what _first is pointing to, up to (CField's hieght -2) times.<br />
#if this not a '''_dropdown''' then the _Title will never be drawn and the CMenuItems should be drawn as above.<br />
<big><syntaxhighlight lang = "cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Edits the menu the way it is explains in [[#CMenu|CMenu]] description.<br /><br />
If it is too confusing, this [[CMenu pseudo code - OOP344 20113|pseudo code]] may help.<br />
<big><syntaxhighlight lang = "cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
Sets the selected index to the integer pointed by data;<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex() const;<br />
</syntaxhighlight></big><br />
returns the selected index or -1 if nothing is selected<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selected index.<br />
<big><syntaxhighlight lang = "cpp"><br />
const char* selectedText();<br />
</syntaxhighlight></big><br />
returns the text of the selected menu. If nothing is selected, empty string is returned.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
returns true if '''_cnt''' is greater than zero<br />
<br />
===CMenu Student Resources===<br />
====CMenu Help/Questions Blogs====<br />
====CMenu Blog Posts====</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=The_CUI_Framework_-_OOP344_20132&diff=97324The CUI Framework - OOP344 201322013-07-19T20:59:31Z<p>Oleksandr Snurnikov: /* Methods */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
<br />
=Objective=<br />
Your objective at this stage is to create series of core classes designed to interact with the user. These '''Core Classes''' then can be used in development of any interactive application.<br />
<br />
Please note that the class definitions here are minimum requirement for the Core Classes and you are free to add any enhancements or features you find useful. However make sure that you discuss these enhancements with your team and professor to make sure they are feasible before implementation.<br />
<br />
It is highly recommended to develop the classes in the order they are stated here. You must create your own tester programs for each class (if possible); However, close to due date of each release, a tester program may be provided to help you verify the functionality of your classes. If tester programs are provided, then executables of the test programs will be available on matrix to show you how it is supposed to run.<br />
<br />
Also object your professor's implementation of all the classes are available in your class notes repository. Please note the following:<br />
* these implementations include a header file for each class and an object file for each class and platform<br />
* these are for you to test your own implementation in case you need to have access to another class and they are not developed yet.<br />
* like any other implementation, these implementations could be buggy <br />
<br />
=Tips=<br />
* [[GIT for OOP344 Projects| Guide for using Github]]<br />
Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything).<br />
Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines:<br />
* Add recompilation safeguards to all your header files.<br />
* Always use forward declaration if possible instead of including a class header-file.<br />
* Use includes only in files in which the actual header file code is used. <br />
* '''Avoid "just in case" includes.'''<br />
<br />
=CUI General Header file (cuigh.h)=<br />
The general header file holds the common setting and definition between all the Core Classes. Review this header file at each stage of the project for changes. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#ifndef ___CUIGH_H__<br />
#define ___CUIGH_H__<br />
namespace cui{ <br />
#ifndef _CRT_SECURE_NO_DEPRECATE<br />
#define _CRT_SECURE_NO_DEPRECATE<br />
#endif<br />
#ifndef _CRT_SECURE_NO_WARNINGS<br />
#define _CRT_SECURE_NO_WARNINGS<br />
#endif<br />
<br />
#define C_INITIAL_NO_FIELDS 50<br />
#define C_DIALOG_EXPANSION_SIZE 20<br />
#define C_BUTTON_HIT 1<br />
#define C_MAX_LINE_CHARS (1024u)<br />
<br />
#define C_REFRESH -2<br />
#define C_FULL_FRAME -1<br />
#define C_NO_FRAME 0<br />
<br />
#define C_BORDER_CHARS "/-\\|/-\\|"<br />
enum CDirection {centre, left, right, up, down};<br />
// added after 0.3:<br />
enum MessageStatus{ClearMessage,SetMessage};<br />
<br />
<br />
#ifdef NO_HELPFUNC<br />
# undef NO_HELPFUNC<br />
#endif<br />
#define NO_HELPFUNC ((void(*)(MessageStatus, CDialog&))(0))<br />
#ifdef NO_VALDFUNC<br />
# undef NO_VALDFUNC<br />
#endif<br />
#define NO_VALDFUNC ((bool(*)(const char*, CDialog&))(0))<br />
<br />
<br />
#define C_MAX_LINE_CHARS (1024u)<br />
#define C_INITIAL_NUM_OF_LINES (100u)<br />
}<br />
#endif<br />
<br />
</syntaxhighlight></big><br />
<br />
=File Names=<br />
Use the following rules to create filenames for your class.<br />
*Each class MUST have its own header file and cpp file for implementation<br />
*Use the class name for the name of the file but make sure it is all '''''lowercase'''''.<br />
*:For example '''CFrame''' class should have '''cframe.h''' and '''cframe.cpp''' files for its implementation.<br />
<br />
=Hierarchy=<br />
<big><pre><br />
CFrame<br />
|<br />
|---CDialog<br />
|<br />
|<br />
|---CField<br />
|<br />
|-------- CLabel<br />
|<br />
|<br />
|-------- CButton<br />
|<br />
|<br />
|-------- CLineEdit<br />
| |<br />
| |-------CValEdit<br />
|<br />
|-------- CText<br />
|<br />
|<br />
|-------- CCheckMark<br />
|<br />
|<br />
|-------- CCheckList <br />
|<br />
|<br />
|-------- CMenuItem <br />
|<br />
|<br />
|-------- CMenu <br />
</pre></big><br />
<br />
=Issues, Releases and Due Dates=<br />
*Issue Name Format<br />
*:Issue and branch name format: '''V.V_Name''' <br /><br />
*:example; issue: Add Text Class to the project (issue 2.9.1) issue and branch name on github: '''2.9.1_AddTextClass'''<br /><br />
: <br />
* A2 Milestone 0.2 - Due Friday July 12th<br />
*: Split up work within group and document it in the team pages<br />
*: Add skeletons for each class (empty function definitions in .cpp files)<br />
*:<br />
* A2 Milestone 0.4 - Due Friday July 19th<br />
*: Implement CLabel<br />
*: Implement CButton<br />
*: Implement CLineEdit<br />
*:<br />
* A2 Milestone 0.5 - Due Friday July 26th<br />
*: Implement CDialog<br />
*: Implement CValEdit<br />
*: Implement CMenuItem<br />
*:<br />
* A2 Milestone 0.7 - Due Friday August 3rd<br />
*: Implement CCheckMark<br />
*: Implement CText<br />
*: Implement CCheckList<br />
*:<br />
* A2 Milestone 0.9 - Due Friday August 9th<br />
*: Implement CMenu<br />
*: Merge all projects and verify CIO framework is fully functional and bugless<br />
*:<br />
* A2 Milestone 1.0 - Due Friday August 15th<br />
*: The Application<br />
*:<br />
Please note these are latest recommendations and you should intend to have these completed BEFORE the due dates. The final dead-line for this project is August 15h, no projects will be accepted past this point.<br />
<br />
=Classes=<br />
==CFrame==<br />
The code for this class is provided in your repository. You must understand and use it to develop your core classes in your repository.<br />
<br />
CFrame class is responsible to create a frame or structure in which all user interface classes contain themselves in. It can draw a border around it self or be border-less. <br />
CFrame also, before displaying itself on the screen, will save the area it is about to cover, so it can redisplay them to hide itself.<br />
<br />
CFrame is base of all objects in our user interface system. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#include "cuigh.h"<br />
<br />
class CFrame{<br />
int _row; // relative row of left top corner to the container frame or the screen if _frame is null<br />
int _col; // relative col of left top corner to the container frame or the screen if _frame is null<br />
int _height; <br />
int _width;<br />
char _border[9]; // border characters<br />
bool _visible; // is bordered or not<br />
CFrame* _frame; // pointer to the container of the frame (the frame, surrounding this frame)<br />
char* _covered; // pointer to the characters of the screen which are covered by this frame, when displayed<br />
void capture(); // captures and saves the characters in the area covered by this frame when displayed and sets <br />
// _covered to point to it<br />
void free(); // deletes dynamic memory in the _covered pointer<br />
protected:<br />
int absRow()const; <br />
int absCol()const; <br />
public:<br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
<br />
virtual void draw(int fn=C_FULL_FRAME);<br />
virtual void move(CDirection dir);<br />
virtual void move();<br />
virtual void hide();<br />
<br />
virtual ~CFrame();<br />
<br />
/* setters and getters: */<br />
<br />
bool fullscreen()const;<br />
<br />
void visible(bool val);<br />
bool visible()const;<br />
<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
<br />
void row(int val);<br />
int row()const;<br />
<br />
void col(int val);<br />
int col()const;<br />
<br />
void height(int val);<br />
int height()const;<br />
<br />
void width(int val);<br />
int width()const;<br />
<br />
void refresh();<br />
};<br />
</syntaxhighlight></big><br />
===Properties===<br />
int _row, holds the relative coordinate of top row of this border with respect to its container.<br /><br />
int _col, same as _row, but for _col. <br /><br />
int _height, height of the entity. <br /><br />
int _width, width of the entity. <br /><br />
char _border[9], characters used to draw the border: <br /><br />
: _border[0], left top<br />
: _border[1], top side<br />
: _border[2], right top<br />
: _border[3], right side<br />
: _border[4], right bottom<br />
: _border[5], bottom side<br />
: _border[6], bottom left<br />
: _border[7], left side<br />
bool _visible; Indicates if the border surrounding the entity is to be drawn or not. <br /><br />
CFrame* _frame; holds the container (another CFrame) which has opened this one (owner or container of the current CFrame). '''_frame''' will be NULL if this CFrame does not have a container, in which case, it will be full screen and no matter what the values of row, col, width and height are, CFrame will be '''Full Screen''' (no border will be drawn)<br /><br />
char* _covered; is a pointer to a character array that hold what was under this frame before being drawn. When the CFrame wants to hide itself, it simple copies the content of this array back on the screen on its own coordinates.<br />
<br />
===Methods and Constructors===<br />
====Private Methods====<br />
<big><syntaxhighlight lang="cpp"><br />
void capture(); <br />
</syntaxhighlight></big><br />
:if _covered pointer is not pointing to any allocated memory, it will call the iol_capture function to capture the area that is going to be covered by this frame and keeps its address in _covered.<br />
<br />
====Protected Methods====<br />
*int absRow()const; calculates the absolute row (relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''row()''' of this border plus all the '''row()'''s of the '''_frame'''s<br />
*int absCol()const; calculates the absolute column(relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''col()''' of this border plus all the '''col()'''s of the '''_frame'''s<br />
<br />
====Public Methods====<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
</syntaxhighlight></big> <br />
:Sets the corresponding attributes to the incoming values in the argument list and set _covered to null<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
* First it will '''capture()''' the coordinates it is supposed to cover<br />
* If frame is '''fullscreen()''' then it just clears the screen and exits. <br /><br />
<br />
Otherwise:<br /><br />
*If the _visible flag is true, it will draw a box at _row and _col, with size of _width and _height using the _border characters and fills it with spaces. Otherwise it will just draw a box using spaces at the same location and same size.<br />
<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void move(CDirection dir);<br />
</syntaxhighlight></big><br />
First it will hide the Frame, then adjust the row and col to move to the "dir" direction and then draws the Frame back on screen.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void hide();<br />
</syntaxhighlight></big><br />
using iol_restore()it restores the characters behind the Frame back on screen. It will also free the memory pointed by _covered; <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CFrame();<br />
</syntaxhighlight></big><br />
It will make sure allocated memories are freed.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool fullscreen()const;<br />
void visible(bool val);<br />
bool visible()const;<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
void row(int val);<br />
int row()const;<br />
void col(int val);<br />
int col()const;<br />
void height(int val);<br />
int height()const;<br />
void width(int val);<br />
int width()const;<br />
</syntaxhighlight></big><br />
<br />
These functions set and get the attributes of the CFrame.<br />
===CFrame Student Resources===<br />
====CFrame Help/Questions Blogs====<br />
====CFrame Blog Posts====<br />
<br />
==CField==<br />
<br />
CField is an abstract base class that encapsulates the commonalities of all Input Outputs Console Fields which are placeable on a CDialog. All Fields could be Framed, therefore a CField is inherited from CFrame.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cframe.h"<br />
class CDialog;<br />
class CField : public CFrame{<br />
protected:<br />
void* _data;<br />
public:<br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CField();<br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
<br />
<br />
virtual void set(const void* data) = 0;<br />
virtual void* data()const; //<== check this, not sure<br />
<br />
void container(CDialog* theContainer);<br />
CDialog* container();<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void* _data;<br />
</syntaxhighlight></big><br />
Will hold the address of any type of data a CField can hold.<br />
===Constructors and Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes the corresponding attributes to it's parents (CFrame) constructor and then sets the _data attribute to the incoming Data argument. Also using '''container(CDialog* theContainer)''' it set the container to NULL.<br />
<big><syntaxhighlight lang="cpp"><br />
~CField();<br />
</syntaxhighlight></big><br />
Empty Destructor<br />
<big><syntaxhighlight lang="cpp"><br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
virtual void set(const void* data) = 0;<br />
</syntaxhighlight></big><br />
Pure virtual methods to enforce the children to implement;<br />
* an edit() method<br />
* an editable() method that returns true if the class is to edit data and false if the class is to only display data.<br />
* a set() method to set the _data attribute to the data the class is to work with.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void* data() const; <--- Check this not sure....<br />
</syntaxhighlight></big><br />
Returns _data.<br />
<big><syntaxhighlight lang="cpp"><br />
void container(CDialog* theContainer);<br />
</syntaxhighlight></big><br />
Casts '''"theContainer"''' to a CFrame pointer and passes it to CFrame::frame(CFrame*) method; (to set the frame of CDialog)<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog* container();<br />
</syntaxhighlight></big><br />
Casts the return value of CFrame::frame() to a CDialog pointer and returns it.<br />
===CField Student Resources===<br />
====CField Help/Questions Blogs====<br />
====CField Blog Posts====<br />
<br />
==CLabel==<br />
A readonly Field that encapsulates console.display() function. (i.e it is responsible to display a short character string on the display) CLabel although, by inheritance is Frame, but it is never '''bordered'''.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
class CLabel : public CField{<br />
// for length of the field:<br />
// Use void CFrame::width(int) to store length, and int CFrame::width() to retrieve the length<br />
<br />
public:<br />
CLabel(const CLabel& L);<br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
CLabel(int Row, int Col, int Len);<br />
~CLabel();<br />
void draw(int fn=C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
No attributes, (use Cframe attributes)<br />
<br />
===Constructors / Destructor ===<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
</syntaxhighlight></big><br />
passes the Row and Col to the CField constructor and then;<br />
if len is zero, it will allocate enough memory to store the string pointed by Str and then copies the Str into it.<br />
if len > 0, then it will allocate enough memory to store '''len''' chars, copying only len characters of str.<br />
In any way, the allocated memory is pointed by '''_data'''. Also it will set the width to the length of the memory allocated.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(int Row, int Col, int Len);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor, but len in this case can not be zero. (no validation required) and the string pointed by _data will be set to an empty string.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const CLabel& L);<br />
</syntaxhighlight></big><br />
Copies a CLabel safely to guaranty there is no memory leak.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLabel();<br />
</syntaxhighlight></big><br />
makes sure that memory pointed by _data is deallocated before the object is destroyed.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
makes a direct call to console.strdsp(), passing '''_data''' for the string to be printed and absRow() and absCol() for row and col and width() for len.<br />
this function ignores the argument fn.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
calls draw, returning 0.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always return false.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
if width() is greater than zero, it will copy the string pointed by str into the string pointed by _data upto width characters.<br />
if width() is zero,<br /> It will delete the memory pointed by _data and reallocates enough memory for str and copies the string pointed by str into the newly allocated memory pointed by _data.<br />
<br />
===CLabel Student Resources===<br />
====CLabel Help/Questions Blogs====<br />
====CLabel Blog Posts====<br />
<br />
==CDialog==<br />
Organizes CField objects on the screen, displays them and then lets the user edit them one by one. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cuigh.h"<br />
#include "cframe.h"<br />
namespace cui{<br />
class CField;<br />
class CDialog: public CFrame{<br />
private:<br />
int _fnum;<br />
int _curidx;<br />
CField** _fld;<br />
bool* _dyn;<br />
bool _editable;<br />
unsigned int _fldSize;<br />
public:<br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CDialog();<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit(int fn = C_FULL_FRAME);<br />
<br />
int add(CField* field, bool dynamic = true);<br />
int add(CField& field, bool dynamic = false);<br />
CDialog& operator<<(CField* field);<br />
CDialog& operator<<(CField& field);<br />
<br />
bool editable();<br />
int fieldNum()const;<br />
int curIndex()const;<br />
<br />
CField& operator[](unsigned int index);<br />
CField& curField();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _fnum; <br />
</syntaxhighlight></big><br />
Holds the number of Fields added to the Dialog<br />
<big><syntaxhighlight lang="cpp"><br />
bool _editable;<br />
</syntaxhighlight></big><br />
will be set to true if any of the Fields added are editable. <br />
This is optional because it depends on how you are going to implement the collection of CFields:<br />
<big><syntaxhighlight lang="cpp"><br />
int _curidx;<br />
</syntaxhighlight></big><br />
Holds the index of the Field that is currently being edited.<br />
<big><syntaxhighlight lang="cpp"><br />
CField** _fld;<br />
</syntaxhighlight></big><br />
Dynamic array of CField pointers to hold the address of the CField objects added to the screen. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br />
<big><syntaxhighlight lang="cpp"><br />
bool* _dyn;<br />
</syntaxhighlight></big><br />
A dynamic bool array that holds series of booleans to the exact number of fields, and each boolean here will hold false if the corresponding field pointed by _fld is allocated dynamically or not. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br /> <br />
This array will later on be used by destructor to decide which object is dynamic and to be deleted.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _fldSize; <br />
</syntaxhighlight></big><br />
Holds the current length of '''''_fld''''' and '''''_dyn'''''. <br />When adding a field to dialog if '''_fnum''' reaches '''_fldSize''', then the size of '''_fld''' and '''_dyn''' is expanded by '''''C_DIALOG_EXPANSION_SIZE''''', defined in '''cuigh.h'''<br />
<br />
===Constructors/Destructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Borderd = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
The constructor passes all the incoming arguments to the corresponding arguments of the apparent constructor '''CFrame'''.<br /><br />
Then it will set all called attributes to their default values and then sets all the field pointers (_fld) to NULL.<br />
It also sets all the dynamic (_dyn) flags to false. <br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CDialog();<br />
</syntaxhighlight></big><br />
The destructor will loop through all the field pointers and if the corresponding dynamic flag is true then it will delete the field pointed to by the field pointer.<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''fn''' is '''C_FULL_FRAME''', it will call its parent draw. Then It will draw all the '''Fields''' in the '''Dialog'''. <br /><br />
If '''fn''' is Zero, then it will just draw all the '''Fields''' in the '''Dialog'''.<br /><br />
If '''fn''' is a non-zero positive value, then it will only draw '''Field''' number '''fn''' in the dialog. (First added '''Field''' is field number one.)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''CDialog''' is not editable (all fields are non-editable), it will just display the Dialog and then waits for the user to enter a key and then terminates the function returning the key.<br /><br />
If fn is '''0''' or less, then before editing, the draw method is called with '''fn''' as its argument and then editing begins from the first editable Field.<br />
<br />
If fn is greater than '''0''' then editing begins from the first editable key on or after Field number '''fn'''.<br />
<br />
Note that fn is the sequence number of field and not the index. (First field number is one)<br />
<br />
Start editing from field number '''fn''';<br />
<br />
Call the edit of each field and depending on the value returned, do the following:<br /><br />
# For '''ENTER_KEY''', '''TAB_KEY''' and '''DOWN_KEY''', go to next editable Field , if this is the last editable Field then restart from Field number one.<br />
# For '''UP_KEY''' go to the previous editable Field, if there is no previous editable Field, go to the last editable Field in the Dialog.<br />
# For any other key, terminate the edit function returning the character which caused the termination.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField* field, bool dynamic = true);<br />
</syntaxhighlight></big><br />
First, this function will check the value of _fnum. If '''_fnum''' has reached '''_fldSize''', ('''_fld''' and '''_dyn''' arrays are full) it will expand '''_fld''' and '''_dyn''' by '''C_DIALOG_EXPANSION_SIZE''' (defined in '''cuigh.h''') to make room for more '''CField'''.<br /><br />
Then, it adds the CField pointed by '''field''' to the Fields of the Dialog; by appending the value of the field pointer after the last added ''field'' in the _fld array , setting the corresponding _dyn element to the value of dynamic argument and then increasing _fnum by one and returning the index of added Field in the CDialog object.<br /><br />
'''important note:'''<br /><br />
Make sure that add() sets the container of the added CField to this CDialog object, using the container() method of CField<br /><br />
Also make sure, if size of _fld and _dyn are expanded, then _fldSize is also increased.<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField& field, bool dynamic = false);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method.<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField* field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField& field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the second add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable();<br />
</syntaxhighlight></big><br />
Returns '''_editable''';<br />
<big><syntaxhighlight lang="cpp"><br />
int fieldNum()const;<br />
</syntaxhighlight></big><br />
returns '''_fnum'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int curIndex()const;<br />
</syntaxhighlight></big><br />
returns '''_curidx''';<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CField& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
Returns the reference of the Field with incoming index. (Note that here, the first field index is '''0''')<br />
<big><syntaxhighlight lang="cpp"><br />
CField& curField();<br />
</syntaxhighlight></big><br />
Returns the reference of the Field that was just being edited.<br />
<br />
===CDialog Student Resources===<br />
====CDialog Help/Questions Blogs====<br />
<br />
====CDialog Blog Posts====<br />
<br />
==CLineEdit==<br />
'''ClineEdit''' encapsulates the console.edit() function of Console class.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
namespace cui{<br />
class CLineEdit: public CField{<br />
bool _dyn;<br />
int _maxdatalen;<br />
bool* _insertmode;<br />
int _curpos;<br />
int _offset;<br />
public:<br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CLineEdit();<br />
void draw(int Refresh = C_FULL_FRAME);<br />
<br />
int edit();<br />
bool editable()const;<br />
<br />
void set(const void* Str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _dyn;<br />
</syntaxhighlight></big><br />
_dyn is set to true if the object dynamically allocated memory and is responsible to free it at destruction time.<br />
<big><syntaxhighlight lang="cpp"><br />
int _maxdatalen;<br />
</syntaxhighlight></big><br />
no comment!<br />
<big><syntaxhighlight lang="cpp"><br />
bool* _insertmode;<br />
</syntaxhighlight></big><br />
points to the location of input method (insert or overstrike)<br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
</syntaxhighlight></big><br />
current position of cursor<br />
<big><syntaxhighlight lang="cpp"><br />
int _offset;<br />
</syntaxhighlight></big><br />
current offset<br />
<br />
===Constructors / Destructor=== <br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
<br />
LineEdit, sets the Field's _data to the value of str. If LineEdit is instantiated with this constructor then it will edit an external string provided by the caller function of LineEdit. LineEdit in this case is not creating any dynamic memory, therefore _dyn is set to false (therefore the destructor will not attempt to deallocate the memory pointed by _data).<br /><br />
The location (row and col) and Bordered are directly passed to the parent (CField) and str is passed as data to the parent constructor. Unlike Label, LineEdit could have border or not so depending on this (Bordered being true or false) the Height is set to 3 or 1 respectfully. <br /><br />
(hint: use '''? :''' operator to pass the proper Height value to CField's constructor)<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor with one difference; since no external data is passed to be edited here, this constructor must allocate enough dynamic memory to accommodate editing of '''Maxdatalen''' characters. Then make it an empty string and set Fields's _data to point to it. Make sure _dyn is set to true in this case, so the destructor knows that it has to deallocate the memory at the end.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLineEdit();<br />
</syntaxhighlight></big><br />
If '''_dyn''' is true, it will deallocate the character array pointed by Fields's '''_data'''<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int Refresh = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
It will first call Frame's draw passing '''Refresh''' as an argument to it.<br /><br />
Then it will make a direct call to console.display() to show the data kept in Field's '''_data'''.<br /><br />
The values used for the arguments of console.display() are:<br />
*str: address of string pointed by _data + the value of _offset<br />
*row: absRow() (''add one if border is visible'')<br />
*col: absCol() (''add one if border is visible'')<br />
*len: width() (''reduce by two if border is visible''')<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Makes a direct call to, and returns '''console.stredit()'''.<br />
For the coordinates and width arguments follow the same rules as the draw function.<br />
For the rest of the arguments of console.edit(), use the attributes of '''CLineEdit'''.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Str);<br />
</syntaxhighlight></big><br />
Copies the characters pointed by '''Str''' into the memory pointed by Field's '''_data''' up to '''_maxdatalen''' characters.<br />
<br />
===CLineEdit Student Resources===<br />
====CLineEdit Help/Questions Blogs====<br />
<br />
* [http://ksidhucode.blogspot.ca/2013/07/should-they-be-friends.html Kevin S - Need help with draw()]<br />
<br />
====CLineEdit Blog Posts====<br />
==CButton==<br />
Button is a child of CField.<br />
It displays a small piece of text (usually one word or two) and accepts one key hit entry.<br />
When in edit mode, to indicate the editing mode, it will surround the text with squared brackets.<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
namespace cui{<br />
class CButton: public CField{<br />
<br />
public:<br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CButton();<br />
void draw(int rn=C_FULL_FRAME);<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
This class does not have any attributes of its own!<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
When creating a Button, allocate enough memory to hold the contents of the '''Str''' and set Field's _data to point to it. Then copy the content of '''Str''' into the newly allocated memory.<br /><br />
Pass all the arguments directly to Field's constructor.<br /><br />
For Field size (width and hight) do the following:<br /><br />
For width: Set width to the length of '''Str''' + 2 (adding 2 for surrounding brackets) or if the Button is bordered set width to the length of '''Str''' + 4 (adding 2 for surrounding brackets and 2 for the borders).<br />
For height: Set the height to 1 or if the Button is bordered, set the height to 3.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CButton();<br />
</syntaxhighlight></big><br />
Deallocates the allocated memory pointed by Field's '''_data'''.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the Button with border around it if it is Bordered. Note that there should be a space before and after of the text that will be used to surround the text with "[" and "]"<br /><br />
hint:<br /><br />
:*First calls Frame's draw(fn) (passing the fn argument to the parents draw)<br />
<br />
:Use console.display() to display the Button's text (pointed by Field's _data)<br />
:*If not bordered<br />
:*:display the text at absRow() and absCol()<br />
:*If bordered<br />
:*:display the text at absRow()+1 and absCol()+2<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
First draw() the Button, then surround it by squared brackets, place the cursor under the first character of Button's text and wait for user entry.<br /><br />
When user hits a key, if the key is ENTER_KEY or SPACE, return C_BUTTON_HIT (defined in cuigh.h) otherwise return the entered key.<br /><br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
First deallocated what is pointed by Field's _data.<br />
Then allocate new memory to the size of content of str and copy the content into it and make<br />
Field's _data point to it.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always returns true<br />
<br />
===CButton Student Resources===<br />
====CButton Help/Questions Blogs====<br />
[http://pankajsama01.blogspot.ca/2013/03/cbuttonhit-key.html C_BUTTON_HIT Key] is not defined(Pankaj Sama)<br />
** It is defined in the new cuigh.h file. It is defined #define C_BUTTON_HIT 1. Gary Chen<br />
<br />
====CButton Blog Posts====<br />
==CValEdit==<br />
This class works exactly like CLineEdit and improves it by adding two features; Validation and Help. CValEdit is capable of validating the user input on exit and also provide help when CValEdit::edit() is active by invoking a '''"help"''' method before and after editing. If these two functions, (Validation and Help) are not provided, then CValEdit literally works like CLineEdit.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clineedit.h"<br />
<br />
namespace cui{<br />
class CValEdit: public CLineEdit{<br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
public:<br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
int edit();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
</syntaxhighlight></big><br />
*_help, holds the address of the help logic (function) or NULL if there is no help function is assigned <br />
*_validate, holds the address of the validation logic (function) or NULL if there is no validation function is assgned<br />
<br />
===Constructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
These constructors pass all their arguments to corresponding arguments of CLineEdit constructor and then set '''_help''' and '''_validate''' attributes to the corresponding incoming arguments<br />
<br />
===Method===<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
If the container() is NULL then this function works exactly like LineEdit::edit().<br /><br />
If the container() is not NULL:<br />
#If _help function exist, it calls the function passing MessageStatus::SetMessage and container()'s reference as arguments.<br />
#Calls CLineEdit's edit()<br />
#If validation function exists, and the terminating key of CLineEdit's edit() is a navigation key(see below)<br />
#:It will call the validation function on the Field's _data, if the data is valid, it goes to next step, otherwise it will repeat calling CLineEdit's edit().<br />
#After validation is done, if _help function exists, it will recall the help function using MessageStatus::ClearMessage and contianer()'s reference as arguments.<br />
#It will return the terminating key<br />
<br />
''Navigation keys are Up key, Down key, Tab key or Enter key.''<br /><br />
''MessageStatus is enumerated in '''cuigh.h'''''<br />
===CValedit Student Resources===<br />
====CValEdit Help/Questions Blogs====<br />
====CValedit Blog Posts====<br />
<br />
==CCheckMark==<br />
Creates a single CheckMark on the screen and allows the user to:<br /><br />
# Toggle it, if it is set to be a CheckMark for a Check List.<br />
# Only check it when its unchecked, if it is set to be a CheckMark for a Radio Button List.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
#include "clabel.h"<br />
namespace cui{<br />
class CCheckMark : public CField{<br />
bool _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
public:<br />
CCheckMark(bool Checked,const char* Format, const char* Text,<br />
int Row, int Col, int Width, bool IsRadio = false);<br />
CCheckMark(const CCheckMark& C);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* flag);<br />
bool checked()const;<br />
void checked(bool val);<br />
bool radio(); <br />
void radio(bool isRadio);<br />
operator bool(); <br />
operator char*(); <br />
bool operator=(bool flag);<br />
};<br />
}<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
</syntaxhighlight></big><br />
*'''_flag''' holds the status of the Checkbox (0: unchecked or 1: checked ) and is pointed by _data pointer .<br />
*'''_radio''' dictates the behavior of the Checkbox as a radio-button, or a check-mark.<br />
*'''_format''' holds the characters, the Checkbox is drawn with (i.e. "[X]", "(O)", "<*>", etc...).<br />
*'''_Label''' holds the Label attached to the this Checkbox<br />
<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(bool Checked,const char* Format, const char* Text, int Row, int Col, int Width, bool IsRadio = false);<br />
</syntaxhighlight></big><br />
*Passes the ''Row, Col, Width and "1"'' to ''row, col, width and height'' arguments of CField and directly initializes _Label with ''Text, 0, 4, and (Width-4)'' for ''Str, Row, Col and Len'', arguments of CLabel's Constructor.<br /><br />
<br />
*Sets the frame of _Label to its owner (Checkmark i.e. 'this');<br />
*Sets _flag to Checked<br />
*Sets _radio to IsRadio<br />
*Copies Format to _format<br />
*Sets _data to the address of _flag<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(const CCheckMark& C);<br />
</syntaxhighlight></big><br />
*Passes incoming CCheckMark reference ("C") to CField's copy constructor, and directly initializes the _Label with the _Label of C<br />
*Sets all the attributes of this object to the attributes of incoming CCheckMark reference ("C")<br />
*Sets _data to the address of _flag<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
Using Console methods:<br /><br />
#displays the _format string at absRow() and absCol()<br />
#if _flag is false, it will overwrite the second character printed above, with a space (removes the check mark on console)<br />
#draw()s the _Label<br />
#sets the position of the cursor at the checkmark (second character of printed _format)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the checkmark<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##if _radio is true, it will set the _flag to true<br />
##if _radio is false, it will flip the value of _flag. <br />
##draw()s the checkmark again<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
*Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* flag);<br />
</syntaxhighlight></big><br />
*Casts the incoming flag pointer to an (bool*) and sets the content of '''_flag''' to where '''flag''' is pointing to.<br />
<big><syntaxhighlight lang="cpp"><br />
bool checked()const;<br />
void checked(bool val);<br />
</syntaxhighlight></big><br />
*These methods set and get _flag.<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio(); // addition for R0.6<br />
void radio(bool isRadio); // addition for R0.6<br />
</syntaxhighlight></big><br />
* These to methods, get and set the '''_radio''' attribute.<br />
<big><syntaxhighlight lang="cpp"><br />
operator bool(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''bool''' cast to return the value of '''_flag'''<br />
<big><syntaxhighlight lang="cpp"><br />
operator char*(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''char*''' cast to return the value of '''_Label.data()'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool operator=(bool flag);; // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the operator= and set the _flag to flag<br />
<br />
===CCheckMark Student Resources===<br />
====CCheckMark Help/Questions Blogs====<br />
<br />
<br />
Hey Guys, In the constructor for CCheckmark it says : set the frame of _Label to its owner<br />
(checkmark i.e, "this")<br />
Can anyone tell me what this means or what the purpose of this is. Thanks in advance.<br />
<br />
Use this with caution since I don't really know if it is correct, but I did<br />
'''Label.container(this->container());'''<br />
<br />
-Bo Li<br />
<br />
http://lhmcintosh.blogspot.ca/2013/03/this.html Hope this helps! - LMC<br />
<br />
Please help - http://oop344class.wordpress.com/2013/03/29/setting-cursor-position-in-ccheckmark-draw-function/<br />
<br />
-S.E.<br />
<br />
====CCheckMark Blog Posts====<br />
<br />
==CMenuItem==<br />
CMenuItem provides a Label that can be marked as selected by pressing the space bar.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clabel.h"<br />
#include "cfield.h"<br />
namespace cui{<br />
class CMenuItem:public CField{<br />
bool _selected;<br />
char _format[3];<br />
CLabel Label;<br />
public:<br />
CMenuItem(bool Selected,const char* Format, const char* Text,<br />
int Row, int Col, int Width);<br />
CMenuItem(const CMenuItem &CM);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* Selected);<br />
bool selected()const;<br />
void selected(bool val);<br />
const char* Text();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _selected;<br />
</syntaxhighlight></big><br />
Holds the status of the MenuItem, being selected or not;<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
Holds the surrounding characters with which a selected MenuItem is shown:<br /><br />
If _format holds "[]", then a selected MenuItem will be like [MenuText]<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel Label;<br />
</syntaxhighlight></big><br />
Hold the Text of the MenuItem.<br />
<br />
===Constructors / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(bool Selected,const char* Format, const char* Text, int Row, int Col, int Width);<br />
</syntaxhighlight></big><br />
#Initializes the CField with Row, Col, Width and 1 for Height<br />
#Initializes the Label with (Text, 0, 1 and Width-2) for (Str, Row, Col, and Len)<br />
#Sets the attributes to corresponding arguments<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object. <br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(const CMenuItem &CM);<br />
</syntaxhighlight></big><br />
#Passes CM to CField and Initializes the Label with CM<br />
#Sets the _selected to _selected of CM<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
#Draws the Label with fn <br />
#If _selected is true, it surrounds the Label Text the _format[0] and _format[1]<br />
#If _selected if false, it surrounds the Label with SPACEs (overwrites _format[0] and _format[1])<br />
#Positions the cursor at the first character of the Label<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the MenuItem<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##it will set the _selected to true<br />
##draw()s the MenuItem again<br />
#returns the key<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Returns true.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Selected);<br />
</syntaxhighlight></big><br />
Sets _selected to where Selected is pointing to<br />
<big><syntaxhighlight lang="cpp"><br />
bool selected()const;<br />
</syntaxhighlight></big><br />
Returns Selected<br />
<big><syntaxhighlight lang="cpp"><br />
void selected(bool val);<br />
</syntaxhighlight></big><br />
Sets _selected to val<br />
<big><syntaxhighlight lang="cpp"><br />
const char* Text();<br />
</syntaxhighlight></big><br />
Returns the text of Label<br />
<br />
===CMenuItem Student Resources===<br />
====CMenuItem Help/Questions Blogs====<br />
<br />
====CMenuItem Blog Posts====<br />
<br />
==CText==<br />
CText is a CField to edit a multiline text.<br /><br />
To do this, it will use the [[#The_Text_Helper_Class|Text class]] to convert a character string containing a text into a (simulated) two dimensional array. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#pragma once<br />
#include "cfield.h"<br />
#include "text.h"<br />
<br />
using namespace cui;<br />
<br />
<br />
class CText:public CField{<br />
Text _T;<br />
bool _displayOnly;<br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
int _lcurpos;<br />
int _loffset;<br />
public:<br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
void draw(int fn = C_FULL_FRAME);<br />
<br />
void set(const void *Str);<br />
void *data()const;<br />
<br />
int edit();<br />
bool editable()const;<br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
};<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
Text _T;<br />
</syntaxhighlight></big><br />
An instance of the [[#The_Text_Helper_Class|Text class]]<br />
<big><syntaxhighlight lang="cpp"><br />
bool _displayOnly;<br />
</syntaxhighlight></big><br />
If it is set to true, then the Text can only be viewed but not edited; All scrolling, page UP, DOWN, etc... is enabled but any attempt to change the text, is ignored quietly. This attribute is passed to ReadOnly argument of Console::edit(......). <br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
</syntaxhighlight></big><br />
Values used by Console::edit(......)<br />
<big><syntaxhighlight lang="cpp"><br />
int _lcurpos;<br />
int _loffset;<br />
</syntaxhighlight></big><br />
Vertical cursor position in text.<br />
Vertical offset of the text relative to the frame of CText. This value indicates, how many line are hidden above the frame when text is scrolled down.<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Initialized the CField with the corresponding incoming arguments and then sets all the attributes to their corresponding arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor but it also '''set()'''s the class to '''Str'''.<br />
<br />
===Methods=== <br />
'''Under Construction'''<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
First it will draw the CField using the fn arguement.<br /><br />
Then it will use console.display to display all the Lines of _T that are positioned inside the frame of the CText. (i.e. from _loffset to _loffset + Height() - 2).<br /><br />
Two Important things to note:<br />
# you should note that '''Lines''' are '''console.display()'''ed from _offset character. (i.e. &_T[theLineNumber][_offset]).<br />
# Also you should '''console.display()''' the Lines only if the length of the line is more than the _offset(i.e. _T[theLineNumver].strlen() > _offset)<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void *Str);<br />
</syntaxhighlight></big><br />
Sets the '''_T''' attribute to the incoming string.<br />
<big><syntaxhighlight lang="cpp"><br />
void *data()const;<br />
</syntaxhighlight></big><br />
Exports the string out of _T and returns its address after casting it to '''void*'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
# Create local variables to hold the following attributes in case ESCAPE is hit to undo:<br />
## _T<br />
## _curpos<br />
## _offset<br />
## _lcurpos<br />
## _loffset<br />
# Create the usual '''while(!done)''' structure for interfacing with user<br />
# '''draw()''' the text<br />
# '''console.edit()''' the Line at where vertical cursor is after _loffset.<br />
## use absRow() and _lcurpos to calculate the row on which the editing should happen<br />
## use absCol() to calculate the column on which editing to happen.<br />
## use width() to calculate the fieldLen for '''console.edit()'''<br />
## use the '''size()''' of the current '''Line''' in '''_T''' to determine the maximum data length of the string to '''console.edit()'''<br />
## the isTextEditor is always true<br />
## the ReadOnly depends on the value of '''_displayOnly'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
</syntaxhighlight></big><br />
These methods Get and Set the '''_displayOnly''' attribute.<br />
<br />
===The Text Helper Class===<br />
[https://github.com/Seneca-OOP344/20131-notes/tree/master/TextClass Text class]<br />
<br />
===CText Student Resources===<br />
====CText Help/Questions Blogs====<br />
====CText Blog Posts====<br />
<br />
==CCheckList==<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
#include "ccheckmark.h"<br />
namespace cui{<br />
<br />
class CCheckList : public CField{<br />
CCheckMark* _checkmarks[32];<br />
bool _radio;<br />
char _format[4];<br />
unsigned int _cnt;<br />
unsigned int _flags;<br />
unsigned int _cur;<br />
public:<br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
~CCheckList(void);<br />
CCheckList& add(const char* Text, bool selected = false);<br />
CCheckList& operator<<(const char* Text);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void* data();<br />
void set(const void* data);<br />
CCheckMark& operator[](unsigned int index);<br />
bool editable()const;<br />
bool radio()const;<br />
void radio(bool val);<br />
unsigned int flags()const;<br />
void flags(unsigned int theFlags);<br />
int selectedIndex()const;<br />
void selectedIndex(int index);<br />
unsigned int length();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark* _checkmarks[32];<br />
</syntaxhighlight></big><br />
An array of 32 CCheckmark pointers that will point to _cnt dynamically allocated CCheckMarks.<br />
<big><syntaxhighlight lang="cpp"><br />
bool _radio;<br />
</syntaxhighlight></big><br />
Holds the behaviour of the CCheckList to be like a Radio Button List or Check Mark List<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[4];<br />
</syntaxhighlight></big><br />
Holds the format with which a check mark is displayed (i.e. "[X]" or "(o)" etc...)<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
Holds the number of CCheckMarks currently in CCheckList<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _flags;<br />
</syntaxhighlight></big><br />
Always holds the bit pattern corresponding to the status of the CCheckMarks in the List. Note that bit 0 (right most) will correspond to the first CCheckMark.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cur;<br />
</syntaxhighlight></big><br />
Holds the index of the CCheckMark in the "_checkmarks" array which is currently being edited. (focused)<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes corresponding values to the Base class (CField) then <br />
#sets the _data attribute to the address of _flags<br />
#copies '''Format''' and '''radio''' into '''_format''' and '''_radio''' respectively <br />
#sets '''_cnt, _cur''' and '''_flags''' to zero<br />
<big><syntaxhighlight lang="cpp"><br />
~CCheckList(void);<br />
</syntaxhighlight></big><br />
Goes through '''_checkmarks''' up to '''_cnt''' and if deletes them one by one.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
* Only adds a new CCheckMark if '''_cnt''' does not exceed the maximum amount of '''_checkmarks''' (32)<br />
* Creates a new CCheckMark with the row being '''_cnt'''+1, the height being 1 and the length being the length of '''Text'''+4<br />
* Sets the newly created CCheckMarks' frame to '''this'''<br />
* Automatically expands the width of the CCheckList if the width of the newly created CCheckMark is bigger than the current width of the CCheckList<br />
* Sets the height of the CCheckList to '''_cnt'''+3<br />
* Updates the bit pattern of '''_flags'''<br />
* Increments '''_cnt'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text).<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the frame and then draws all the '''_checkmarks''', making sure the cursor is standing under the first checked checkmark.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
*Draws the '''CCheckList''' then starts editing the '''_checkmarks''' form '''_cur''' and according to the return key of CCheckMark::edit():<br />
**If Down or Right key is hit it goes to the next '''_checkmark''', if '''_cur''' is the last one, then it exits the edit, returning the last key entered.<br />
**UP and Left key works in opposite direction of Down and Right, if '''_cur''' is already zero, then it exits the edit, returning the last key entered.<br />
**If Space is hit, then if '''_radio''' is true, it will uncheck all the '''_checkmarks''' other than the '''_cur'''rent one.<br />
<big><syntaxhighlight lang="cpp"><br />
void* data();<br />
</syntaxhighlight></big><br />
returns the bit pattern held in _flags. <br /><br />
''make sure _flags are updated to the status of the '''_checkmarks'''''<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' and updates the '''_checkmarks''' to the bitpattern of '''_flags'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
returns the CCheckMark corresponding the '''index''' value.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always returns true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio()const;<br />
</syntaxhighlight></big><br />
returns '''_radio'''<br />
<big><syntaxhighlight lang="cpp"><br />
void radio(bool val);<br />
</syntaxhighlight></big><br />
sets the _radio and updates all _checkMarks radio value.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int flags()const;<br />
</syntaxhighlight></big><br />
returns the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
void flags(unsigned int theFlags);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
int selectedIndex()const;<br />
</syntaxhighlight></big><br />
returns the index of the first CCheckMark that is selected, and -1 if nothing is selected.<br />
<big><syntaxhighlight lang="cpp"><br />
void selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selectedindex. (only un-selects the rest if object is in radio mode)<br /><br />
if index is less than zero, then it will un-selects all<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int length();<br />
</syntaxhighlight></big><br />
returns '''_cnt'''<br />
<br />
===CCheckList Student Resources===<br />
====CCheckList Help/Questions Blogs====<br />
<br />
If you copied the header (''cchecklist.h'') from the ''20132notes'' repository, make sure to remove the const keyword after the ''void* data()'' function, since it is not.<br />
<br />
====CCheckList Blog Posts====<br />
<br />
==CMenu and MNode (optional)==<br />
CMenu is a linked list of MNodes. Providing menu selection for the user in two formats; Drop Down List, or a simple menu.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#ifndef __CUI__CMENU_H__<br />
#define __CUI__CMENU_H__<br />
#include "cuigh.h"<br />
#include "cfield.h"<br />
#include "cmenuitem.h"<br />
#include "cbutton.h"<br />
namespace cui{<br />
class Cmenu;<br />
<br />
class MNode{<br />
CMenuItem* _item;<br />
MNode* _next;<br />
MNode* _prev;<br />
unsigned int _index;<br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
~MNode(void);<br />
friend class CMenu;<br />
};<br />
<br />
class CMenu : public CField{<br />
MNode* _first;<br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
char _format[3];<br />
unsigned int _cnt;<br />
int _selectedIndex;<br />
bool _dropdown;<br />
bool _dropped;<br />
bool goNext();<br />
bool goPrev();<br />
CButton _Title;<br />
public:<br />
static const bool Select;<br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
CMenu& add(const char* Text, bool selected = false);<br />
CMenu& operator<<(const char* Text);<br />
CMenu& operator<<(bool select);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void set(const void* data);<br />
int selectedIndex() const;<br />
int selectedIndex(int index);<br />
const char* selectedText();<br />
bool editable()const;<br />
~CMenu(void);<br />
};<br />
extern const bool Select;<br />
}<br />
<br />
#endif<br />
</syntaxhighlight></big><br />
===MNode===<br />
MNode holds information about an Item in the menu:<br />
# The CMenuItem object<br />
# The index of this Item<br />
MNode is a fully private class and is only accessible by CMenu.<br />
====Attributes====<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem* _item;<br />
</syntaxhighlight></big><br />
Holds the address of a dynamically allocated CMenuItem<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _index;<br />
</syntaxhighlight></big><br />
Holds the index (sequence -1) number of the '''CMenuItem''' in the '''CMenu'''.<br />
<big><syntaxhighlight lang="cpp"><br />
MNode* _next;<br />
MNode* _prev;<br />
</syntaxhighlight></big><br />
Standard next and previous pointer for a linked list node.<br />
<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang="cpp"><br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
</syntaxhighlight></big><br />
Sets the corresponding attributes to the values of the arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
~MNode(void);<br />
</syntaxhighlight></big><br />
deletes the '''_item'''<br />
<br />
===CMenu===<br />
CMenu is a linked list of MNodes and also contains a CButton for a Title (only used on if in '''_dropdown''' mode). <br /><br />
Assuming that a CMenu is created with a title as "FILE" and menu-items as "Save, Load, Print, Quit":<br />
*When in '''_dropdown''' mode:<br />
When drawing, Only the _Title(CButton) is drawn (and not the menu itself)<br />
<big><pre><br />
FILE<br />
</pre></big><br />
When edited (in '''_dropdown''' mode) the CButton gets activated and if it is hit, then the Menu will be dropped down (drawn) under the CButton and user can browse through the options and select one of them. selecting the option in this case will close the menu and CButton gets activated again:<br /><br />
when active, CMenu looks like this:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits enter: (since nothing is selected all menu items are unselected)<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
| Print |<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
Now the cursor is standing under '''S'''ave.<br />
User hits down arrow twice to select '''P'''rint and then hits Space:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
The Print is selected and The menu is closed and FILE is active again.<br />
If the user hits Enter again:<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
We will see the Print is selected and the cursor in under P.<br />
If user hits Enter instead of space, the selection wont change and whatever was selected before will remain the same:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits navigation keys and moves out of the CMenu Field.<br />
''Note that if '''left''' or '''right''' navigation keys are hit when the title is active, then they are translated to '''up''' or '''down''' respectively.<br />
*When NOT in '''_dropdown''' mode:<br />
*:The CButton will not be displayed at all, and when user starts to edit, he enters the menu browsing the items and if he gets to the end of the menu, the control goes to the next field in the dialog. If user goes up and passes the first them, then the control will go to the previous field in the dalog.<br />
<big><pre><br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
''Note that if the number of menu items are more than the space provided by the CField's frame, then the menu items should scroll up and down to accommodate the selection'' <br />
====Attributes====<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _first;<br />
</syntaxhighlight></big><br />
points to the first CMenuItem visible on the menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
</syntaxhighlight></big><br />
standard Link list pointers<br />
<big><syntaxhighlight lang = "cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
The two characters used to surround the selected menu item<br />
<big><syntaxhighlight lang = "cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
The number of CMenuItems in CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
int _selectedIndex;<br />
</syntaxhighlight></big><br />
The index of the selected CMenuItem (saved in MNode::index), if there is no selected menu, then this value is -1.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropdown;<br />
</syntaxhighlight></big><br />
True if the Menu is a Drop Down Menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropped;<br />
</syntaxhighlight></big><br />
Flag used to hold the status of a Drop Down Menu, (_dropped or not)<br />
<big><syntaxhighlight lang = "cpp"><br />
bool goNext();<br />
bool goPrev();<br />
</syntaxhighlight></big><br />
standard gonext() and goprev() in linked lists<br />
<big><syntaxhighlight lang = "cpp"><br />
CButton _Title;<br />
</syntaxhighlight></big><br />
CButton holding the Title of this menu<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
#Initializes CField as follows:<br />
#* Row: Passes Row, if this menu is not a dropdown, otherwise it will pass Row+1.<br />
#* Col, Width, Height are passed directly<br />
#* Data: a void null pointer is passed for data<br />
#* Bordered: since CMenu is always bordered, true is passed here<br />
#* Border is directly passed.<br />
#Initializes _Title (the CButton) as follows:<br />
#* Str, Title is passed here<br />
#* Row, -1<br />
#* Col, 1<br />
#* Bordered, since the title of the dorpdown is alway NOT bordered, then false is passed here.<br />
#Constructor Settings:<br />
#* Link list attributes are set as standard linked list contructor<br />
#* Format is copied into _format<br />
#* _cnt is set to zero<br />
#* _selectedIndex is set to -1<br />
#* _data is set to address of _selectedIndex<br />
#* _dropdown is set to dropdown<br />
#* _dropped is set to false<br />
#* _Title's frame is set to the CMenu object (this)<br />
<big><syntaxhighlight lang = "cpp"><br />
~CMenu();<br />
</syntaxhighlight></big><br />
Standard Linked list destructor<br />
<br />
====Methods====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
Standard append for a linked list:<br />
#creates an MNode with<br />
#* a new CMenutItem with<br />
#*:selected, _format, Text for first three arguments<br />
#*:1, 1, and (width of the menu) -2, for Row col and width<br />
#* the rest are what is needed for a standard append procedure for a linked list<br />
#appends the new MNode to the end of the list<br />
#if the new added CMenuItem is selected, it will update the selected index<br />
'''''Note that if the added CMenuItem is the first CMenuItem in the list, then the _first pointer should be pointing to it'''''<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text)<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(bool select);<br />
</syntaxhighlight></big><br />
if select is true, it will select the last CMenuItem added to the CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
#if this is a '''_dropdown''', then it will draw the _Title<br />
#: and then if '''_dropped''' is true, it will draw the CField and then draw the CMenuItems starting form what _first is pointing to, up to (CField's hieght -2) times.<br />
#if this not a '''_dropdown''' then the _Title will never be drawn and the CMenuItems should be drawn as above.<br />
<big><syntaxhighlight lang = "cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Edits the menu the way it is explains in [[#CMenu|CMenu]] description.<br /><br />
If it is too confusing, this [[CMenu pseudo code - OOP344 20113|pseudo code]] may help.<br />
<big><syntaxhighlight lang = "cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
Sets the selected index to the integer pointed by data;<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex() const;<br />
</syntaxhighlight></big><br />
returns the selected index or -1 if nothing is selected<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selected index.<br />
<big><syntaxhighlight lang = "cpp"><br />
const char* selectedText();<br />
</syntaxhighlight></big><br />
returns the text of the selected menu. If nothing is selected, empty string is returned.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
returns true if '''_cnt''' is greater than zero<br />
<br />
===CMenu Student Resources===<br />
====CMenu Help/Questions Blogs====<br />
====CMenu Blog Posts====</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=The_CUI_Framework_-_OOP344_20132&diff=97323The CUI Framework - OOP344 201322013-07-19T20:58:09Z<p>Oleksandr Snurnikov: /* Methods */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
<br />
=Objective=<br />
Your objective at this stage is to create series of core classes designed to interact with the user. These '''Core Classes''' then can be used in development of any interactive application.<br />
<br />
Please note that the class definitions here are minimum requirement for the Core Classes and you are free to add any enhancements or features you find useful. However make sure that you discuss these enhancements with your team and professor to make sure they are feasible before implementation.<br />
<br />
It is highly recommended to develop the classes in the order they are stated here. You must create your own tester programs for each class (if possible); However, close to due date of each release, a tester program may be provided to help you verify the functionality of your classes. If tester programs are provided, then executables of the test programs will be available on matrix to show you how it is supposed to run.<br />
<br />
Also object your professor's implementation of all the classes are available in your class notes repository. Please note the following:<br />
* these implementations include a header file for each class and an object file for each class and platform<br />
* these are for you to test your own implementation in case you need to have access to another class and they are not developed yet.<br />
* like any other implementation, these implementations could be buggy <br />
<br />
=Tips=<br />
* [[GIT for OOP344 Projects| Guide for using Github]]<br />
Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything).<br />
Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines:<br />
* Add recompilation safeguards to all your header files.<br />
* Always use forward declaration if possible instead of including a class header-file.<br />
* Use includes only in files in which the actual header file code is used. <br />
* '''Avoid "just in case" includes.'''<br />
<br />
=CUI General Header file (cuigh.h)=<br />
The general header file holds the common setting and definition between all the Core Classes. Review this header file at each stage of the project for changes. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#ifndef ___CUIGH_H__<br />
#define ___CUIGH_H__<br />
namespace cui{ <br />
#ifndef _CRT_SECURE_NO_DEPRECATE<br />
#define _CRT_SECURE_NO_DEPRECATE<br />
#endif<br />
#ifndef _CRT_SECURE_NO_WARNINGS<br />
#define _CRT_SECURE_NO_WARNINGS<br />
#endif<br />
<br />
#define C_INITIAL_NO_FIELDS 50<br />
#define C_DIALOG_EXPANSION_SIZE 20<br />
#define C_BUTTON_HIT 1<br />
#define C_MAX_LINE_CHARS (1024u)<br />
<br />
#define C_REFRESH -2<br />
#define C_FULL_FRAME -1<br />
#define C_NO_FRAME 0<br />
<br />
#define C_BORDER_CHARS "/-\\|/-\\|"<br />
enum CDirection {centre, left, right, up, down};<br />
// added after 0.3:<br />
enum MessageStatus{ClearMessage,SetMessage};<br />
<br />
<br />
#ifdef NO_HELPFUNC<br />
# undef NO_HELPFUNC<br />
#endif<br />
#define NO_HELPFUNC ((void(*)(MessageStatus, CDialog&))(0))<br />
#ifdef NO_VALDFUNC<br />
# undef NO_VALDFUNC<br />
#endif<br />
#define NO_VALDFUNC ((bool(*)(const char*, CDialog&))(0))<br />
<br />
<br />
#define C_MAX_LINE_CHARS (1024u)<br />
#define C_INITIAL_NUM_OF_LINES (100u)<br />
}<br />
#endif<br />
<br />
</syntaxhighlight></big><br />
<br />
=File Names=<br />
Use the following rules to create filenames for your class.<br />
*Each class MUST have its own header file and cpp file for implementation<br />
*Use the class name for the name of the file but make sure it is all '''''lowercase'''''.<br />
*:For example '''CFrame''' class should have '''cframe.h''' and '''cframe.cpp''' files for its implementation.<br />
<br />
=Hierarchy=<br />
<big><pre><br />
CFrame<br />
|<br />
|---CDialog<br />
|<br />
|<br />
|---CField<br />
|<br />
|-------- CLabel<br />
|<br />
|<br />
|-------- CButton<br />
|<br />
|<br />
|-------- CLineEdit<br />
| |<br />
| |-------CValEdit<br />
|<br />
|-------- CText<br />
|<br />
|<br />
|-------- CCheckMark<br />
|<br />
|<br />
|-------- CCheckList <br />
|<br />
|<br />
|-------- CMenuItem <br />
|<br />
|<br />
|-------- CMenu <br />
</pre></big><br />
<br />
=Issues, Releases and Due Dates=<br />
*Issue Name Format<br />
*:Issue and branch name format: '''V.V_Name''' <br /><br />
*:example; issue: Add Text Class to the project (issue 2.9.1) issue and branch name on github: '''2.9.1_AddTextClass'''<br /><br />
: <br />
* A2 Milestone 0.2 - Due Friday July 12th<br />
*: Split up work within group and document it in the team pages<br />
*: Add skeletons for each class (empty function definitions in .cpp files)<br />
*:<br />
* A2 Milestone 0.4 - Due Friday July 19th<br />
*: Implement CLabel<br />
*: Implement CButton<br />
*: Implement CLineEdit<br />
*:<br />
* A2 Milestone 0.5 - Due Friday July 26th<br />
*: Implement CDialog<br />
*: Implement CValEdit<br />
*: Implement CMenuItem<br />
*:<br />
* A2 Milestone 0.7 - Due Friday August 3rd<br />
*: Implement CCheckMark<br />
*: Implement CText<br />
*: Implement CCheckList<br />
*:<br />
* A2 Milestone 0.9 - Due Friday August 9th<br />
*: Implement CMenu<br />
*: Merge all projects and verify CIO framework is fully functional and bugless<br />
*:<br />
* A2 Milestone 1.0 - Due Friday August 15th<br />
*: The Application<br />
*:<br />
Please note these are latest recommendations and you should intend to have these completed BEFORE the due dates. The final dead-line for this project is August 15h, no projects will be accepted past this point.<br />
<br />
=Classes=<br />
==CFrame==<br />
The code for this class is provided in your repository. You must understand and use it to develop your core classes in your repository.<br />
<br />
CFrame class is responsible to create a frame or structure in which all user interface classes contain themselves in. It can draw a border around it self or be border-less. <br />
CFrame also, before displaying itself on the screen, will save the area it is about to cover, so it can redisplay them to hide itself.<br />
<br />
CFrame is base of all objects in our user interface system. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#include "cuigh.h"<br />
<br />
class CFrame{<br />
int _row; // relative row of left top corner to the container frame or the screen if _frame is null<br />
int _col; // relative col of left top corner to the container frame or the screen if _frame is null<br />
int _height; <br />
int _width;<br />
char _border[9]; // border characters<br />
bool _visible; // is bordered or not<br />
CFrame* _frame; // pointer to the container of the frame (the frame, surrounding this frame)<br />
char* _covered; // pointer to the characters of the screen which are covered by this frame, when displayed<br />
void capture(); // captures and saves the characters in the area covered by this frame when displayed and sets <br />
// _covered to point to it<br />
void free(); // deletes dynamic memory in the _covered pointer<br />
protected:<br />
int absRow()const; <br />
int absCol()const; <br />
public:<br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
<br />
virtual void draw(int fn=C_FULL_FRAME);<br />
virtual void move(CDirection dir);<br />
virtual void move();<br />
virtual void hide();<br />
<br />
virtual ~CFrame();<br />
<br />
/* setters and getters: */<br />
<br />
bool fullscreen()const;<br />
<br />
void visible(bool val);<br />
bool visible()const;<br />
<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
<br />
void row(int val);<br />
int row()const;<br />
<br />
void col(int val);<br />
int col()const;<br />
<br />
void height(int val);<br />
int height()const;<br />
<br />
void width(int val);<br />
int width()const;<br />
<br />
void refresh();<br />
};<br />
</syntaxhighlight></big><br />
===Properties===<br />
int _row, holds the relative coordinate of top row of this border with respect to its container.<br /><br />
int _col, same as _row, but for _col. <br /><br />
int _height, height of the entity. <br /><br />
int _width, width of the entity. <br /><br />
char _border[9], characters used to draw the border: <br /><br />
: _border[0], left top<br />
: _border[1], top side<br />
: _border[2], right top<br />
: _border[3], right side<br />
: _border[4], right bottom<br />
: _border[5], bottom side<br />
: _border[6], bottom left<br />
: _border[7], left side<br />
bool _visible; Indicates if the border surrounding the entity is to be drawn or not. <br /><br />
CFrame* _frame; holds the container (another CFrame) which has opened this one (owner or container of the current CFrame). '''_frame''' will be NULL if this CFrame does not have a container, in which case, it will be full screen and no matter what the values of row, col, width and height are, CFrame will be '''Full Screen''' (no border will be drawn)<br /><br />
char* _covered; is a pointer to a character array that hold what was under this frame before being drawn. When the CFrame wants to hide itself, it simple copies the content of this array back on the screen on its own coordinates.<br />
<br />
===Methods and Constructors===<br />
====Private Methods====<br />
<big><syntaxhighlight lang="cpp"><br />
void capture(); <br />
</syntaxhighlight></big><br />
:if _covered pointer is not pointing to any allocated memory, it will call the iol_capture function to capture the area that is going to be covered by this frame and keeps its address in _covered.<br />
<br />
====Protected Methods====<br />
*int absRow()const; calculates the absolute row (relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''row()''' of this border plus all the '''row()'''s of the '''_frame'''s<br />
*int absCol()const; calculates the absolute column(relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''col()''' of this border plus all the '''col()'''s of the '''_frame'''s<br />
<br />
====Public Methods====<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
</syntaxhighlight></big> <br />
:Sets the corresponding attributes to the incoming values in the argument list and set _covered to null<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
* First it will '''capture()''' the coordinates it is supposed to cover<br />
* If frame is '''fullscreen()''' then it just clears the screen and exits. <br /><br />
<br />
Otherwise:<br /><br />
*If the _visible flag is true, it will draw a box at _row and _col, with size of _width and _height using the _border characters and fills it with spaces. Otherwise it will just draw a box using spaces at the same location and same size.<br />
<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void move(CDirection dir);<br />
</syntaxhighlight></big><br />
First it will hide the Frame, then adjust the row and col to move to the "dir" direction and then draws the Frame back on screen.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void hide();<br />
</syntaxhighlight></big><br />
using iol_restore()it restores the characters behind the Frame back on screen. It will also free the memory pointed by _covered; <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CFrame();<br />
</syntaxhighlight></big><br />
It will make sure allocated memories are freed.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool fullscreen()const;<br />
void visible(bool val);<br />
bool visible()const;<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
void row(int val);<br />
int row()const;<br />
void col(int val);<br />
int col()const;<br />
void height(int val);<br />
int height()const;<br />
void width(int val);<br />
int width()const;<br />
</syntaxhighlight></big><br />
<br />
These functions set and get the attributes of the CFrame.<br />
===CFrame Student Resources===<br />
====CFrame Help/Questions Blogs====<br />
====CFrame Blog Posts====<br />
<br />
==CField==<br />
<br />
CField is an abstract base class that encapsulates the commonalities of all Input Outputs Console Fields which are placeable on a CDialog. All Fields could be Framed, therefore a CField is inherited from CFrame.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cframe.h"<br />
class CDialog;<br />
class CField : public CFrame{<br />
protected:<br />
void* _data;<br />
public:<br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CField();<br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
<br />
<br />
virtual void set(const void* data) = 0;<br />
virtual void* data()const; //<== check this, not sure<br />
<br />
void container(CDialog* theContainer);<br />
CDialog* container();<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void* _data;<br />
</syntaxhighlight></big><br />
Will hold the address of any type of data a CField can hold.<br />
===Constructors and Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes the corresponding attributes to it's parents (CFrame) constructor and then sets the _data attribute to the incoming Data argument. Also using '''container(CDialog* theContainer)''' it set the container to NULL.<br />
<big><syntaxhighlight lang="cpp"><br />
~CField();<br />
</syntaxhighlight></big><br />
Empty Destructor<br />
<big><syntaxhighlight lang="cpp"><br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
virtual void set(const void* data) = 0;<br />
</syntaxhighlight></big><br />
Pure virtual methods to enforce the children to implement;<br />
* an edit() method<br />
* an editable() method that returns true if the class is to edit data and false if the class is to only display data.<br />
* a set() method to set the _data attribute to the data the class is to work with.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void* data() const; <--- Check this not sure....<br />
</syntaxhighlight></big><br />
Returns _data.<br />
<big><syntaxhighlight lang="cpp"><br />
void container(CDialog* theContainer);<br />
</syntaxhighlight></big><br />
Casts '''"theContainer"''' to a CFrame pointer and passes it to CFrame::frame(CFrame*) method; (to set the frame of CDialog)<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog* container();<br />
</syntaxhighlight></big><br />
Casts the return value of CFrame::frame() to a CDialog pointer and returns it.<br />
===CField Student Resources===<br />
====CField Help/Questions Blogs====<br />
====CField Blog Posts====<br />
<br />
==CLabel==<br />
A readonly Field that encapsulates console.display() function. (i.e it is responsible to display a short character string on the display) CLabel although, by inheritance is Frame, but it is never '''bordered'''.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
class CLabel : public CField{<br />
// for length of the field:<br />
// Use void CFrame::width(int) to store length, and int CFrame::width() to retrieve the length<br />
<br />
public:<br />
CLabel(const CLabel& L);<br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
CLabel(int Row, int Col, int Len);<br />
~CLabel();<br />
void draw(int fn=C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
No attributes, (use Cframe attributes)<br />
<br />
===Constructors / Destructor ===<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
</syntaxhighlight></big><br />
passes the Row and Col to the CField constructor and then;<br />
if len is zero, it will allocate enough memory to store the string pointed by Str and then copies the Str into it.<br />
if len > 0, then it will allocate enough memory to store '''len''' chars, copying only len characters of str.<br />
In any way, the allocated memory is pointed by '''_data'''. Also it will set the width to the length of the memory allocated.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(int Row, int Col, int Len);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor, but len in this case can not be zero. (no validation required) and the string pointed by _data will be set to an empty string.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const CLabel& L);<br />
</syntaxhighlight></big><br />
Copies a CLabel safely to guaranty there is no memory leak.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLabel();<br />
</syntaxhighlight></big><br />
makes sure that memory pointed by _data is deallocated before the object is destroyed.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
makes a direct call to console.strdsp(), passing '''_data''' for the string to be printed and absRow() and absCol() for row and col and _length for len.<br />
this function ignores the argument fn.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
calls draw, returning 0.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always return false.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
if width() is greater than zero, it will copy the string pointed by str into the string pointed by _data upto width characters.<br />
if width() is zero,<br /> It will delete the memory pointed by _data and reallocates enough memory for str and copies the string pointed by str into the newly allocated memory pointed by _data.<br />
<br />
===CLabel Student Resources===<br />
====CLabel Help/Questions Blogs====<br />
====CLabel Blog Posts====<br />
<br />
==CDialog==<br />
Organizes CField objects on the screen, displays them and then lets the user edit them one by one. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cuigh.h"<br />
#include "cframe.h"<br />
namespace cui{<br />
class CField;<br />
class CDialog: public CFrame{<br />
private:<br />
int _fnum;<br />
int _curidx;<br />
CField** _fld;<br />
bool* _dyn;<br />
bool _editable;<br />
unsigned int _fldSize;<br />
public:<br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CDialog();<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit(int fn = C_FULL_FRAME);<br />
<br />
int add(CField* field, bool dynamic = true);<br />
int add(CField& field, bool dynamic = false);<br />
CDialog& operator<<(CField* field);<br />
CDialog& operator<<(CField& field);<br />
<br />
bool editable();<br />
int fieldNum()const;<br />
int curIndex()const;<br />
<br />
CField& operator[](unsigned int index);<br />
CField& curField();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _fnum; <br />
</syntaxhighlight></big><br />
Holds the number of Fields added to the Dialog<br />
<big><syntaxhighlight lang="cpp"><br />
bool _editable;<br />
</syntaxhighlight></big><br />
will be set to true if any of the Fields added are editable. <br />
This is optional because it depends on how you are going to implement the collection of CFields:<br />
<big><syntaxhighlight lang="cpp"><br />
int _curidx;<br />
</syntaxhighlight></big><br />
Holds the index of the Field that is currently being edited.<br />
<big><syntaxhighlight lang="cpp"><br />
CField** _fld;<br />
</syntaxhighlight></big><br />
Dynamic array of CField pointers to hold the address of the CField objects added to the screen. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br />
<big><syntaxhighlight lang="cpp"><br />
bool* _dyn;<br />
</syntaxhighlight></big><br />
A dynamic bool array that holds series of booleans to the exact number of fields, and each boolean here will hold false if the corresponding field pointed by _fld is allocated dynamically or not. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br /> <br />
This array will later on be used by destructor to decide which object is dynamic and to be deleted.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _fldSize; <br />
</syntaxhighlight></big><br />
Holds the current length of '''''_fld''''' and '''''_dyn'''''. <br />When adding a field to dialog if '''_fnum''' reaches '''_fldSize''', then the size of '''_fld''' and '''_dyn''' is expanded by '''''C_DIALOG_EXPANSION_SIZE''''', defined in '''cuigh.h'''<br />
<br />
===Constructors/Destructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Borderd = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
The constructor passes all the incoming arguments to the corresponding arguments of the apparent constructor '''CFrame'''.<br /><br />
Then it will set all called attributes to their default values and then sets all the field pointers (_fld) to NULL.<br />
It also sets all the dynamic (_dyn) flags to false. <br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CDialog();<br />
</syntaxhighlight></big><br />
The destructor will loop through all the field pointers and if the corresponding dynamic flag is true then it will delete the field pointed to by the field pointer.<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''fn''' is '''C_FULL_FRAME''', it will call its parent draw. Then It will draw all the '''Fields''' in the '''Dialog'''. <br /><br />
If '''fn''' is Zero, then it will just draw all the '''Fields''' in the '''Dialog'''.<br /><br />
If '''fn''' is a non-zero positive value, then it will only draw '''Field''' number '''fn''' in the dialog. (First added '''Field''' is field number one.)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''CDialog''' is not editable (all fields are non-editable), it will just display the Dialog and then waits for the user to enter a key and then terminates the function returning the key.<br /><br />
If fn is '''0''' or less, then before editing, the draw method is called with '''fn''' as its argument and then editing begins from the first editable Field.<br />
<br />
If fn is greater than '''0''' then editing begins from the first editable key on or after Field number '''fn'''.<br />
<br />
Note that fn is the sequence number of field and not the index. (First field number is one)<br />
<br />
Start editing from field number '''fn''';<br />
<br />
Call the edit of each field and depending on the value returned, do the following:<br /><br />
# For '''ENTER_KEY''', '''TAB_KEY''' and '''DOWN_KEY''', go to next editable Field , if this is the last editable Field then restart from Field number one.<br />
# For '''UP_KEY''' go to the previous editable Field, if there is no previous editable Field, go to the last editable Field in the Dialog.<br />
# For any other key, terminate the edit function returning the character which caused the termination.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField* field, bool dynamic = true);<br />
</syntaxhighlight></big><br />
First, this function will check the value of _fnum. If '''_fnum''' has reached '''_fldSize''', ('''_fld''' and '''_dyn''' arrays are full) it will expand '''_fld''' and '''_dyn''' by '''C_DIALOG_EXPANSION_SIZE''' (defined in '''cuigh.h''') to make room for more '''CField'''.<br /><br />
Then, it adds the CField pointed by '''field''' to the Fields of the Dialog; by appending the value of the field pointer after the last added ''field'' in the _fld array , setting the corresponding _dyn element to the value of dynamic argument and then increasing _fnum by one and returning the index of added Field in the CDialog object.<br /><br />
'''important note:'''<br /><br />
Make sure that add() sets the container of the added CField to this CDialog object, using the container() method of CField<br /><br />
Also make sure, if size of _fld and _dyn are expanded, then _fldSize is also increased.<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField& field, bool dynamic = false);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method.<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField* field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField& field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the second add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable();<br />
</syntaxhighlight></big><br />
Returns '''_editable''';<br />
<big><syntaxhighlight lang="cpp"><br />
int fieldNum()const;<br />
</syntaxhighlight></big><br />
returns '''_fnum'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int curIndex()const;<br />
</syntaxhighlight></big><br />
returns '''_curidx''';<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CField& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
Returns the reference of the Field with incoming index. (Note that here, the first field index is '''0''')<br />
<big><syntaxhighlight lang="cpp"><br />
CField& curField();<br />
</syntaxhighlight></big><br />
Returns the reference of the Field that was just being edited.<br />
<br />
===CDialog Student Resources===<br />
====CDialog Help/Questions Blogs====<br />
<br />
====CDialog Blog Posts====<br />
<br />
==CLineEdit==<br />
'''ClineEdit''' encapsulates the console.edit() function of Console class.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
namespace cui{<br />
class CLineEdit: public CField{<br />
bool _dyn;<br />
int _maxdatalen;<br />
bool* _insertmode;<br />
int _curpos;<br />
int _offset;<br />
public:<br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CLineEdit();<br />
void draw(int Refresh = C_FULL_FRAME);<br />
<br />
int edit();<br />
bool editable()const;<br />
<br />
void set(const void* Str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _dyn;<br />
</syntaxhighlight></big><br />
_dyn is set to true if the object dynamically allocated memory and is responsible to free it at destruction time.<br />
<big><syntaxhighlight lang="cpp"><br />
int _maxdatalen;<br />
</syntaxhighlight></big><br />
no comment!<br />
<big><syntaxhighlight lang="cpp"><br />
bool* _insertmode;<br />
</syntaxhighlight></big><br />
points to the location of input method (insert or overstrike)<br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
</syntaxhighlight></big><br />
current position of cursor<br />
<big><syntaxhighlight lang="cpp"><br />
int _offset;<br />
</syntaxhighlight></big><br />
current offset<br />
<br />
===Constructors / Destructor=== <br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
<br />
LineEdit, sets the Field's _data to the value of str. If LineEdit is instantiated with this constructor then it will edit an external string provided by the caller function of LineEdit. LineEdit in this case is not creating any dynamic memory, therefore _dyn is set to false (therefore the destructor will not attempt to deallocate the memory pointed by _data).<br /><br />
The location (row and col) and Bordered are directly passed to the parent (CField) and str is passed as data to the parent constructor. Unlike Label, LineEdit could have border or not so depending on this (Bordered being true or false) the Height is set to 3 or 1 respectfully. <br /><br />
(hint: use '''? :''' operator to pass the proper Height value to CField's constructor)<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor with one difference; since no external data is passed to be edited here, this constructor must allocate enough dynamic memory to accommodate editing of '''Maxdatalen''' characters. Then make it an empty string and set Fields's _data to point to it. Make sure _dyn is set to true in this case, so the destructor knows that it has to deallocate the memory at the end.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLineEdit();<br />
</syntaxhighlight></big><br />
If '''_dyn''' is true, it will deallocate the character array pointed by Fields's '''_data'''<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int Refresh = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
It will first call Frame's draw passing '''Refresh''' as an argument to it.<br /><br />
Then it will make a direct call to console.display() to show the data kept in Field's '''_data'''.<br /><br />
The values used for the arguments of console.display() are:<br />
*str: address of string pointed by _data + the value of _offset<br />
*row: absRow() (''add one if border is visible'')<br />
*col: absCol() (''add one if border is visible'')<br />
*len: width() (''reduce by two if border is visible''')<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Makes a direct call to, and returns '''console.stredit()'''.<br />
For the coordinates and width arguments follow the same rules as the draw function.<br />
For the rest of the arguments of console.edit(), use the attributes of '''CLineEdit'''.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Str);<br />
</syntaxhighlight></big><br />
Copies the characters pointed by '''Str''' into the memory pointed by Field's '''_data''' up to '''_maxdatalen''' characters.<br />
<br />
===CLineEdit Student Resources===<br />
====CLineEdit Help/Questions Blogs====<br />
<br />
* [http://ksidhucode.blogspot.ca/2013/07/should-they-be-friends.html Kevin S - Need help with draw()]<br />
<br />
====CLineEdit Blog Posts====<br />
==CButton==<br />
Button is a child of CField.<br />
It displays a small piece of text (usually one word or two) and accepts one key hit entry.<br />
When in edit mode, to indicate the editing mode, it will surround the text with squared brackets.<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
namespace cui{<br />
class CButton: public CField{<br />
<br />
public:<br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CButton();<br />
void draw(int rn=C_FULL_FRAME);<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
This class does not have any attributes of its own!<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
When creating a Button, allocate enough memory to hold the contents of the '''Str''' and set Field's _data to point to it. Then copy the content of '''Str''' into the newly allocated memory.<br /><br />
Pass all the arguments directly to Field's constructor.<br /><br />
For Field size (width and hight) do the following:<br /><br />
For width: Set width to the length of '''Str''' + 2 (adding 2 for surrounding brackets) or if the Button is bordered set width to the length of '''Str''' + 4 (adding 2 for surrounding brackets and 2 for the borders).<br />
For height: Set the height to 1 or if the Button is bordered, set the height to 3.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CButton();<br />
</syntaxhighlight></big><br />
Deallocates the allocated memory pointed by Field's '''_data'''.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the Button with border around it if it is Bordered. Note that there should be a space before and after of the text that will be used to surround the text with "[" and "]"<br /><br />
hint:<br /><br />
:*First calls Frame's draw(fn) (passing the fn argument to the parents draw)<br />
<br />
:Use console.display() to display the Button's text (pointed by Field's _data)<br />
:*If not bordered<br />
:*:display the text at absRow() and absCol()<br />
:*If bordered<br />
:*:display the text at absRow()+1 and absCol()+2<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
First draw() the Button, then surround it by squared brackets, place the cursor under the first character of Button's text and wait for user entry.<br /><br />
When user hits a key, if the key is ENTER_KEY or SPACE, return C_BUTTON_HIT (defined in cuigh.h) otherwise return the entered key.<br /><br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
First deallocated what is pointed by Field's _data.<br />
Then allocate new memory to the size of content of str and copy the content into it and make<br />
Field's _data point to it.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always returns true<br />
<br />
===CButton Student Resources===<br />
====CButton Help/Questions Blogs====<br />
[http://pankajsama01.blogspot.ca/2013/03/cbuttonhit-key.html C_BUTTON_HIT Key] is not defined(Pankaj Sama)<br />
** It is defined in the new cuigh.h file. It is defined #define C_BUTTON_HIT 1. Gary Chen<br />
<br />
====CButton Blog Posts====<br />
==CValEdit==<br />
This class works exactly like CLineEdit and improves it by adding two features; Validation and Help. CValEdit is capable of validating the user input on exit and also provide help when CValEdit::edit() is active by invoking a '''"help"''' method before and after editing. If these two functions, (Validation and Help) are not provided, then CValEdit literally works like CLineEdit.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clineedit.h"<br />
<br />
namespace cui{<br />
class CValEdit: public CLineEdit{<br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
public:<br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
int edit();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
</syntaxhighlight></big><br />
*_help, holds the address of the help logic (function) or NULL if there is no help function is assigned <br />
*_validate, holds the address of the validation logic (function) or NULL if there is no validation function is assgned<br />
<br />
===Constructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
These constructors pass all their arguments to corresponding arguments of CLineEdit constructor and then set '''_help''' and '''_validate''' attributes to the corresponding incoming arguments<br />
<br />
===Method===<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
If the container() is NULL then this function works exactly like LineEdit::edit().<br /><br />
If the container() is not NULL:<br />
#If _help function exist, it calls the function passing MessageStatus::SetMessage and container()'s reference as arguments.<br />
#Calls CLineEdit's edit()<br />
#If validation function exists, and the terminating key of CLineEdit's edit() is a navigation key(see below)<br />
#:It will call the validation function on the Field's _data, if the data is valid, it goes to next step, otherwise it will repeat calling CLineEdit's edit().<br />
#After validation is done, if _help function exists, it will recall the help function using MessageStatus::ClearMessage and contianer()'s reference as arguments.<br />
#It will return the terminating key<br />
<br />
''Navigation keys are Up key, Down key, Tab key or Enter key.''<br /><br />
''MessageStatus is enumerated in '''cuigh.h'''''<br />
===CValedit Student Resources===<br />
====CValEdit Help/Questions Blogs====<br />
====CValedit Blog Posts====<br />
<br />
==CCheckMark==<br />
Creates a single CheckMark on the screen and allows the user to:<br /><br />
# Toggle it, if it is set to be a CheckMark for a Check List.<br />
# Only check it when its unchecked, if it is set to be a CheckMark for a Radio Button List.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
#include "clabel.h"<br />
namespace cui{<br />
class CCheckMark : public CField{<br />
bool _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
public:<br />
CCheckMark(bool Checked,const char* Format, const char* Text,<br />
int Row, int Col, int Width, bool IsRadio = false);<br />
CCheckMark(const CCheckMark& C);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* flag);<br />
bool checked()const;<br />
void checked(bool val);<br />
bool radio(); <br />
void radio(bool isRadio);<br />
operator bool(); <br />
operator char*(); <br />
bool operator=(bool flag);<br />
};<br />
}<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
</syntaxhighlight></big><br />
*'''_flag''' holds the status of the Checkbox (0: unchecked or 1: checked ) and is pointed by _data pointer .<br />
*'''_radio''' dictates the behavior of the Checkbox as a radio-button, or a check-mark.<br />
*'''_format''' holds the characters, the Checkbox is drawn with (i.e. "[X]", "(O)", "<*>", etc...).<br />
*'''_Label''' holds the Label attached to the this Checkbox<br />
<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(bool Checked,const char* Format, const char* Text, int Row, int Col, int Width, bool IsRadio = false);<br />
</syntaxhighlight></big><br />
*Passes the ''Row, Col, Width and "1"'' to ''row, col, width and height'' arguments of CField and directly initializes _Label with ''Text, 0, 4, and (Width-4)'' for ''Str, Row, Col and Len'', arguments of CLabel's Constructor.<br /><br />
<br />
*Sets the frame of _Label to its owner (Checkmark i.e. 'this');<br />
*Sets _flag to Checked<br />
*Sets _radio to IsRadio<br />
*Copies Format to _format<br />
*Sets _data to the address of _flag<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(const CCheckMark& C);<br />
</syntaxhighlight></big><br />
*Passes incoming CCheckMark reference ("C") to CField's copy constructor, and directly initializes the _Label with the _Label of C<br />
*Sets all the attributes of this object to the attributes of incoming CCheckMark reference ("C")<br />
*Sets _data to the address of _flag<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
Using Console methods:<br /><br />
#displays the _format string at absRow() and absCol()<br />
#if _flag is false, it will overwrite the second character printed above, with a space (removes the check mark on console)<br />
#draw()s the _Label<br />
#sets the position of the cursor at the checkmark (second character of printed _format)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the checkmark<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##if _radio is true, it will set the _flag to true<br />
##if _radio is false, it will flip the value of _flag. <br />
##draw()s the checkmark again<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
*Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* flag);<br />
</syntaxhighlight></big><br />
*Casts the incoming flag pointer to an (bool*) and sets the content of '''_flag''' to where '''flag''' is pointing to.<br />
<big><syntaxhighlight lang="cpp"><br />
bool checked()const;<br />
void checked(bool val);<br />
</syntaxhighlight></big><br />
*These methods set and get _flag.<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio(); // addition for R0.6<br />
void radio(bool isRadio); // addition for R0.6<br />
</syntaxhighlight></big><br />
* These to methods, get and set the '''_radio''' attribute.<br />
<big><syntaxhighlight lang="cpp"><br />
operator bool(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''bool''' cast to return the value of '''_flag'''<br />
<big><syntaxhighlight lang="cpp"><br />
operator char*(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''char*''' cast to return the value of '''_Label.data()'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool operator=(bool flag);; // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the operator= and set the _flag to flag<br />
<br />
===CCheckMark Student Resources===<br />
====CCheckMark Help/Questions Blogs====<br />
<br />
<br />
Hey Guys, In the constructor for CCheckmark it says : set the frame of _Label to its owner<br />
(checkmark i.e, "this")<br />
Can anyone tell me what this means or what the purpose of this is. Thanks in advance.<br />
<br />
Use this with caution since I don't really know if it is correct, but I did<br />
'''Label.container(this->container());'''<br />
<br />
-Bo Li<br />
<br />
http://lhmcintosh.blogspot.ca/2013/03/this.html Hope this helps! - LMC<br />
<br />
Please help - http://oop344class.wordpress.com/2013/03/29/setting-cursor-position-in-ccheckmark-draw-function/<br />
<br />
-S.E.<br />
<br />
====CCheckMark Blog Posts====<br />
<br />
==CMenuItem==<br />
CMenuItem provides a Label that can be marked as selected by pressing the space bar.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clabel.h"<br />
#include "cfield.h"<br />
namespace cui{<br />
class CMenuItem:public CField{<br />
bool _selected;<br />
char _format[3];<br />
CLabel Label;<br />
public:<br />
CMenuItem(bool Selected,const char* Format, const char* Text,<br />
int Row, int Col, int Width);<br />
CMenuItem(const CMenuItem &CM);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* Selected);<br />
bool selected()const;<br />
void selected(bool val);<br />
const char* Text();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _selected;<br />
</syntaxhighlight></big><br />
Holds the status of the MenuItem, being selected or not;<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
Holds the surrounding characters with which a selected MenuItem is shown:<br /><br />
If _format holds "[]", then a selected MenuItem will be like [MenuText]<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel Label;<br />
</syntaxhighlight></big><br />
Hold the Text of the MenuItem.<br />
<br />
===Constructors / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(bool Selected,const char* Format, const char* Text, int Row, int Col, int Width);<br />
</syntaxhighlight></big><br />
#Initializes the CField with Row, Col, Width and 1 for Height<br />
#Initializes the Label with (Text, 0, 1 and Width-2) for (Str, Row, Col, and Len)<br />
#Sets the attributes to corresponding arguments<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object. <br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(const CMenuItem &CM);<br />
</syntaxhighlight></big><br />
#Passes CM to CField and Initializes the Label with CM<br />
#Sets the _selected to _selected of CM<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
#Draws the Label with fn <br />
#If _selected is true, it surrounds the Label Text the _format[0] and _format[1]<br />
#If _selected if false, it surrounds the Label with SPACEs (overwrites _format[0] and _format[1])<br />
#Positions the cursor at the first character of the Label<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the MenuItem<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##it will set the _selected to true<br />
##draw()s the MenuItem again<br />
#returns the key<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Returns true.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Selected);<br />
</syntaxhighlight></big><br />
Sets _selected to where Selected is pointing to<br />
<big><syntaxhighlight lang="cpp"><br />
bool selected()const;<br />
</syntaxhighlight></big><br />
Returns Selected<br />
<big><syntaxhighlight lang="cpp"><br />
void selected(bool val);<br />
</syntaxhighlight></big><br />
Sets _selected to val<br />
<big><syntaxhighlight lang="cpp"><br />
const char* Text();<br />
</syntaxhighlight></big><br />
Returns the text of Label<br />
<br />
===CMenuItem Student Resources===<br />
====CMenuItem Help/Questions Blogs====<br />
<br />
====CMenuItem Blog Posts====<br />
<br />
==CText==<br />
CText is a CField to edit a multiline text.<br /><br />
To do this, it will use the [[#The_Text_Helper_Class|Text class]] to convert a character string containing a text into a (simulated) two dimensional array. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#pragma once<br />
#include "cfield.h"<br />
#include "text.h"<br />
<br />
using namespace cui;<br />
<br />
<br />
class CText:public CField{<br />
Text _T;<br />
bool _displayOnly;<br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
int _lcurpos;<br />
int _loffset;<br />
public:<br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
void draw(int fn = C_FULL_FRAME);<br />
<br />
void set(const void *Str);<br />
void *data()const;<br />
<br />
int edit();<br />
bool editable()const;<br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
};<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
Text _T;<br />
</syntaxhighlight></big><br />
An instance of the [[#The_Text_Helper_Class|Text class]]<br />
<big><syntaxhighlight lang="cpp"><br />
bool _displayOnly;<br />
</syntaxhighlight></big><br />
If it is set to true, then the Text can only be viewed but not edited; All scrolling, page UP, DOWN, etc... is enabled but any attempt to change the text, is ignored quietly. This attribute is passed to ReadOnly argument of Console::edit(......). <br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
</syntaxhighlight></big><br />
Values used by Console::edit(......)<br />
<big><syntaxhighlight lang="cpp"><br />
int _lcurpos;<br />
int _loffset;<br />
</syntaxhighlight></big><br />
Vertical cursor position in text.<br />
Vertical offset of the text relative to the frame of CText. This value indicates, how many line are hidden above the frame when text is scrolled down.<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Initialized the CField with the corresponding incoming arguments and then sets all the attributes to their corresponding arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor but it also '''set()'''s the class to '''Str'''.<br />
<br />
===Methods=== <br />
'''Under Construction'''<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
First it will draw the CField using the fn arguement.<br /><br />
Then it will use console.display to display all the Lines of _T that are positioned inside the frame of the CText. (i.e. from _loffset to _loffset + Height() - 2).<br /><br />
Two Important things to note:<br />
# you should note that '''Lines''' are '''console.display()'''ed from _offset character. (i.e. &_T[theLineNumber][_offset]).<br />
# Also you should '''console.display()''' the Lines only if the length of the line is more than the _offset(i.e. _T[theLineNumver].strlen() > _offset)<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void *Str);<br />
</syntaxhighlight></big><br />
Sets the '''_T''' attribute to the incoming string.<br />
<big><syntaxhighlight lang="cpp"><br />
void *data()const;<br />
</syntaxhighlight></big><br />
Exports the string out of _T and returns its address after casting it to '''void*'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
# Create local variables to hold the following attributes in case ESCAPE is hit to undo:<br />
## _T<br />
## _curpos<br />
## _offset<br />
## _lcurpos<br />
## _loffset<br />
# Create the usual '''while(!done)''' structure for interfacing with user<br />
# '''draw()''' the text<br />
# '''console.edit()''' the Line at where vertical cursor is after _loffset.<br />
## use absRow() and _lcurpos to calculate the row on which the editing should happen<br />
## use absCol() to calculate the column on which editing to happen.<br />
## use width() to calculate the fieldLen for '''console.edit()'''<br />
## use the '''size()''' of the current '''Line''' in '''_T''' to determine the maximum data length of the string to '''console.edit()'''<br />
## the isTextEditor is always true<br />
## the ReadOnly depends on the value of '''_displayOnly'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
</syntaxhighlight></big><br />
These methods Get and Set the '''_displayOnly''' attribute.<br />
<br />
===The Text Helper Class===<br />
[https://github.com/Seneca-OOP344/20131-notes/tree/master/TextClass Text class]<br />
<br />
===CText Student Resources===<br />
====CText Help/Questions Blogs====<br />
====CText Blog Posts====<br />
<br />
==CCheckList==<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
#include "ccheckmark.h"<br />
namespace cui{<br />
<br />
class CCheckList : public CField{<br />
CCheckMark* _checkmarks[32];<br />
bool _radio;<br />
char _format[4];<br />
unsigned int _cnt;<br />
unsigned int _flags;<br />
unsigned int _cur;<br />
public:<br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
~CCheckList(void);<br />
CCheckList& add(const char* Text, bool selected = false);<br />
CCheckList& operator<<(const char* Text);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void* data();<br />
void set(const void* data);<br />
CCheckMark& operator[](unsigned int index);<br />
bool editable()const;<br />
bool radio()const;<br />
void radio(bool val);<br />
unsigned int flags()const;<br />
void flags(unsigned int theFlags);<br />
int selectedIndex()const;<br />
void selectedIndex(int index);<br />
unsigned int length();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark* _checkmarks[32];<br />
</syntaxhighlight></big><br />
An array of 32 CCheckmark pointers that will point to _cnt dynamically allocated CCheckMarks.<br />
<big><syntaxhighlight lang="cpp"><br />
bool _radio;<br />
</syntaxhighlight></big><br />
Holds the behaviour of the CCheckList to be like a Radio Button List or Check Mark List<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[4];<br />
</syntaxhighlight></big><br />
Holds the format with which a check mark is displayed (i.e. "[X]" or "(o)" etc...)<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
Holds the number of CCheckMarks currently in CCheckList<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _flags;<br />
</syntaxhighlight></big><br />
Always holds the bit pattern corresponding to the status of the CCheckMarks in the List. Note that bit 0 (right most) will correspond to the first CCheckMark.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cur;<br />
</syntaxhighlight></big><br />
Holds the index of the CCheckMark in the "_checkmarks" array which is currently being edited. (focused)<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes corresponding values to the Base class (CField) then <br />
#sets the _data attribute to the address of _flags<br />
#copies '''Format''' and '''radio''' into '''_format''' and '''_radio''' respectively <br />
#sets '''_cnt, _cur''' and '''_flags''' to zero<br />
<big><syntaxhighlight lang="cpp"><br />
~CCheckList(void);<br />
</syntaxhighlight></big><br />
Goes through '''_checkmarks''' up to '''_cnt''' and if deletes them one by one.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
* Only adds a new CCheckMark if '''_cnt''' does not exceed the maximum amount of '''_checkmarks''' (32)<br />
* Creates a new CCheckMark with the row being '''_cnt'''+1, the height being 1 and the length being the length of '''Text'''+4<br />
* Sets the newly created CCheckMarks' frame to '''this'''<br />
* Automatically expands the width of the CCheckList if the width of the newly created CCheckMark is bigger than the current width of the CCheckList<br />
* Sets the height of the CCheckList to '''_cnt'''+3<br />
* Updates the bit pattern of '''_flags'''<br />
* Increments '''_cnt'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text).<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the frame and then draws all the '''_checkmarks''', making sure the cursor is standing under the first checked checkmark.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
*Draws the '''CCheckList''' then starts editing the '''_checkmarks''' form '''_cur''' and according to the return key of CCheckMark::edit():<br />
**If Down or Right key is hit it goes to the next '''_checkmark''', if '''_cur''' is the last one, then it exits the edit, returning the last key entered.<br />
**UP and Left key works in opposite direction of Down and Right, if '''_cur''' is already zero, then it exits the edit, returning the last key entered.<br />
**If Space is hit, then if '''_radio''' is true, it will uncheck all the '''_checkmarks''' other than the '''_cur'''rent one.<br />
<big><syntaxhighlight lang="cpp"><br />
void* data();<br />
</syntaxhighlight></big><br />
returns the bit pattern held in _flags. <br /><br />
''make sure _flags are updated to the status of the '''_checkmarks'''''<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' and updates the '''_checkmarks''' to the bitpattern of '''_flags'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
returns the CCheckMark corresponding the '''index''' value.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always returns true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio()const;<br />
</syntaxhighlight></big><br />
returns '''_radio'''<br />
<big><syntaxhighlight lang="cpp"><br />
void radio(bool val);<br />
</syntaxhighlight></big><br />
sets the _radio and updates all _checkMarks radio value.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int flags()const;<br />
</syntaxhighlight></big><br />
returns the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
void flags(unsigned int theFlags);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
int selectedIndex()const;<br />
</syntaxhighlight></big><br />
returns the index of the first CCheckMark that is selected, and -1 if nothing is selected.<br />
<big><syntaxhighlight lang="cpp"><br />
void selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selectedindex. (only un-selects the rest if object is in radio mode)<br /><br />
if index is less than zero, then it will un-selects all<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int length();<br />
</syntaxhighlight></big><br />
returns '''_cnt'''<br />
<br />
===CCheckList Student Resources===<br />
====CCheckList Help/Questions Blogs====<br />
<br />
If you copied the header (''cchecklist.h'') from the ''20132notes'' repository, make sure to remove the const keyword after the ''void* data()'' function, since it is not.<br />
<br />
====CCheckList Blog Posts====<br />
<br />
==CMenu and MNode (optional)==<br />
CMenu is a linked list of MNodes. Providing menu selection for the user in two formats; Drop Down List, or a simple menu.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#ifndef __CUI__CMENU_H__<br />
#define __CUI__CMENU_H__<br />
#include "cuigh.h"<br />
#include "cfield.h"<br />
#include "cmenuitem.h"<br />
#include "cbutton.h"<br />
namespace cui{<br />
class Cmenu;<br />
<br />
class MNode{<br />
CMenuItem* _item;<br />
MNode* _next;<br />
MNode* _prev;<br />
unsigned int _index;<br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
~MNode(void);<br />
friend class CMenu;<br />
};<br />
<br />
class CMenu : public CField{<br />
MNode* _first;<br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
char _format[3];<br />
unsigned int _cnt;<br />
int _selectedIndex;<br />
bool _dropdown;<br />
bool _dropped;<br />
bool goNext();<br />
bool goPrev();<br />
CButton _Title;<br />
public:<br />
static const bool Select;<br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
CMenu& add(const char* Text, bool selected = false);<br />
CMenu& operator<<(const char* Text);<br />
CMenu& operator<<(bool select);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void set(const void* data);<br />
int selectedIndex() const;<br />
int selectedIndex(int index);<br />
const char* selectedText();<br />
bool editable()const;<br />
~CMenu(void);<br />
};<br />
extern const bool Select;<br />
}<br />
<br />
#endif<br />
</syntaxhighlight></big><br />
===MNode===<br />
MNode holds information about an Item in the menu:<br />
# The CMenuItem object<br />
# The index of this Item<br />
MNode is a fully private class and is only accessible by CMenu.<br />
====Attributes====<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem* _item;<br />
</syntaxhighlight></big><br />
Holds the address of a dynamically allocated CMenuItem<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _index;<br />
</syntaxhighlight></big><br />
Holds the index (sequence -1) number of the '''CMenuItem''' in the '''CMenu'''.<br />
<big><syntaxhighlight lang="cpp"><br />
MNode* _next;<br />
MNode* _prev;<br />
</syntaxhighlight></big><br />
Standard next and previous pointer for a linked list node.<br />
<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang="cpp"><br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
</syntaxhighlight></big><br />
Sets the corresponding attributes to the values of the arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
~MNode(void);<br />
</syntaxhighlight></big><br />
deletes the '''_item'''<br />
<br />
===CMenu===<br />
CMenu is a linked list of MNodes and also contains a CButton for a Title (only used on if in '''_dropdown''' mode). <br /><br />
Assuming that a CMenu is created with a title as "FILE" and menu-items as "Save, Load, Print, Quit":<br />
*When in '''_dropdown''' mode:<br />
When drawing, Only the _Title(CButton) is drawn (and not the menu itself)<br />
<big><pre><br />
FILE<br />
</pre></big><br />
When edited (in '''_dropdown''' mode) the CButton gets activated and if it is hit, then the Menu will be dropped down (drawn) under the CButton and user can browse through the options and select one of them. selecting the option in this case will close the menu and CButton gets activated again:<br /><br />
when active, CMenu looks like this:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits enter: (since nothing is selected all menu items are unselected)<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
| Print |<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
Now the cursor is standing under '''S'''ave.<br />
User hits down arrow twice to select '''P'''rint and then hits Space:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
The Print is selected and The menu is closed and FILE is active again.<br />
If the user hits Enter again:<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
We will see the Print is selected and the cursor in under P.<br />
If user hits Enter instead of space, the selection wont change and whatever was selected before will remain the same:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits navigation keys and moves out of the CMenu Field.<br />
''Note that if '''left''' or '''right''' navigation keys are hit when the title is active, then they are translated to '''up''' or '''down''' respectively.<br />
*When NOT in '''_dropdown''' mode:<br />
*:The CButton will not be displayed at all, and when user starts to edit, he enters the menu browsing the items and if he gets to the end of the menu, the control goes to the next field in the dialog. If user goes up and passes the first them, then the control will go to the previous field in the dalog.<br />
<big><pre><br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
''Note that if the number of menu items are more than the space provided by the CField's frame, then the menu items should scroll up and down to accommodate the selection'' <br />
====Attributes====<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _first;<br />
</syntaxhighlight></big><br />
points to the first CMenuItem visible on the menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
</syntaxhighlight></big><br />
standard Link list pointers<br />
<big><syntaxhighlight lang = "cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
The two characters used to surround the selected menu item<br />
<big><syntaxhighlight lang = "cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
The number of CMenuItems in CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
int _selectedIndex;<br />
</syntaxhighlight></big><br />
The index of the selected CMenuItem (saved in MNode::index), if there is no selected menu, then this value is -1.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropdown;<br />
</syntaxhighlight></big><br />
True if the Menu is a Drop Down Menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropped;<br />
</syntaxhighlight></big><br />
Flag used to hold the status of a Drop Down Menu, (_dropped or not)<br />
<big><syntaxhighlight lang = "cpp"><br />
bool goNext();<br />
bool goPrev();<br />
</syntaxhighlight></big><br />
standard gonext() and goprev() in linked lists<br />
<big><syntaxhighlight lang = "cpp"><br />
CButton _Title;<br />
</syntaxhighlight></big><br />
CButton holding the Title of this menu<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
#Initializes CField as follows:<br />
#* Row: Passes Row, if this menu is not a dropdown, otherwise it will pass Row+1.<br />
#* Col, Width, Height are passed directly<br />
#* Data: a void null pointer is passed for data<br />
#* Bordered: since CMenu is always bordered, true is passed here<br />
#* Border is directly passed.<br />
#Initializes _Title (the CButton) as follows:<br />
#* Str, Title is passed here<br />
#* Row, -1<br />
#* Col, 1<br />
#* Bordered, since the title of the dorpdown is alway NOT bordered, then false is passed here.<br />
#Constructor Settings:<br />
#* Link list attributes are set as standard linked list contructor<br />
#* Format is copied into _format<br />
#* _cnt is set to zero<br />
#* _selectedIndex is set to -1<br />
#* _data is set to address of _selectedIndex<br />
#* _dropdown is set to dropdown<br />
#* _dropped is set to false<br />
#* _Title's frame is set to the CMenu object (this)<br />
<big><syntaxhighlight lang = "cpp"><br />
~CMenu();<br />
</syntaxhighlight></big><br />
Standard Linked list destructor<br />
<br />
====Methods====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
Standard append for a linked list:<br />
#creates an MNode with<br />
#* a new CMenutItem with<br />
#*:selected, _format, Text for first three arguments<br />
#*:1, 1, and (width of the menu) -2, for Row col and width<br />
#* the rest are what is needed for a standard append procedure for a linked list<br />
#appends the new MNode to the end of the list<br />
#if the new added CMenuItem is selected, it will update the selected index<br />
'''''Note that if the added CMenuItem is the first CMenuItem in the list, then the _first pointer should be pointing to it'''''<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text)<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(bool select);<br />
</syntaxhighlight></big><br />
if select is true, it will select the last CMenuItem added to the CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
#if this is a '''_dropdown''', then it will draw the _Title<br />
#: and then if '''_dropped''' is true, it will draw the CField and then draw the CMenuItems starting form what _first is pointing to, up to (CField's hieght -2) times.<br />
#if this not a '''_dropdown''' then the _Title will never be drawn and the CMenuItems should be drawn as above.<br />
<big><syntaxhighlight lang = "cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Edits the menu the way it is explains in [[#CMenu|CMenu]] description.<br /><br />
If it is too confusing, this [[CMenu pseudo code - OOP344 20113|pseudo code]] may help.<br />
<big><syntaxhighlight lang = "cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
Sets the selected index to the integer pointed by data;<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex() const;<br />
</syntaxhighlight></big><br />
returns the selected index or -1 if nothing is selected<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selected index.<br />
<big><syntaxhighlight lang = "cpp"><br />
const char* selectedText();<br />
</syntaxhighlight></big><br />
returns the text of the selected menu. If nothing is selected, empty string is returned.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
returns true if '''_cnt''' is greater than zero<br />
<br />
===CMenu Student Resources===<br />
====CMenu Help/Questions Blogs====<br />
====CMenu Blog Posts====</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97320Weekly Schedule 20132 - OOP3442013-07-19T15:18:18Z<p>Oleksandr Snurnikov: /* This Week 11 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post] - Alexander Snurnikov<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
* Templates excercise[http://template-inheritance.blogspot.ca/ Template Blog Post]- Prabhleen Bhupal<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
*Static Variable review<br />
*The compilation process [http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work compilation steps]<br />
*:Compilation order<br />
*:The linker<br />
*:Common Linker Errors<br />
*Multiple Inheritance Cont<br />
*:Virtual Inheritance<br />
*Advanced Template Use<br />
*:Template functions cont<br />
*:Template definition in CPPs<br />
*Const review [http://duramecho.com/ComputerInformation/WhyHowCppConst.html why & how?!]<br />
*New Keywords<br />
*:Volatile<br />
*:Union<br />
*Arrays<br />
*:Basic arrays review<br />
*:Homogeneous Arrays<br />
*Standard Template Library<br />
*:std::string class<br />
*[http://www.cplusplus.com/doc/tutorial/typecasting/ Constrained Casting]<br />
*:static_cast<br />
*:reinterpret_cast<br />
*:const_cast<br />
*:dynamic_cast<br />
*Bit-wise Introduction<br />
<br />
=== To Do 11===<br />
*A2 0.4 Milestone - Due July 19th<br />
*No code exercise this week... INSTEAD: Blog about how you feel about the world of programming, where you want to go with your career, what professional options you are considering, etc!<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97308Weekly Schedule 20132 - OOP3442013-07-18T13:55:21Z<p>Oleksandr Snurnikov: /* This Week 11 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post] - Alexander Snurnikov<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
* Templates excercise[http://template-inheritance.blogspot.ca/ Template Blog Post]- Prabhleen Bhupal<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
*Static Variable review<br />
*The compilation process [http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work compilation steps]<br />
*:Compilation order<br />
*:The linker<br />
*:Common Linker Errors<br />
*Multiple Inheritance Cont<br />
*:Virtual Inheritance<br />
*Advanced Template Use<br />
*:Template functions cont<br />
*:Template definition in CPPs<br />
*Const review [http://duramecho.com/ComputerInformation/WhyHowCppConst.html why & how?!]<br />
*New Keywords<br />
*:Volatile<br />
*:Union<br />
<br />
=== To Do 11===<br />
A2 0.4 Milestone - Due July 19th<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97306Weekly Schedule 20132 - OOP3442013-07-18T13:36:45Z<p>Oleksandr Snurnikov: /* This Week 11 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post] - Alexander Snurnikov<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
* Templates excercise[http://template-inheritance.blogspot.ca/ Template Blog Post]- Prabhleen Bhupal<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
*Static Variable review<br />
*The compilation process<br />
*:Compilation order<br />
*:The linker<br />
*:Common Linker Errors<br />
*Multiple Inheritance Cont<br />
*:Virtual Inheritance<br />
*Advanced Template Use<br />
*:Template functions cont<br />
*:Template definition in CPPs<br />
*Const review [http://duramecho.com/ComputerInformation/WhyHowCppConst.html why & how?!]<br />
*New Keywords<br />
*:Volatile<br />
*:Union<br />
<br />
=== To Do 11===<br />
A2 0.4 Milestone - Due July 19th<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=The_CUI_Framework_-_OOP344_20132&diff=97277The CUI Framework - OOP344 201322013-07-16T02:03:05Z<p>Oleksandr Snurnikov: /* Issues, Releases and Due Dates */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
<br />
=Objective=<br />
Your objective at this stage is to create series of core classes designed to interact with the user. These '''Core Classes''' then can be used in development of any interactive application.<br />
<br />
Please note that the class definitions here are minimum requirement for the Core Classes and you are free to add any enhancements or features you find useful. However make sure that you discuss these enhancements with your team and professor to make sure they are feasible before implementation.<br />
<br />
It is highly recommended to develop the classes in the order they are stated here. You must create your own tester programs for each class (if possible); However, close to due date of each release, a tester program may be provided to help you verify the functionality of your classes. If tester programs are provided, then executables of the test programs will be available on matrix to show you how it is supposed to run.<br />
<br />
Also object your professor's implementation of all the classes are available in your class notes repository. Please note the following:<br />
* these implementations include a header file for each class and an object file for each class and platform<br />
* these are for you to test your own implementation in case you need to have access to another class and they are not developed yet.<br />
* like any other implementation, these implementations could be buggy <br />
<br />
=Tips=<br />
* [[GIT for OOP344 Projects| Guide for using Github]]<br />
Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything).<br />
Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines:<br />
* Add recompilation safeguards to all your header files.<br />
* Always use forward declaration if possible instead of including a class header-file.<br />
* Use includes only in files in which the actual header file code is used. <br />
* '''Avoid "just in case" includes.'''<br />
<br />
=CUI General Header file (cuigh.h)=<br />
The general header file holds the common setting and definition between all the Core Classes. Review this header file at each stage of the project for changes. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#ifndef ___CUIGH_H__<br />
#define ___CUIGH_H__<br />
namespace cui{ <br />
#ifndef _CRT_SECURE_NO_DEPRECATE<br />
#define _CRT_SECURE_NO_DEPRECATE<br />
#endif<br />
#ifndef _CRT_SECURE_NO_WARNINGS<br />
#define _CRT_SECURE_NO_WARNINGS<br />
#endif<br />
<br />
#define C_INITIAL_NO_FIELDS 50<br />
#define C_DIALOG_EXPANSION_SIZE 20<br />
#define C_BUTTON_HIT 1<br />
#define C_MAX_LINE_CHARS (1024u)<br />
<br />
#define C_REFRESH -2<br />
#define C_FULL_FRAME -1<br />
#define C_NO_FRAME 0<br />
<br />
#define C_BORDER_CHARS "/-\\|/-\\|"<br />
enum CDirection {centre, left, right, up, down};<br />
// added after 0.3:<br />
enum MessageStatus{ClearMessage,SetMessage};<br />
<br />
<br />
#ifdef NO_HELPFUNC<br />
# undef NO_HELPFUNC<br />
#endif<br />
#define NO_HELPFUNC ((void(*)(MessageStatus, CDialog&))(0))<br />
#ifdef NO_VALDFUNC<br />
# undef NO_VALDFUNC<br />
#endif<br />
#define NO_VALDFUNC ((bool(*)(const char*, CDialog&))(0))<br />
<br />
<br />
#define C_MAX_LINE_CHARS (1024u)<br />
#define C_INITIAL_NUM_OF_LINES (100u)<br />
}<br />
#endif<br />
<br />
</syntaxhighlight></big><br />
<br />
=File Names=<br />
Use the following rules to create filenames for your class.<br />
*Each class MUST have its own header file and cpp file for implementation<br />
*Use the class name for the name of the file but make sure it is all '''''lowercase'''''.<br />
*:For example '''CFrame''' class should have '''cframe.h''' and '''cframe.cpp''' files for its implementation.<br />
<br />
=Hierarchy=<br />
<big><pre><br />
CFrame<br />
|<br />
|---CDialog<br />
|<br />
|<br />
|---CField<br />
|<br />
|-------- CLabel<br />
|<br />
|<br />
|-------- CButton<br />
|<br />
|<br />
|-------- CLineEdit<br />
| |<br />
| |-------CValEdit<br />
|<br />
|-------- CText<br />
|<br />
|<br />
|-------- CCheckMark<br />
|<br />
|<br />
|-------- CCheckList <br />
|<br />
|<br />
|-------- CMenuItem <br />
|<br />
|<br />
|-------- CMenu <br />
</pre></big><br />
<br />
=Issues, Releases and Due Dates=<br />
*Issue Name Format<br />
*:Issue and branch name format: '''V.V_Name''' <br /><br />
*:example; issue: Add Text Class to the project (issue 2.9.1) issue and branch name on github: '''2.9.1_AddTextClass'''<br /><br />
: <br />
* A2 Milestone 0.2 - Due Friday July 12th<br />
*: Split up work within group and document it in the team pages<br />
*: Add skeletons for each class (empty function definitions in .cpp files)<br />
*:<br />
* A2 Milestone 0.4 - Due Friday July 19th<br />
*: Implement CLabel<br />
*: Implement CButton<br />
*: Implement CLineEdit<br />
*:<br />
* A2 Milestone 0.5 - Due Friday July 26th<br />
*: Implement CDialog<br />
*: Implement CValEdit<br />
*: Implement CMenuItem<br />
*:<br />
* A2 Milestone 0.7 - Due Friday August 3rd<br />
*: Implement CCheckMark<br />
*: Implement CText<br />
*: Implement CCheckList<br />
*:<br />
* A2 Milestone 0.9 - Due Friday August 9th<br />
*: Implement CMenu<br />
*: Merge all projects and verify CIO framework is fully functional and bugless<br />
*:<br />
* A2 Milestone 1.0 - Due Friday August 15th<br />
*: The Application<br />
*:<br />
Please note these are latest recommendations and you should intend to have these completed BEFORE the due dates. The final dead-line for this project is August 15h, no projects will be accepted past this point.<br />
<br />
=Classes=<br />
==CFrame==<br />
The code for this class is provided in your repository. You must understand and use it to develop your core classes in your repository.<br />
<br />
CFrame class is responsible to create a frame or structure in which all user interface classes contain themselves in. It can draw a border around it self or be border-less. <br />
CFrame also, before displaying itself on the screen, will save the area it is about to cover, so it can redisplay them to hide itself.<br />
<br />
CFrame is base of all objects in our user interface system. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#include "cuigh.h"<br />
<br />
class CFrame{<br />
int _row; // relative row of left top corner to the container frame or the screen if _frame is null<br />
int _col; // relative col of left top corner to the container frame or the screen if _frame is null<br />
int _height; <br />
int _width;<br />
char _border[9]; // border characters<br />
bool _visible; // is bordered or not<br />
CFrame* _frame; // pointer to the container of the frame (the frame, surrounding this frame)<br />
char* _covered; // pointer to the characters of the screen which are covered by this frame, when displayed<br />
void capture(); // captures and saves the characters in the area covered by this frame when displayed and sets <br />
// _covered to point to it<br />
void free(); // deletes dynamic memory in the _covered pointer<br />
protected:<br />
int absRow()const; <br />
int absCol()const; <br />
public:<br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
<br />
virtual void draw(int fn=C_FULL_FRAME);<br />
virtual void move(CDirection dir);<br />
virtual void move();<br />
virtual void hide();<br />
<br />
virtual ~CFrame();<br />
<br />
/* setters and getters: */<br />
<br />
bool fullscreen()const;<br />
<br />
void visible(bool val);<br />
bool visible()const;<br />
<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
<br />
void row(int val);<br />
int row()const;<br />
<br />
void col(int val);<br />
int col()const;<br />
<br />
void height(int val);<br />
int height()const;<br />
<br />
void width(int val);<br />
int width()const;<br />
<br />
void refresh();<br />
};<br />
</syntaxhighlight></big><br />
===Properties===<br />
int _row, holds the relative coordinate of top row of this border with respect to its container.<br /><br />
int _col, same as _row, but for _col. <br /><br />
int _height, height of the entity. <br /><br />
int _width, width of the entity. <br /><br />
char _border[9], characters used to draw the border: <br /><br />
: _border[0], left top<br />
: _border[1], top side<br />
: _border[2], right top<br />
: _border[3], right side<br />
: _border[4], right bottom<br />
: _border[5], bottom side<br />
: _border[6], bottom left<br />
: _border[7], left side<br />
bool _visible; Indicates if the border surrounding the entity is to be drawn or not. <br /><br />
CFrame* _frame; holds the container (another CFrame) which has opened this one (owner or container of the current CFrame). '''_frame''' will be NULL if this CFrame does not have a container, in which case, it will be full screen and no matter what the values of row, col, width and height are, CFrame will be '''Full Screen''' (no border will be drawn)<br /><br />
char* _covered; is a pointer to a character array that hold what was under this frame before being drawn. When the CFrame wants to hide itself, it simple copies the content of this array back on the screen on its own coordinates.<br />
<br />
===Methods and Constructors===<br />
====Private Methods====<br />
<big><syntaxhighlight lang="cpp"><br />
void capture(); <br />
</syntaxhighlight></big><br />
:if _covered pointer is not pointing to any allocated memory, it will call the iol_capture function to capture the area that is going to be covered by this frame and keeps its address in _covered.<br />
<br />
====Protected Methods====<br />
*int absRow()const; calculates the absolute row (relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''row()''' of this border plus all the '''row()'''s of the '''_frame'''s<br />
*int absCol()const; calculates the absolute column(relative to the left top corner of the screen) and returns it.<br />
*:it returns the sum of '''col()''' of this border plus all the '''col()'''s of the '''_frame'''s<br />
<br />
====Public Methods====<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CFrame(int Row=-1, int Col=-1, int Width=-1,int Height=-1,<br />
bool Visible = false,<br />
const char* Border=C_BORDER_CHARS,<br />
CFrame* Frame = (CFrame*)0);<br />
</syntaxhighlight></big> <br />
:Sets the corresponding attributes to the incoming values in the argument list and set _covered to null<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
* First it will '''capture()''' the coordinates it is supposed to cover<br />
* If frame is '''fullscreen()''' then it just clears the screen and exits. <br /><br />
<br />
Otherwise:<br /><br />
*If the _visible flag is true, it will draw a box at _row and _col, with size of _width and _height using the _border characters and fills it with spaces. Otherwise it will just draw a box using spaces at the same location and same size.<br />
<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void move(CDirection dir);<br />
</syntaxhighlight></big><br />
First it will hide the Frame, then adjust the row and col to move to the "dir" direction and then draws the Frame back on screen.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void hide();<br />
</syntaxhighlight></big><br />
using iol_restore()it restores the characters behind the Frame back on screen. It will also free the memory pointed by _covered; <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CFrame();<br />
</syntaxhighlight></big><br />
It will make sure allocated memories are freed.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool fullscreen()const;<br />
void visible(bool val);<br />
bool visible()const;<br />
void frame(CFrame* theContainer);<br />
CFrame* frame();<br />
void row(int val);<br />
int row()const;<br />
void col(int val);<br />
int col()const;<br />
void height(int val);<br />
int height()const;<br />
void width(int val);<br />
int width()const;<br />
</syntaxhighlight></big><br />
<br />
These functions set and get the attributes of the CFrame.<br />
===CFrame Student Resources===<br />
====CFrame Help/Questions Blogs====<br />
====CFrame Blog Posts====<br />
<br />
==CField==<br />
<br />
CField is an abstract base class that encapsulates the commonalities of all Input Outputs Console Fields which are placeable on a CDialog. All Fields could be Framed, therefore a CField is inherited from CFrame.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cframe.h"<br />
class CDialog;<br />
class CField : public CFrame{<br />
protected:<br />
void* _data;<br />
public:<br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CField();<br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
<br />
<br />
virtual void set(const void* data) = 0;<br />
virtual void* data()const; //<== check this, not sure<br />
<br />
void container(CDialog* theContainer);<br />
CDialog* container();<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void* _data;<br />
</syntaxhighlight></big><br />
Will hold the address of any type of data a CField can hold.<br />
===Constructors and Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CField(int Row = 0, int Col = 0,<br />
int Width = 0, int Height =0,<br />
void* Data = (void*) 0,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes the corresponding attributes to it's parents (CFrame) constructor and then sets the _data attribute to the incoming Data argument. Also using '''container(CDialog* theContainer)''' it set the container to NULL.<br />
<big><syntaxhighlight lang="cpp"><br />
~CField();<br />
</syntaxhighlight></big><br />
Empty Destructor<br />
<big><syntaxhighlight lang="cpp"><br />
virtual int edit() = 0;<br />
virtual bool editable() const = 0;<br />
virtual void set(const void* data) = 0;<br />
</syntaxhighlight></big><br />
Pure virtual methods to enforce the children to implement;<br />
* an edit() method<br />
* an editable() method that returns true if the class is to edit data and false if the class is to only display data.<br />
* a set() method to set the _data attribute to the data the class is to work with.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual void* data() const; <--- Check this not sure....<br />
</syntaxhighlight></big><br />
Returns _data.<br />
<big><syntaxhighlight lang="cpp"><br />
void container(CDialog* theContainer);<br />
</syntaxhighlight></big><br />
Casts '''"theContainer"''' to a CFrame pointer and passes it to CFrame::frame(CFrame*) method; (to set the frame of CDialog)<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog* container();<br />
</syntaxhighlight></big><br />
Casts the return value of CFrame::frame() to a CDialog pointer and returns it.<br />
===CField Student Resources===<br />
====CField Help/Questions Blogs====<br />
====CField Blog Posts====<br />
<br />
==CLabel==<br />
A readonly Field that encapsulates console.display() function. (i.e it is responsible to display a short character string on the display) CLabel although, by inheritance is Frame, but it is never '''bordered'''.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
class CLabel : public CField{<br />
// for length of the field:<br />
// Use void CFrame::width(int) to store length, and int CFrame::width() to retrieve the length<br />
<br />
public:<br />
CLabel(const CLabel& L);<br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
CLabel(int Row, int Col, int Len);<br />
~CLabel();<br />
void draw(int fn=C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
</syntaxhighlight></big><br />
===Attributes===<br />
No attributes, (use Cframe attributes)<br />
<br />
===Constructors / Destructor ===<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const char *Str, int Row, int Col,<br />
int Len = 0);<br />
</syntaxhighlight></big><br />
passes the Row and Col to the CField constructor and then;<br />
if len is zero, it will allocate enough memory to store the string pointed by Str and then copies the Str into it.<br />
if len > 0, then it will allocate enough memory to store '''len''' chars, copying only len characters of str.<br />
In any way, the allocated memory is pointed by '''_data'''. Also it will set the width to the length of the memory allocated.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(int Row, int Col, int Len);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor, but len in this case can not be zero. (no validation required) and the string pointed by _data will be set to an empty string.<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel(const CLabel& L);<br />
</syntaxhighlight></big><br />
Copies a CLabel safely to guaranty there is no memory leak.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLabel();<br />
</syntaxhighlight></big><br />
makes sure that memory pointed by _data is deallocated before the object is destroyed.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
makes a direct call to console.strdsp(), passing '''_data''' for the string to be printed and absRow() and absCol() for row and col and _length for len.<br />
this function ignores the argument fn.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
calls draw, returning 0.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always return false.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
if width() is greater than zero, it will copy the string pointed by str into the string pointed by _data upto width characters.<br />
if width() is zero,<br /> It will delete the memory pointed by _data and reallocates enough memory for str and copies the string pointed by str into the newly allocated memory pointed by _data.<br />
<br />
===CLabel Student Resources===<br />
====CLabel Help/Questions Blogs====<br />
====CLabel Blog Posts====<br />
<br />
==CDialog==<br />
Organizes CField objects on the screen, displays them and then lets the user edit them one by one. <br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cuigh.h"<br />
#include "cframe.h"<br />
namespace cui{<br />
class CField;<br />
class CDialog: public CFrame{<br />
private:<br />
int _fnum;<br />
int _curidx;<br />
CField** _fld;<br />
bool* _dyn;<br />
bool _editable;<br />
unsigned int _fldSize;<br />
public:<br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CDialog();<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit(int fn = C_FULL_FRAME);<br />
<br />
int add(CField* field, bool dynamic = true);<br />
int add(CField& field, bool dynamic = false);<br />
CDialog& operator<<(CField* field);<br />
CDialog& operator<<(CField& field);<br />
<br />
bool editable();<br />
int fieldNum()const;<br />
int curIndex()const;<br />
<br />
CField& operator[](unsigned int index);<br />
CField& curField();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _fnum; <br />
</syntaxhighlight></big><br />
Holds the number of Fields added to the Dialog<br />
<big><syntaxhighlight lang="cpp"><br />
bool _editable;<br />
</syntaxhighlight></big><br />
will be set to true if any of the Fields added are editable. <br />
This is optional because it depends on how you are going to implement the collection of CFields:<br />
<big><syntaxhighlight lang="cpp"><br />
int _curidx;<br />
</syntaxhighlight></big><br />
Holds the index of the Field that is currently being edited.<br />
<big><syntaxhighlight lang="cpp"><br />
CField** _fld;<br />
</syntaxhighlight></big><br />
Dynamic array of CField pointers to hold the address of the CField objects added to the screen. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br />
<big><syntaxhighlight lang="cpp"><br />
bool* _dyn;<br />
</syntaxhighlight></big><br />
A dynamic bool array that holds series of booleans to the exact number of fields, and each boolean here will hold false if the corresponding field pointed by _fld is allocated dynamically or not. The initial size of the array allocation is defined in '''''cuigh.h''''' under C_INITIAL_NO_FIELDS. <br /> <br />
This array will later on be used by destructor to decide which object is dynamic and to be deleted.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _fldSize; <br />
</syntaxhighlight></big><br />
Holds the current length of '''''_fld''''' and '''''_dyn'''''. <br />When adding a field to dialog if '''_fnum''' reaches '''_fldSize''', then the size of '''_fld''' and '''_dyn''' is expanded by '''''C_DIALOG_EXPANSION_SIZE''''', defined in '''cuigh.h'''<br />
<br />
===Constructors/Destructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog(CFrame *Container = (CFrame*)0,<br />
int Row = -1, int Col = -1, <br />
int Width = -1, int Height = -1, <br />
bool Borderd = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
The constructor passes all the incoming arguments to the corresponding arguments of the apparent constructor '''CFrame'''.<br /><br />
Then it will set all called attributes to their default values and then sets all the field pointers (_fld) to NULL.<br />
It also sets all the dynamic (_dyn) flags to false. <br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CDialog();<br />
</syntaxhighlight></big><br />
The destructor will loop through all the field pointers and if the corresponding dynamic flag is true then it will delete the field pointed to by the field pointer.<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''fn''' is '''C_FULL_FRAME''', it will call its parent draw. Then It will draw all the '''Fields''' in the '''Dialog'''. <br /><br />
If '''fn''' is Zero, then it will just draw all the '''Fields''' in the '''Dialog'''.<br /><br />
If '''fn''' is a non-zero positive value, then it will only draw '''Field''' number '''fn''' in the dialog. (First added '''Field''' is field number one.)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
If '''CDialog''' is not editable (all fields are non-editable), it will just display the Dialog and then waits for the user to enter a key and then terminates the function returning the key.<br /><br />
If fn is '''0''' or less, then before editing, the draw method is called with '''fn''' as its argument and then editing begins from the first editable Field.<br />
<br />
If fn is greater than '''0''' then editing begins from the first editable key on or after Field number '''fn'''.<br />
<br />
Note that fn is the sequence number of field and not the index. (First field number is one)<br />
<br />
Start editing from field number '''fn''';<br />
<br />
Call the edit of each field and depending on the value returned, do the following:<br /><br />
# For '''ENTER_KEY''', '''TAB_KEY''' and '''DOWN_KEY''', go to next editable Field , if this is the last editable Field then restart from Field number one.<br />
# For '''UP_KEY''' go to the previous editable Field, if there is no previous editable Field, go to the last editable Field in the Dialog.<br />
# For any other key, terminate the edit function returning the character which caused the termination.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField* field, bool dynamic = true);<br />
</syntaxhighlight></big><br />
First, this function will check the value of _fnum. If '''_fnum''' has reached '''_fldSize''', ('''_fld''' and '''_dyn''' arrays are full) it will expand '''_fld''' and '''_dyn''' by '''C_DIALOG_EXPANSION_SIZE''' (defined in '''cuigh.h''') to make room for more '''CField'''.<br /><br />
Then, it adds the CField pointed by '''field''' to the Fields of the Dialog; by appending the value of the field pointer after the last added ''field'' in the _fld array , setting the corresponding _dyn element to the value of dynamic argument and then increasing _fnum by one and returning the index of added Field in the CDialog object.<br /><br />
'''important note:'''<br /><br />
Make sure that add() sets the container of the added CField to this CDialog object, using the container() method of CField<br /><br />
Also make sure, if size of _fld and _dyn are expanded, then _fldSize is also increased.<br />
<big><syntaxhighlight lang="cpp"><br />
int add(CField& field, bool dynamic = false);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method.<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField* field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the first add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<big><syntaxhighlight lang="cpp"><br />
CDialog& operator<<(CField& field);<br />
</syntaxhighlight></big><br />
Makes a direct call to the second add method, ignoring the second argument and then returns the owner (current CDialog).<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable();<br />
</syntaxhighlight></big><br />
Returns '''_editable''';<br />
<big><syntaxhighlight lang="cpp"><br />
int fieldNum()const;<br />
</syntaxhighlight></big><br />
returns '''_fnum'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int curIndex()const;<br />
</syntaxhighlight></big><br />
returns '''_curidx''';<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CField& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
Returns the reference of the Field with incoming index. (Note that here, the first field index is '''0''')<br />
<big><syntaxhighlight lang="cpp"><br />
CField& curField();<br />
</syntaxhighlight></big><br />
Returns the reference of the Field that was just being edited.<br />
<br />
===CDialog Student Resources===<br />
====CDialog Help/Questions Blogs====<br />
<br />
====CDialog Blog Posts====<br />
<br />
==CLineEdit==<br />
'''ClineEdit''' encapsulates the console.edit() function of Console class.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
namespace cui{<br />
class CLineEdit: public CField{<br />
bool _dyn;<br />
int _maxdatalen;<br />
bool* _insertmode;<br />
int _curpos;<br />
int _offset;<br />
public:<br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
~CLineEdit();<br />
void draw(int Refresh = C_FULL_FRAME);<br />
<br />
int edit();<br />
bool editable()const;<br />
<br />
void set(const void* Str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _dyn;<br />
</syntaxhighlight></big><br />
_dyn is set to true if the object dynamically allocated memory and is responsible to free it at destruction time.<br />
<big><syntaxhighlight lang="cpp"><br />
int _maxdatalen;<br />
</syntaxhighlight></big><br />
no comment!<br />
<big><syntaxhighlight lang="cpp"><br />
bool* _insertmode;<br />
</syntaxhighlight></big><br />
points to the location of input method (insert or overstrike)<br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
</syntaxhighlight></big><br />
current position of cursor<br />
<big><syntaxhighlight lang="cpp"><br />
int _offset;<br />
</syntaxhighlight></big><br />
current offset<br />
<br />
===Constructors / Destructor=== <br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
<br />
LineEdit, sets the Field's _data to the value of str. If LineEdit is instantiated with this constructor then it will edit an external string provided by the caller function of LineEdit. LineEdit in this case is not creating any dynamic memory, therefore _dyn is set to false (therefore the destructor will not attempt to deallocate the memory pointed by _data).<br /><br />
The location (row and col) and Bordered are directly passed to the parent (CField) and str is passed as data to the parent constructor. Unlike Label, LineEdit could have border or not so depending on this (Bordered being true or false) the Height is set to 3 or 1 respectfully. <br /><br />
(hint: use '''? :''' operator to pass the proper Height value to CField's constructor)<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CLineEdit(int Row, int Col, int Width,<br />
int Maxdatalen, int* Insertmode, <br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor with one difference; since no external data is passed to be edited here, this constructor must allocate enough dynamic memory to accommodate editing of '''Maxdatalen''' characters. Then make it an empty string and set Fields's _data to point to it. Make sure _dyn is set to true in this case, so the destructor knows that it has to deallocate the memory at the end.<br />
<big><syntaxhighlight lang="cpp"><br />
~CLineEdit();<br />
</syntaxhighlight></big><br />
If '''_dyn''' is true, it will deallocate the character array pointed by Fields's '''_data'''<br />
<br />
===Methods===<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int Refresh = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
It will first call Frame's draw passing '''Refresh''' as an argument to it.<br /><br />
Then it will make a direct call to console.display() to show the data kept in Field's '''_data'''.<br /><br />
The values used for the arguments of console.display() are:<br />
*str: address of string pointed by _data + the value of _offset<br />
*row: absRow() (''add one if border is visible'')<br />
*col: absCol() (''add one if border is visible'')<br />
*len: width() (''reduce by two if border is visible''')<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Makes a direct call to, and returns '''console.edit()'''.<br />
For the coordinates and width arguments follow the same rules as the draw function.<br />
For the rest of the arguments of console.edit(), use the attributes of '''CLineEdit'''.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Str);<br />
</syntaxhighlight></big><br />
Copies the characters pointed by '''Str''' into the memory pointed by Field's '''_data''' up to '''_maxdatalen''' characters.<br />
===CLineEdit Student Resources===<br />
====CLineEdit Help/Questions Blogs====<br />
<br />
====CLineEdit Blog Posts====<br />
==CButton==<br />
Button is a child of CField.<br />
It displays a small piece of text (usually one word or two) and accepts one key hit entry.<br />
When in edit mode, to indicate the editing mode, it will surround the text with squared brackets.<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
namespace cui{<br />
class CButton: public CField{<br />
<br />
public:<br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
virtual ~CButton();<br />
void draw(int rn=C_FULL_FRAME);<br />
int edit();<br />
bool editable()const;<br />
void set(const void* str);<br />
};<br />
}<br />
</syntaxhighlight></big><br />
<br />
===Attributes===<br />
This class does not have any attributes of its own!<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CButton(const char *Str, int Row, int Col, <br />
bool Bordered = true,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
When creating a Button, allocate enough memory to hold the contents of the '''Str''' and set Field's _data to point to it. Then copy the content of '''Str''' into the newly allocated memory.<br /><br />
Pass all the arguments directly to Field's constructor.<br /><br />
For Field size (width and hight) do the following:<br /><br />
For width: Set width to the length of '''Str''' + 2 (adding 2 for surrounding brackets) or if the Button is bordered set width to the length of '''Str''' + 4 (adding 2 for surrounding brackets and 2 for the borders).<br />
For height: Set the height to 1 or if the Button is bordered, set the height to 3.<br />
<big><syntaxhighlight lang="cpp"><br />
virtual ~CButton();<br />
</syntaxhighlight></big><br />
Deallocates the allocated memory pointed by Field's '''_data'''.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn=C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the Button with border around it if it is Bordered. Note that there should be a space before and after of the text that will be used to surround the text with "[" and "]"<br /><br />
hint:<br /><br />
:*First calls Frame's draw(fn) (passing the fn argument to the parents draw)<br />
<br />
:Use console.display() to display the Button's text (pointed by Field's _data)<br />
:*If not bordered<br />
:*:display the text at absRow() and absCol()<br />
:*If bordered<br />
:*:display the text at absRow()+1 and absCol()+2<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
First draw() the Button, then surround it by squared brackets, place the cursor under the first character of Button's text and wait for user entry.<br /><br />
When user hits a key, if the key is ENTER_KEY or SPACE, return C_BUTTON_HIT (defined in cuigh.h) otherwise return the entered key.<br /><br />
<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* str);<br />
</syntaxhighlight></big><br />
First deallocated what is pointed by Field's _data.<br />
Then allocate new memory to the size of content of str and copy the content into it and make<br />
Field's _data point to it.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always returns true<br />
<br />
===CButton Student Resources===<br />
====CButton Help/Questions Blogs====<br />
[http://pankajsama01.blogspot.ca/2013/03/cbuttonhit-key.html C_BUTTON_HIT Key] is not defined(Pankaj Sama)<br />
** It is defined in the new cuigh.h file. It is defined #define C_BUTTON_HIT 1. Gary Chen<br />
<br />
====CButton Blog Posts====<br />
==CValEdit==<br />
This class works exactly like CLineEdit and improves it by adding two features; Validation and Help. CValEdit is capable of validating the user input on exit and also provide help when CValEdit::edit() is active by invoking a '''"help"''' method before and after editing. If these two functions, (Validation and Help) are not provided, then CValEdit literally works like CLineEdit.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clineedit.h"<br />
<br />
namespace cui{<br />
class CValEdit: public CLineEdit{<br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
public:<br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
int edit();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
void (*_help)(MessageStatus, CDialog&);<br />
bool (*_validate)(const char*, CDialog&);<br />
</syntaxhighlight></big><br />
*_help, holds the address of the help logic (function) or NULL if there is no help function is assigned <br />
*_validate, holds the address of the validation logic (function) or NULL if there is no validation function is assgned<br />
<br />
===Constructors===<br />
<big><syntaxhighlight lang="cpp"><br />
CValEdit(char* Str, int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
CValEdit(int Row, int Col, int Width,<br />
int Maxdatalen, bool* Insertmode,<br />
bool (*Validate)(const char* , CDialog&) = NO_VALDFUNC, <br />
void (*Help)(MessageStatus, CDialog&) = NO_HELPFUNC,<br />
bool Bordered = false,<br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
These constructors pass all their arguments to corresponding arguments of CLineEdit constructor and then set '''_help''' and '''_validate''' attributes to the corresponding incoming arguments<br />
<br />
===Method===<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
If the container() is NULL then this function works exactly like LineEdit::edit().<br /><br />
If the container() is not NULL:<br />
#If _help function exist, it calls the function passing MessageStatus::SetMessage and container()'s reference as arguments.<br />
#Calls CLineEdit's edit()<br />
#If validation function exists, and the terminating key of CLineEdit's edit() is a navigation key(see below)<br />
#:It will call the validation function on the Field's _data, if the data is valid, it goes to next step, otherwise it will repeat calling CLineEdit's edit().<br />
#After validation is done, if _help function exists, it will recall the help function using MessageStatus::ClearMessage and contianer()'s reference as arguments.<br />
#It will return the terminating key<br />
<br />
''Navigation keys are Up key, Down key, Tab key or Enter key.''<br /><br />
''MessageStatus is enumerated in '''cuigh.h'''''<br />
===CValedit Student Resources===<br />
====CValEdit Help/Questions Blogs====<br />
====CValedit Blog Posts====<br />
<br />
==CCheckMark==<br />
Creates a single CheckMark on the screen and allows the user to:<br /><br />
# Toggle it, if it is set to be a CheckMark for a Check List.<br />
# Only check it when its unchecked, if it is set to be a CheckMark for a Radio Button List.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "cfield.h"<br />
#include "clabel.h"<br />
namespace cui{<br />
class CCheckMark : public CField{<br />
bool _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
public:<br />
CCheckMark(bool Checked,const char* Format, const char* Text,<br />
int Row, int Col, int Width, bool IsRadio = false);<br />
CCheckMark(const CCheckMark& C);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* flag);<br />
bool checked()const;<br />
void checked(bool val);<br />
bool radio(); <br />
void radio(bool isRadio);<br />
operator bool(); <br />
operator char*(); <br />
bool operator=(bool flag);<br />
};<br />
}<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
int _flag;<br />
bool _radio;<br />
char _format[4];<br />
CLabel _Label;<br />
</syntaxhighlight></big><br />
*'''_flag''' holds the status of the Checkbox (0: unchecked or 1: checked ) and is pointed by _data pointer .<br />
*'''_radio''' dictates the behavior of the Checkbox as a radio-button, or a check-mark.<br />
*'''_format''' holds the characters, the Checkbox is drawn with (i.e. "[X]", "(O)", "<*>", etc...).<br />
*'''_Label''' holds the Label attached to the this Checkbox<br />
<br />
===Constructor / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(bool Checked,const char* Format, const char* Text, int Row, int Col, int Width, bool IsRadio = false);<br />
</syntaxhighlight></big><br />
*Passes the ''Row, Col, Width and "1"'' to ''row, col, width and height'' arguments of CField and directly initializes _Label with ''Text, 0, 4, and (Width-4)'' for ''Str, Row, Col and Len'', arguments of CLabel's Constructor.<br /><br />
<br />
*Sets the frame of _Label to its owner (Checkmark i.e. 'this');<br />
*Sets _flag to Checked<br />
*Sets _radio to IsRadio<br />
*Copies Format to _format<br />
*Sets _data to the address of _flag<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark(const CCheckMark& C);<br />
</syntaxhighlight></big><br />
*Passes incoming CCheckMark reference ("C") to CField's copy constructor, and directly initializes the _Label with the _Label of C<br />
*Sets all the attributes of this object to the attributes of incoming CCheckMark reference ("C")<br />
*Sets _data to the address of _flag<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
Using Console methods:<br /><br />
#displays the _format string at absRow() and absCol()<br />
#if _flag is false, it will overwrite the second character printed above, with a space (removes the check mark on console)<br />
#draw()s the _Label<br />
#sets the position of the cursor at the checkmark (second character of printed _format)<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the checkmark<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##if _radio is true, it will set the _flag to true<br />
##if _radio is false, it will flip the value of _flag. <br />
##draw()s the checkmark again<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
*Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* flag);<br />
</syntaxhighlight></big><br />
*Casts the incoming flag pointer to an (bool*) and sets the content of '''_flag''' to where '''flag''' is pointing to.<br />
<big><syntaxhighlight lang="cpp"><br />
bool checked()const;<br />
void checked(bool val);<br />
</syntaxhighlight></big><br />
*These methods set and get _flag.<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio(); // addition for R0.6<br />
void radio(bool isRadio); // addition for R0.6<br />
</syntaxhighlight></big><br />
* These to methods, get and set the '''_radio''' attribute.<br />
<big><syntaxhighlight lang="cpp"><br />
operator bool(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''bool''' cast to return the value of '''_flag'''<br />
<big><syntaxhighlight lang="cpp"><br />
operator char*(); // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the '''char*''' cast to return the value of '''_Label.data()'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool operator=(bool flag);; // addtion for R0.6<br />
</syntaxhighlight></big><br />
* Overload the operator= and set the _flag to flag<br />
<br />
===CCheckMark Student Resources===<br />
====CCheckMark Help/Questions Blogs====<br />
<br />
<br />
Hey Guys, In the constructor for CCheckmark it says : set the frame of _Label to its owner<br />
(checkmark i.e, "this")<br />
Can anyone tell me what this means or what the purpose of this is. Thanks in advance.<br />
<br />
Use this with caution since I don't really know if it is correct, but I did<br />
'''Label.container(this->container());'''<br />
<br />
-Bo Li<br />
<br />
http://lhmcintosh.blogspot.ca/2013/03/this.html Hope this helps! - LMC<br />
<br />
Please help - http://oop344class.wordpress.com/2013/03/29/setting-cursor-position-in-ccheckmark-draw-function/<br />
<br />
-S.E.<br />
<br />
====CCheckMark Blog Posts====<br />
<br />
==CMenuItem==<br />
CMenuItem provides a Label that can be marked as selected by pressing the space bar.<br />
<big><syntaxhighlight lang="cpp"><br />
#include "clabel.h"<br />
#include "cfield.h"<br />
namespace cui{<br />
class CMenuItem:public CField{<br />
bool _selected;<br />
char _format[3];<br />
CLabel Label;<br />
public:<br />
CMenuItem(bool Selected,const char* Format, const char* Text,<br />
int Row, int Col, int Width);<br />
CMenuItem(const CMenuItem &CM);<br />
void draw(int fn = C_NO_FRAME) ;<br />
int edit();<br />
bool editable()const;<br />
void set(const void* Selected);<br />
bool selected()const;<br />
void selected(bool val);<br />
const char* Text();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
bool _selected;<br />
</syntaxhighlight></big><br />
Holds the status of the MenuItem, being selected or not;<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
Holds the surrounding characters with which a selected MenuItem is shown:<br /><br />
If _format holds "[]", then a selected MenuItem will be like [MenuText]<br />
<big><syntaxhighlight lang="cpp"><br />
CLabel Label;<br />
</syntaxhighlight></big><br />
Hold the Text of the MenuItem.<br />
<br />
===Constructors / Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(bool Selected,const char* Format, const char* Text, int Row, int Col, int Width);<br />
</syntaxhighlight></big><br />
#Initializes the CField with Row, Col, Width and 1 for Height<br />
#Initializes the Label with (Text, 0, 1 and Width-2) for (Str, Row, Col, and Len)<br />
#Sets the attributes to corresponding arguments<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object. <br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem(const CMenuItem &CM);<br />
</syntaxhighlight></big><br />
#Passes CM to CField and Initializes the Label with CM<br />
#Sets the _selected to _selected of CM<br />
#Sets CFields::_data to the address of _format<br />
#Sets the Label's frame to this object.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_NO_FRAME) ;<br />
</syntaxhighlight></big><br />
#Draws the Label with fn <br />
#If _selected is true, it surrounds the Label Text the _format[0] and _format[1]<br />
#If _selected if false, it surrounds the Label with SPACEs (overwrites _format[0] and _format[1])<br />
#Positions the cursor at the first character of the Label<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
#draw()s the MenuItem<br />
#gets a key<br />
#: the key must be either SPACE or any non-printable character (all printable character are ignored)<br />
#if the entered key is space<br />
##it will set the _selected to true<br />
##draw()s the MenuItem again<br />
#returns the key<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Returns true.<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* Selected);<br />
</syntaxhighlight></big><br />
Sets _selected to where Selected is pointing to<br />
<big><syntaxhighlight lang="cpp"><br />
bool selected()const;<br />
</syntaxhighlight></big><br />
Returns Selected<br />
<big><syntaxhighlight lang="cpp"><br />
void selected(bool val);<br />
</syntaxhighlight></big><br />
Sets _selected to val<br />
<big><syntaxhighlight lang="cpp"><br />
const char* Text();<br />
</syntaxhighlight></big><br />
Returns the text of Label<br />
<br />
===CMenuItem Student Resources===<br />
====CMenuItem Help/Questions Blogs====<br />
<br />
====CMenuItem Blog Posts====<br />
<br />
==CText==<br />
CText is a CField to edit a multiline text.<br /><br />
To do this, it will use the [[#The_Text_Helper_Class|Text class]] to convert a character string containing a text into a (simulated) two dimensional array. <br />
<big><syntaxhighlight lang="cpp"><br />
<br />
#pragma once<br />
#include "cfield.h"<br />
#include "text.h"<br />
<br />
using namespace cui;<br />
<br />
<br />
class CText:public CField{<br />
Text _T;<br />
bool _displayOnly;<br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
int _lcurpos;<br />
int _loffset;<br />
public:<br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
void draw(int fn = C_FULL_FRAME);<br />
<br />
void set(const void *Str);<br />
void *data()const;<br />
<br />
int edit();<br />
bool editable()const;<br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
};<br />
<br />
<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
Text _T;<br />
</syntaxhighlight></big><br />
An instance of the [[#The_Text_Helper_Class|Text class]]<br />
<big><syntaxhighlight lang="cpp"><br />
bool _displayOnly;<br />
</syntaxhighlight></big><br />
If it is set to true, then the Text can only be viewed but not edited; All scrolling, page UP, DOWN, etc... is enabled but any attempt to change the text, is ignored quietly. This attribute is passed to ReadOnly argument of Console::edit(......). <br />
<big><syntaxhighlight lang="cpp"><br />
int _curpos;<br />
bool* _insertmode;<br />
int _offset;<br />
</syntaxhighlight></big><br />
Values used by Console::edit(......)<br />
<big><syntaxhighlight lang="cpp"><br />
int _lcurpos;<br />
int _loffset;<br />
</syntaxhighlight></big><br />
Vertical cursor position in text.<br />
Vertical offset of the text relative to the frame of CText. This value indicates, how many line are hidden above the frame when text is scrolled down.<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CText(int Row, int Col, int Width, int Height, bool* Insertmode, <br />
bool displayOnly = false, const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Initialized the CField with the corresponding incoming arguments and then sets all the attributes to their corresponding arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
CText(const char* Str, int Row, int Col, int Width, int Height,<br />
bool* Insertmode, bool displayOnly = false, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Works exactly like the previous constructor but it also '''set()'''s the class to '''Str'''.<br />
<br />
===Methods=== <br />
'''Under Construction'''<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
First it will draw the CField using the fn arguement.<br /><br />
Then it will use console.display to display all the Lines of _T that are positioned inside the frame of the CText. (i.e. from _loffset to _loffset + Height() - 2).<br /><br />
Two Important things to note:<br />
# you should note that '''Lines''' are '''console.display()'''ed from _offset character. (i.e. &_T[theLineNumber][_offset]).<br />
# Also you should '''console.display()''' the Lines only if the length of the line is more than the _offset(i.e. _T[theLineNumver].strlen() > _offset)<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void *Str);<br />
</syntaxhighlight></big><br />
Sets the '''_T''' attribute to the incoming string.<br />
<big><syntaxhighlight lang="cpp"><br />
void *data()const;<br />
</syntaxhighlight></big><br />
Exports the string out of _T and returns its address after casting it to '''void*'''.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
# Create local variables to hold the following attributes in case ESCAPE is hit to undo:<br />
## _T<br />
## _curpos<br />
## _offset<br />
## _lcurpos<br />
## _loffset<br />
# Create the usual '''while(!done)''' structure for interfacing with user<br />
# '''draw()''' the text<br />
# '''console.edit()''' the Line at where vertical cursor is after _loffset.<br />
## use absRow() and _lcurpos to calculate the row on which the editing should happen<br />
## use absCol() to calculate the column on which editing to happen.<br />
## use width() to calculate the fieldLen for '''console.edit()'''<br />
## use the '''size()''' of the current '''Line''' in '''_T''' to determine the maximum data length of the string to '''console.edit()'''<br />
## the isTextEditor is always true<br />
## the ReadOnly depends on the value of '''_displayOnly'''<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
Always return true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool displayOnly();<br />
void displayOnly(bool val);<br />
</syntaxhighlight></big><br />
These methods Get and Set the '''_displayOnly''' attribute.<br />
<br />
===The Text Helper Class===<br />
[https://github.com/Seneca-OOP344/20131-notes/tree/master/TextClass Text class]<br />
<br />
===CText Student Resources===<br />
====CText Help/Questions Blogs====<br />
====CText Blog Posts====<br />
<br />
==CCheckList==<br />
<big><syntaxhighlight lang="cpp"><br />
#pragma once<br />
#include "cfield.h"<br />
#include "ccheckmark.h"<br />
namespace cui{<br />
<br />
class CCheckList : public CField{<br />
CCheckMark* _checkmarks[32];<br />
bool _radio;<br />
char _format[4];<br />
unsigned int _cnt;<br />
unsigned int _flags;<br />
unsigned int _cur;<br />
public:<br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
~CCheckList(void);<br />
CCheckList& add(const char* Text, bool selected = false);<br />
CCheckList& operator<<(const char* Text);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void* data();<br />
void set(const void* data);<br />
CCheckMark& operator[](unsigned int index);<br />
bool editable()const;<br />
bool radio()const;<br />
void radio(bool val);<br />
unsigned int flags()const;<br />
void flags(unsigned int theFlags);<br />
int selectedIndex()const;<br />
void selectedIndex(int index);<br />
unsigned int length();<br />
};<br />
}<br />
</syntaxhighlight></big><br />
===Attributes===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark* _checkmarks[32];<br />
</syntaxhighlight></big><br />
An array of 32 CCheckmark pointers that will point to _cnt dynamically allocated CCheckMarks.<br />
<big><syntaxhighlight lang="cpp"><br />
bool _radio;<br />
</syntaxhighlight></big><br />
Holds the behaviour of the CCheckList to be like a Radio Button List or Check Mark List<br />
<big><syntaxhighlight lang="cpp"><br />
char _format[4];<br />
</syntaxhighlight></big><br />
Holds the format with which a check mark is displayed (i.e. "[X]" or "(o)" etc...)<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
Holds the number of CCheckMarks currently in CCheckList<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _flags;<br />
</syntaxhighlight></big><br />
Always holds the bit pattern corresponding to the status of the CCheckMarks in the List. Note that bit 0 (right most) will correspond to the first CCheckMark.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _cur;<br />
</syntaxhighlight></big><br />
Holds the index of the CCheckMark in the "_checkmarks" array which is currently being edited. (focused)<br />
<br />
===Constructors/Destructor===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList(const char* Format, int Row, int Col, int Width,bool radio, bool Bordered = true,const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
Passes corresponding values to the Base class (CField) then <br />
#sets the _data attribute to the address of _flags<br />
#copies '''Format''' and '''radio''' into '''_format''' and '''_radio''' respectively <br />
#sets '''_cnt, _cur''' and '''_flags''' to zero<br />
<big><syntaxhighlight lang="cpp"><br />
~CCheckList(void);<br />
</syntaxhighlight></big><br />
Goes through '''_checkmarks''' up to '''_cnt''' and if deletes them one by one.<br />
<br />
===Methods===<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
* Only adds a new CCheckMark if '''_cnt''' does not exceed the maximum amount of '''_checkmarks''' (32)<br />
* Creates a new CCheckMark with the row being '''_cnt'''+1, the height being 1 and the length being the length of '''Text'''+4<br />
* Sets the newly created CCheckMarks' frame to '''this'''<br />
* Automatically expands the width of the CCheckList if the width of the newly created CCheckMark is bigger than the current width of the CCheckList<br />
* Sets the height of the CCheckList to '''_cnt'''+3<br />
* Updates the bit pattern of '''_flags'''<br />
* Increments '''_cnt'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckList& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text).<br />
<big><syntaxhighlight lang="cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
Draws the frame and then draws all the '''_checkmarks''', making sure the cursor is standing under the first checked checkmark.<br />
<big><syntaxhighlight lang="cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
*Draws the '''CCheckList''' then starts editing the '''_checkmarks''' form '''_cur''' and according to the return key of CCheckMark::edit():<br />
**If Down or Right key is hit it goes to the next '''_checkmark''', if '''_cur''' is the last one, then it exits the edit, returning the last key entered.<br />
**UP and Left key works in opposite direction of Down and Right, if '''_cur''' is already zero, then it exits the edit, returning the last key entered.<br />
**If Space is hit, then if '''_radio''' is true, it will uncheck all the '''_checkmarks''' other than the '''_cur'''rent one.<br />
<big><syntaxhighlight lang="cpp"><br />
void* data();<br />
</syntaxhighlight></big><br />
returns the bit pattern held in _flags. <br /><br />
''make sure _flags are updated to the status of the '''_checkmarks'''''<br />
<big><syntaxhighlight lang="cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' and updates the '''_checkmarks''' to the bitpattern of '''_flags'''<br />
<big><syntaxhighlight lang="cpp"><br />
CCheckMark& operator[](unsigned int index);<br />
</syntaxhighlight></big><br />
returns the CCheckMark corresponding the '''index''' value.<br />
<big><syntaxhighlight lang="cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
always returns true;<br />
<big><syntaxhighlight lang="cpp"><br />
bool radio()const;<br />
</syntaxhighlight></big><br />
returns '''_radio'''<br />
<big><syntaxhighlight lang="cpp"><br />
void radio(bool val);<br />
</syntaxhighlight></big><br />
sets the _radio and updates all _checkMarks radio value.<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int flags()const;<br />
</syntaxhighlight></big><br />
returns the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
void flags(unsigned int theFlags);<br />
</syntaxhighlight></big><br />
sets the '''_flags''' attribute<br />
<big><syntaxhighlight lang="cpp"><br />
int selectedIndex()const;<br />
</syntaxhighlight></big><br />
returns the index of the first CCheckMark that is selected, and -1 if nothing is selected.<br />
<big><syntaxhighlight lang="cpp"><br />
void selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selectedindex. (only un-selects the rest if object is in radio mode)<br /><br />
if index is less than zero, then it will un-selects all<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int length();<br />
</syntaxhighlight></big><br />
returns '''_cnt'''<br />
<br />
===CCheckList Student Resources===<br />
====CCheckList Help/Questions Blogs====<br />
<br />
If you copied the header (''cchecklist.h'') from the ''20132notes'' repository, make sure to remove the const keyword after the ''void* data()'' function, since it is not.<br />
<br />
====CCheckList Blog Posts====<br />
<br />
==CMenu and MNode (optional)==<br />
CMenu is a linked list of MNodes. Providing menu selection for the user in two formats; Drop Down List, or a simple menu.<br />
<br />
<big><syntaxhighlight lang="cpp"><br />
#ifndef __CUI__CMENU_H__<br />
#define __CUI__CMENU_H__<br />
#include "cuigh.h"<br />
#include "cfield.h"<br />
#include "cmenuitem.h"<br />
#include "cbutton.h"<br />
namespace cui{<br />
class Cmenu;<br />
<br />
class MNode{<br />
CMenuItem* _item;<br />
MNode* _next;<br />
MNode* _prev;<br />
unsigned int _index;<br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
~MNode(void);<br />
friend class CMenu;<br />
};<br />
<br />
class CMenu : public CField{<br />
MNode* _first;<br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
char _format[3];<br />
unsigned int _cnt;<br />
int _selectedIndex;<br />
bool _dropdown;<br />
bool _dropped;<br />
bool goNext();<br />
bool goPrev();<br />
CButton _Title;<br />
public:<br />
static const bool Select;<br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
CMenu& add(const char* Text, bool selected = false);<br />
CMenu& operator<<(const char* Text);<br />
CMenu& operator<<(bool select);<br />
void draw(int fn = C_FULL_FRAME);<br />
int edit();<br />
void set(const void* data);<br />
int selectedIndex() const;<br />
int selectedIndex(int index);<br />
const char* selectedText();<br />
bool editable()const;<br />
~CMenu(void);<br />
};<br />
extern const bool Select;<br />
}<br />
<br />
#endif<br />
</syntaxhighlight></big><br />
===MNode===<br />
MNode holds information about an Item in the menu:<br />
# The CMenuItem object<br />
# The index of this Item<br />
MNode is a fully private class and is only accessible by CMenu.<br />
====Attributes====<br />
<big><syntaxhighlight lang="cpp"><br />
CMenuItem* _item;<br />
</syntaxhighlight></big><br />
Holds the address of a dynamically allocated CMenuItem<br />
<big><syntaxhighlight lang="cpp"><br />
unsigned int _index;<br />
</syntaxhighlight></big><br />
Holds the index (sequence -1) number of the '''CMenuItem''' in the '''CMenu'''.<br />
<big><syntaxhighlight lang="cpp"><br />
MNode* _next;<br />
MNode* _prev;<br />
</syntaxhighlight></big><br />
Standard next and previous pointer for a linked list node.<br />
<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang="cpp"><br />
MNode(CMenuItem* item,unsigned int index, MNode* prev, MNode* next = ((MNode*)0));<br />
</syntaxhighlight></big><br />
Sets the corresponding attributes to the values of the arguments.<br />
<big><syntaxhighlight lang="cpp"><br />
~MNode(void);<br />
</syntaxhighlight></big><br />
deletes the '''_item'''<br />
<br />
===CMenu===<br />
CMenu is a linked list of MNodes and also contains a CButton for a Title (only used on if in '''_dropdown''' mode). <br /><br />
Assuming that a CMenu is created with a title as "FILE" and menu-items as "Save, Load, Print, Quit":<br />
*When in '''_dropdown''' mode:<br />
When drawing, Only the _Title(CButton) is drawn (and not the menu itself)<br />
<big><pre><br />
FILE<br />
</pre></big><br />
When edited (in '''_dropdown''' mode) the CButton gets activated and if it is hit, then the Menu will be dropped down (drawn) under the CButton and user can browse through the options and select one of them. selecting the option in this case will close the menu and CButton gets activated again:<br /><br />
when active, CMenu looks like this:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits enter: (since nothing is selected all menu items are unselected)<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
| Print |<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
Now the cursor is standing under '''S'''ave.<br />
User hits down arrow twice to select '''P'''rint and then hits Space:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
The Print is selected and The menu is closed and FILE is active again.<br />
If the user hits Enter again:<br />
<big><pre><br />
FILE<br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
We will see the Print is selected and the cursor in under P.<br />
If user hits Enter instead of space, the selection wont change and whatever was selected before will remain the same:<br />
<big><pre><br />
[FILE]<br />
</pre></big><br />
User hits navigation keys and moves out of the CMenu Field.<br />
''Note that if '''left''' or '''right''' navigation keys are hit when the title is active, then they are translated to '''up''' or '''down''' respectively.<br />
*When NOT in '''_dropdown''' mode:<br />
*:The CButton will not be displayed at all, and when user starts to edit, he enters the menu browsing the items and if he gets to the end of the menu, the control goes to the next field in the dialog. If user goes up and passes the first them, then the control will go to the previous field in the dalog.<br />
<big><pre><br />
/-------\<br />
| Save |<br />
| Load |<br />
|[Print]|<br />
| Quit |<br />
\-------/<br />
</pre></big><br />
''Note that if the number of menu items are more than the space provided by the CField's frame, then the menu items should scroll up and down to accommodate the selection'' <br />
====Attributes====<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _first;<br />
</syntaxhighlight></big><br />
points to the first CMenuItem visible on the menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
MNode* _head;<br />
MNode* _tail;<br />
MNode* _cur;<br />
</syntaxhighlight></big><br />
standard Link list pointers<br />
<big><syntaxhighlight lang = "cpp"><br />
char _format[3];<br />
</syntaxhighlight></big><br />
The two characters used to surround the selected menu item<br />
<big><syntaxhighlight lang = "cpp"><br />
unsigned int _cnt;<br />
</syntaxhighlight></big><br />
The number of CMenuItems in CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
int _selectedIndex;<br />
</syntaxhighlight></big><br />
The index of the selected CMenuItem (saved in MNode::index), if there is no selected menu, then this value is -1.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropdown;<br />
</syntaxhighlight></big><br />
True if the Menu is a Drop Down Menu.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool _dropped;<br />
</syntaxhighlight></big><br />
Flag used to hold the status of a Drop Down Menu, (_dropped or not)<br />
<big><syntaxhighlight lang = "cpp"><br />
bool goNext();<br />
bool goPrev();<br />
</syntaxhighlight></big><br />
standard gonext() and goprev() in linked lists<br />
<big><syntaxhighlight lang = "cpp"><br />
CButton _Title;<br />
</syntaxhighlight></big><br />
CButton holding the Title of this menu<br />
====Constructor/Destructor====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu(const char* Title, const char* Format, int Row, int Col, <br />
int Width, int Height,bool dropdown, <br />
const char* Border=C_BORDER_CHARS);<br />
</syntaxhighlight></big><br />
#Initializes CField as follows:<br />
#* Row: Passes Row, if this menu is not a dropdown, otherwise it will pass Row+1.<br />
#* Col, Width, Height are passed directly<br />
#* Data: a void null pointer is passed for data<br />
#* Bordered: since CMenu is always bordered, true is passed here<br />
#* Border is directly passed.<br />
#Initializes _Title (the CButton) as follows:<br />
#* Str, Title is passed here<br />
#* Row, -1<br />
#* Col, 1<br />
#* Bordered, since the title of the dorpdown is alway NOT bordered, then false is passed here.<br />
#Constructor Settings:<br />
#* Link list attributes are set as standard linked list contructor<br />
#* Format is copied into _format<br />
#* _cnt is set to zero<br />
#* _selectedIndex is set to -1<br />
#* _data is set to address of _selectedIndex<br />
#* _dropdown is set to dropdown<br />
#* _dropped is set to false<br />
#* _Title's frame is set to the CMenu object (this)<br />
<big><syntaxhighlight lang = "cpp"><br />
~CMenu();<br />
</syntaxhighlight></big><br />
Standard Linked list destructor<br />
<br />
====Methods====<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& add(const char* Text, bool selected = false);<br />
</syntaxhighlight></big><br />
Standard append for a linked list:<br />
#creates an MNode with<br />
#* a new CMenutItem with<br />
#*:selected, _format, Text for first three arguments<br />
#*:1, 1, and (width of the menu) -2, for Row col and width<br />
#* the rest are what is needed for a standard append procedure for a linked list<br />
#appends the new MNode to the end of the list<br />
#if the new added CMenuItem is selected, it will update the selected index<br />
'''''Note that if the added CMenuItem is the first CMenuItem in the list, then the _first pointer should be pointing to it'''''<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(const char* Text);<br />
</syntaxhighlight></big><br />
returns add(Text)<br />
<big><syntaxhighlight lang = "cpp"><br />
CMenu& operator<<(bool select);<br />
</syntaxhighlight></big><br />
if select is true, it will select the last CMenuItem added to the CMenu<br />
<big><syntaxhighlight lang = "cpp"><br />
void draw(int fn = C_FULL_FRAME);<br />
</syntaxhighlight></big><br />
#if this is a '''_dropdown''', then it will draw the _Title<br />
#: and then if '''_dropped''' is true, it will draw the CField and then draw the CMenuItems starting form what _first is pointing to, up to (CField's hieght -2) times.<br />
#if this not a '''_dropdown''' then the _Title will never be drawn and the CMenuItems should be drawn as above.<br />
<big><syntaxhighlight lang = "cpp"><br />
int edit();<br />
</syntaxhighlight></big><br />
Edits the menu the way it is explains in [[#CMenu|CMenu]] description.<br /><br />
If it is too confusing, this [[CMenu pseudo code - OOP344 20113|pseudo code]] may help.<br />
<big><syntaxhighlight lang = "cpp"><br />
void set(const void* data);<br />
</syntaxhighlight></big><br />
Sets the selected index to the integer pointed by data;<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex() const;<br />
</syntaxhighlight></big><br />
returns the selected index or -1 if nothing is selected<br />
<big><syntaxhighlight lang = "cpp"><br />
int selectedIndex(int index);<br />
</syntaxhighlight></big><br />
sets the selected index.<br />
<big><syntaxhighlight lang = "cpp"><br />
const char* selectedText();<br />
</syntaxhighlight></big><br />
returns the text of the selected menu. If nothing is selected, empty string is returned.<br />
<big><syntaxhighlight lang = "cpp"><br />
bool editable()const;<br />
</syntaxhighlight></big><br />
returns true if '''_cnt''' is greater than zero<br />
<br />
===CMenu Student Resources===<br />
====CMenu Help/Questions Blogs====<br />
====CMenu Blog Posts====</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97276Weekly Schedule 20132 - OOP3442013-07-16T01:59:25Z<p>Oleksandr Snurnikov: /* blog posts 10 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post] - Alexander Snurnikov<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97275Weekly Schedule 20132 - OOP3442013-07-16T01:58:39Z<p>Oleksandr Snurnikov: /* blog posts 10 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post]<br />
Check my blog post, after word ATTENTION. Also, you doubled our code in two of your classes - Artem - '''//Thank you:) - Alex'''<br />
<br />
* Working version of Templates homework, please feel free to [http://lisyonok85.wordpress.com/?p=14 check this out and comment] - Artem Luzyanin<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97248Weekly Schedule 20132 - OOP3442013-07-13T03:03:00Z<p>Oleksandr Snurnikov: /* blog posts 10 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
* Stuck on "Templates Homework" (need help please) [http://admixdev.com/2013/07/13/multi-inheritance-struggle/ My Blog post]<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97244Weekly Schedule 20132 - OOP3442013-07-13T00:36:45Z<p>Oleksandr Snurnikov: /* This Week 10 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* [http://www.cplusplus.com/doc/tutorial/templates/ Templates] <br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97243Weekly Schedule 20132 - OOP3442013-07-13T00:35:48Z<p>Oleksandr Snurnikov: /* This Week 10 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
* Exceptions [http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm tutorial: try catch]<br />
*: Exception classes and objects<br />
*: Throw<br />
*: Try<br />
*: Catch<br />
* Function Stack Review<br />
* Glance at Standard Template Library<br />
* Templates<br />
*: Templated classes and functions<br />
*: Default template parameters<br />
*: Templating Techniques (Inheritance with templates, mix-ins)<br />
* Multiple Inheritance<br />
*: Multiple Class Inheritance<br />
*: Glance at Interfaces<br />
*: Diamond Inheritance Issues (Template solutions)<br />
<br />
=== To Do 10===<br />
* Split up work with teammates for A2, complete skeletons of classes (Due July 12)<br />
* Complete Template Exercise and blog about it<br />
<br />
=== Resources 10===<br />
=== blog posts 10===<br />
<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=97195Weekly Schedule 20132 - OOP3442013-07-10T00:14:13Z<p>Oleksandr Snurnikov: /* This Week 9 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/06/07/variable-argument-list-string-concatenation-3/ Amal Khandelwal]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
*[http://dtkerroop344.wordpress.com/2013/06/18/simple-linked-list/ A simple linked list]<br />
*[http://matthewtorrance.blogspot.ca/2013/06/queue-add-and-remove.html Queue: Add & Remove]<br />
<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
* New keywords <br />
*: inline<br />
*: auto<br />
*: nullptr<br />
* Enum Review<br />
* Introduction to Recursion<br />
* Dyanimic Lists<br />
* Doubly Linked Lists<br />
* [http://www.cplusplus.com/doc/tutorial/exceptions/ Intro to Exceptions]<br />
<br />
=== To Do 9===<br />
* Complete Doubly Linked List Implementation<br />
* Blog about it<br />
=== Resources 9===<br />
=== blog posts 9===<br />
<br />
*[http://kazilemannor.wordpress.com/2013/07/05/dll/ SecB Zhenyang Chen - DLL]<br />
*[http://brackethunter.blogspot.ca/2013/07/dllist-with-ui.html Brad Stuart - DLList with UI]<br />
*[http://markieta.blogspot.ca/2013/07/doubly-linked-list-insertbefore.html Christopher Markieta - insertBefore]<br />
<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=96948Weekly Schedule 20132 - OOP3442013-06-18T19:10:53Z<p>Oleksandr Snurnikov: /* This Week 8 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
* Tuesday class, cancelled (makeup session and more during study break)<br />
* conui review and Initial repo settings<br />
* class member access operator review<br />
*: arrow and dot<br />
* literals<br />
* sizeof() <br />
* operators (more in detail)<br />
<br />
=== To Do 6===<br />
# Add your information to [[Teams' List 20132 - OOP344 | Teams1 List]] - '''''Due NOW!'''''<br />
# After adding your information to the [[Teams' List 20132 - OOP344 | Teams1 List]], click on your team name and update your '''''Team Page''''' to match your team requirements. - '''''Due NOW!'''''<br />
# Add your your information to [[Student List 20132 - OOP344 | The Student List Page]]. '''''Due NOW!'''''<br />
# complete your task in [[Project R0.1 20132- OOP344 | Release R0.1]] - '''''Due Monday 17th, 23:59'''''<br />
<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
<br />
=== To Do 7===<br />
# Add resize to IntArr<br />
<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
* makeup session and more (June, Tuesday 25th)<br />
*: 9:00 to ???<br />
*: please make sure you are rested and ready for a long day of study, new materials and reviews<br />
<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Project_R0.1_20132-_OOP344&diff=96873Project R0.1 20132- OOP3442013-06-18T03:10:12Z<p>Oleksandr Snurnikov: /* Help Needed */</p>
<hr />
<div>{{OOP344 Index | 20131}}<br />
<br />
=Release=<br />
* 0.1<br />
=Notes=<br />
* Using Matrix, from windows: please use [http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe putty] only and set the keyboard to <br />
*: Backspace = Ctrl-?<br />
*: Home and End = Standard<br />
*: Function keys and keypad = Linux<br />
*: And then:<br />
*: Connection > Data > Terminal-type string = linux (This step must be done when first connecting through putty!)<br />
*:: Or if you have already connected, type in (export TERM="linux") without brackets<br />
* [https://cs.senecac.on.ca/~chris.szalwinski/resources/borland.html Guide for Using Borland 5.5]<br />
*: Note that to change the cmd.exe window size, right click on the top bar -> Properties -> Layout Tab<br />
<br />
=Due Dates=<br />
Monday June 17th.<br />
<br />
=Help=<br />
==Help Needed==<br />
* <strike>Bug(?): The insert mode in our assignment works as it is supposed to but fails the test when running the test program. Has anyone else encountered this problem, or is this an error on my side?</strike><br />
<br />
I had the same problem. Try to replace the original code '''Console::_insertMode''' by just '''insertMode'''. It works for me. Otherwise it is local I guess. So it works within your application but does not react to parameter passed to the function.<br />
<br />
Thank you. I actually solved it by making insertMode=Console::_insertMode.<br />
<br />
* Just noticed that the return string for the 4-6 test is wrong. It checks to see if you've inserted 'ab' into the string, and not 'abc' like the dialog box asks for. If you insert only 'ab' the test passes as it should.<br />
<br />
* In test 4.9 (END button), the test gives the string which stays in the middle of the field, is that OK?! I see that kind of a weird situation. In that case it fails the END button test, because values for curPosition & strOffset are not right. Ideas?<br />
<br />
You want to set the curPosition=size-*strOffset. This will mean that it scrolls down the string to the end if the length of the string is longer than the field, but only move to the end of the string if it isn't, which allows for having the string stay in the middle of the field as in the test. When you do this, though, don't forget that you need to make sure that, when the curPosition goes outside the field, the curPosition and offset are changed accordingly.<br />
<br />
* Anyone know where/how to submit when it's complete?<br />
<br />
If I'm not mistaking the test program should submit it in the end of the testing automatically..<br />
<br />
==Blog Posts==<br />
<br />
=Learning Outcome=<br />
Upon successful completion of this first assignment, you will have demonstrated the abilities to design and code<br />
* functions that use the basic console input and output library<br />
* a line editor<br />
* use of extern<br />
* operator overload<br />
* use of namespaces<br />
=Console Line Editing Facility =<br />
As your first assignment, you are to upgrade the basic console input output class (BConsole) to include line-display and line-editing facilities and use of "<<" and ">>" operators for character I/O and string output. <br />
<br />
==Specifications==<br />
<br />
Your submission consists of a class called Console that is to be inherited from BConsole in a namespace called '''cui'''. Your application module is fully portable across Borland C++5.5 on windows, Linux GNU C++, Viusual C++ on Windows and Mac C++ platforms which accepts console input, and provides console output through the set of facilities available in your Console module. <br />
<br />
The name of the library object to be created is console. The header file for the original version of this module is console.h and the implementation file for the original version is console.cpp. All of the identifiers for the library module and all upgrades to the module are defined in the cui namespace (short for console input output).<br />
<br />
Your upgrade in this assignment consists of creating a class called Console, inherited from BConsole, implemented in two files; console.h and console.cpp:<br />
<br />
In addition to all public methods of BConsole, Console must have the following two public methods and overload "<<" and ">>" operators.<br />
===external links===<br />
* instantiate Console, in an object called "console" in cui namespace and create an external linkage to in console.h<br />
===strdsp() method===<br />
void display(const char* str, int row, int col, int fieldLen=0, int curpos = -1); <br />
<br />
This method outputs the C-style, null-terminated string pointed to by str starting at row "row" and column "col" of the screen in a field of fieldLen characters(Row value 0 refers to the top row, and column value 0 refers to the left-most column) and positions the cursor at "curpos" location relative to "col", only if it is greater or equal to zero.<br />
<br />
If the string is longer than fieldLen, your function displays the first fieldLen characters. If the string is shorter than fieldLen, your function displays the entire string, followed by enough trailing spaces to fill out the field completely. <br />
<br />
If fieldLen is 0, your function displays the entire string with no trailing spaces.<br />
<br />
Your function positions the cursor after the last character displayed if curpos is less than zero otherwise it positions the cursor at "curpos" location relative to "col". The results are undefined if the starting position of the string is not within the dimensions of the screen.<br />
<br />
===lineedit() method===<br />
<br />
<big><pre><br />
int lineedit(char *str, int row, int col, int fieldLength, int maxStrLength, <br />
int* strOffset=_stroff, int* curPosition=_curpos, <br />
bool InTextEditor = false, bool ReadOnly = false, bool& insertMode=_insertMode );<br />
</pre></big><br />
<br />
This method is to be written in two steps. <br />
====Step one==== <br />
''Ignore the two arguments '''(InTextEditor and ReadOnly)''' for now write the method as follows:''<br />
<br />
This method edits the C-style, null-terminated string pointed by str. The parameter row holds the row (0 is the top row) of the string on the screen. The parameter col holds the starting column (0 is the left-most column) on the screen. The parameter fieldLength holds the length of the editable field. The string may be larger than the field itself, in which case part of the string is hidden from view. The parameter maxStrLength holds the maximum length of the string, excluding the null byte. The parameter insertMode points to a bool variable that holds the current insert mode of the string. The parameter insertMode receives the address of a variable that stores the current editing mode - insert or overwrite. The parameter strOffset points to an int variable that holds the initial offset of the string within the field; that is, the index of the character in the string that initially occupies the first character position in the field. The parameter curPosition points to an int variable that holds the initial cursor position within the field; that is, the index of the character in the field at which the cursor is initially placed. <br />
* '''''Initial Corrections'''''<br />
*:If the initial offset is beyond the end of the string, your function resets the offset to the length of the string; that is, to the index of the character immediately beyond the end of the string. If no offset variable is pointed to; that is, if the address of the variable is NULL, your function sets the offset to the index of the first character in the string; that is, to 0. (to do this have a local variable for the offset that holds zero to be pointed instead of an external variable)<br />
*:If the initial cursor position is beyond the end of the field, your function resets the position to the last character in the field. If the position is beyond the end of the string, your function resets the position to that immediately beyond the end of the string. If no cursor position variable is pointed to; that is, if the address of the variable is NULL, your function sets the cursor position to the first position in the field; that is, to position 0.(like the offset, to do this have a local variable for the cursor position that holds zero to be pointed instead of an external variable)<br />
<br />
Your function does not allow the cursor to move before the start of the field or past the end of the field. If the field ends at the right edge of the screen, your function does not allow the cursor to the right of that edge.<br />
<br />
Your function uses the symbolic names for non-ASCII and special keys defined in the keys.h header file. These names are the same symbolic names as those used in the original library module.<br />
<br />
The user terminates editing by pressing ENTER, ESCAPE, TAB, UP, DOWN, PGUP, PGDN or any of the function keys F(1) through F(12) inclusive. If the user presses ESCAPE, your function aborts editing, replaces the contents of the string with the original contents upon entry into your function, and leaves the offset and cursor position values unaltered. In order to be able to revert to the original string, your function needs to allocate memory at run time. <br />
<br />
At termination, your function passes back through the same int variables the current values of the offset and the cursor position, unless no variables were pointed to upon entry into your function; that is, unless the value of either address was NULL.<br />
<br />
Your function returns an int identifying the key that the user pressed to exit the function. <br />
<br />
Your function takes no action (other than perhaps beeping) if the user tries to enter too many characters (if, for example, the string is full in insert mode, or the cursor is positioned after the last character of a full string in overstrike mode).<br />
<br />
Your function handles the non-ASCII keys as follows<br />
<br />
*LEFT - moves the cursor left one character, if possible, changing the offset, if necessary.<br />
*RIGHT - moves the cursor right one character, if possible, changing the offset, if necessary.<br />
*HOME - moves the cursor to the beginning of the string, changing the offset, if necessary.<br />
*END - moves the cursor to the position to the right of the last character in the string, changing the offset, if necessary. <strike> If the last character is at the edge of the screen, moves the cursor to that character.</strike><br />
*INSERT - toggles Insert/Overstrike mode. In Insert mode, your function inserts a printable character into the string at the current cursor position, moves the remainder of the string to the right to make room for the inserted character, and positions the cursor just to the right of the inserted character. The printable characters are the characters from space (' ') to tilde ('~') inclusive in the ASCII table. In Overstrike mode, your function overwrites the character (if any) at the current cursor position with a printable character and advances the cursor just to the right of the new character. If the cursor is past the end of the string, your function appends a printable character to the string as long as the string isn't full, regardless of the mode. <br />
*DEL - discards the character at the current cursor position and moves all characters to the right of the cursor position one position to the left.<br />
*BACKSPACE - discards the character to the left of the current cursor position, if possible, moves the characters at and to the right of the cursor position one position to the left, if possible, and positions the cursor one character to the left, if possible.<br />
<br />
edit() always displays blanks in any part of the field that is not occupied by the string. UNDER NO CIRCUMSTANCES DOES YOUR FUNCTION CHANGE ANY POSITION ON THE SCREEN OUTSIDE THE FIELD. For example, your function does not display status information (such as "INS" or "OVR") elsewhere on the screen, since such displays limit the programmer's ability to design their own screen layouts.<br />
<br />
You may assume that it is the calling program's responsibility to ensure that the string array is large enough to handle maxStrLength characters and that the starting screen position provides enough room (on the screen) for the field, etc.<br />
<br />
{| class="wikitable" border="0"<br />
|+ <br />
! Edit Method!! Interface<br />
|-<br />
| [[File:editString.png|500px|thumb|center|Edit Method Function Diagram]] || <br />
[[File:interface.png|400px|thumb|center|Interface Diagram]]<br />
|}<br />
<br />
====Step two====<br />
''First run your program with cui_test.cpp and make sure it passes all the tests up to and including "4.16". If all tests are passed continue with step two:<br />
<br />
=====InTextEditor=====<br />
If '''InTextEditor''' is true and the value of '''*strOffset''' is changed at any time, then terminate the edit function immediately and return '''0''';<br />
======TAB key======<br />
If '''InTextEditor''' is true and TAB key is hit, then instead of terminating the function, ''Console::_tabsize'' spaces are inserted into ''str''.<br />
<br />
=====ReadOnly=====<br />
If '''ReadOnly''' is true, then edit function works exactly like before, except that any modification to the data (the content of the '''str''' string) will be ignored.<br />
<br />
===Overload "<<" and ">>" operators===<br />
==== operator>> ====<br />
Console& operator>>(Console& cn, int& ch);<br />
Get a key from keyboard using ''cn'' and store it in ''ch'';<br />
==== operator<< ====<br />
Console& operator<<(Console& cn, char ch);<br />
Print the character ''ch'' on the screen, where the cursor is located, using cn and return the cn reference;<br />
Console& operator<<(Console& cn, const char* str);<br />
print the string '''str''' on the screen where the cursor is using '''cn''' and return the cn reference<br />
<br />
<br />
=Submission=<br />
==Common Submission mistakes==<br />
<!--* Submitting the assignment with old version of cui_text.o<br />
*: ''Make sure you copy the latest version (currently 0.94.1) from my account : $cp ~fardad.soleimanloo/cio_test.o<br />
* Using tab character''<br />
*: ''As mentioned in class using tab character in your text editor makes the indentation of your code different in different editors, please make sure before submission you go to the settings of your development environment and make sure it uses spaces instead of tab character.'' --><br />
==Tester Demo==<br />
<!--To see how tester runs, you can run on Matrix (only use putty with the setting stated at [[#Notes|Notes]]) run:<br />
<big><pre><br />
$ ~fardad.soleimanloo/cui_test<br />
</pre></big> --><br />
<br />
==How to Compile==<br />
Compile and test your code with the test-main, in the following command-line environments and visual studio.<br />
<br />
Local PC: Borland 5.5 <br />
bcc32 bconsole.cpp console.cpp cui_test.cpp<br />
<br />
Local Mac: (use -lcurses to link curses library)<br />
c++ bconsole.cpp console.cpp cui_test.cpp -lcurses -Wno-write-strings<br />
<br />
matrix: GNU (use -lncurses to link ncurses library)<br />
g++ bconsole.cpp console.cpp cui_test.cpp -lncurses -Wno-write-strings<br />
<br />
Local PC: Visual Studio.net<br />
=== Tester Program ===<br />
*Tester program is at git://github.com/Seneca-OOP344/20132notes.git (Notes repository) in '''TesterPrograms''' directory.<br />
*repo path:<br/><br />
*:[https://github.com/Seneca-OOP344/20132notes.git 20132notes]/TesterPrograms/cui_test.cpp<br />
<br />
==How to submit==<br />
<!--For submission purposes, your solution must compile, link, and run without errors in each environment. <br />
<br />
First pull the changes of the two files bconsole.cpp and bconsole.h to version 1.02 (Feb 1, 2013) from the console directory in notes repository of your section.<br />
<br />
Test your program with cio_test.cpp from the same console directory stated above. When your program passed all the tests; on matrix, create a directory and copy all the source files (console.cpp, console.h, bconsole.cpp, bconsole.h) into it. Then copy cio_test.o '<big>''''V 0.94.1'''''</big> from "~fardad.soleimanloo" and then compile your code with your professors version of cio_test (i.e cio_test.o) and run it. If all the tests are passed successfully, an email will be sent to your professor automatically with your source code (console.h and console.cpp) attached to it.<br />
<br />
to copy the cio_test.o do the following.<br /><br />
From the directory containing all source files:<br />
$cp ~fardad.soleimanloo/cio_test.o .<br />
to compile the code:<br />
$g++ bconsole.cpp console.cpp cio_test.o -lncurses<br />
This should not generate any warnings.<br /><br />
To run the test (with automatic submission)<br />
$ a.out your_student_number Your Full Name as on Student Card <ENTER><br />
Example:<br />
$ a.out 012345678 Home Jay Simpson <ENTER> --><br />
== Tasks Distribution Suggestion==<br />
=== Team of 3 ===<br />
* Programmer 1<br />
*# Tab<br />
*# Character Entry<br />
*## Overstrike <br />
*## Insert Mode<br />
* Programmer 2<br />
*# Intial Corrections <br />
*# Home<br />
*# End<br />
*# Escape<br />
*# Right<br />
*# Left<br />
*# Enter<br />
* Programmer 3<br />
*# BackSpace<br />
*# Del<br />
*# InTextEditor and ReadOnly<br />
*# Function keys<br />
*# operator>> int&<br />
*# operator<< char<br />
*# operator<< char*<br />
*# Insert<br />
<br />
=== Team of 4 ===<br />
* Programmer 1<br />
*# Character Entry<br />
*## Overstrike<br />
*## Insert Mode<br />
*# End<br />
*# Enter<br />
* Programmer 2<br />
*# Tab<br />
*# Home<br />
*# operator>> int& <br />
*# operator<< char <br />
*# operator<< char* <br />
* Programmer 3<br />
*# BackSpace<br />
*# Right<br />
*# Del<br />
*# Function keys<br />
* Programmer 4<br />
*# Intial Corrections<br />
*# IsTextEditor and ReadOnly <br />
*# Escape<br />
*# Left<br />
*# Insert<br />
<br />
<br />
<!--<br />
Tab: 23<br />
Function keys: 1<br />
Overstrike: 15<br />
operator>> int& 3<br />
operator<< char 3<br />
operator<< char* 4<br />
Insert: 1<br />
<br />
<br />
Intial Corrections: 18 <br />
Home: 4<br />
End: 7<br />
Escape: 5<br />
Right: 10<br />
Left: 4<br />
Enter: 1<br />
<br />
BackSpace: 23<br />
Del: 3<br />
Insert Mode: 14<br />
IsTextEditor and ReadOnly 10<br />
<br />
--></div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Project_R0.1_20132-_OOP344&diff=96870Project R0.1 20132- OOP3442013-06-18T02:32:35Z<p>Oleksandr Snurnikov: /* Help Needed */</p>
<hr />
<div>{{OOP344 Index | 20131}}<br />
<br />
=Release=<br />
* 0.1<br />
=Notes=<br />
* Using Matrix, from windows: please use [http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe putty] only and set the keyboard to <br />
*: Backspace = Ctrl-?<br />
*: Home and End = Standard<br />
*: Function keys and keypad = Linux<br />
*: And then:<br />
*: Connection > Data > Terminal-type string = linux (This step must be done when first connecting through putty!)<br />
*:: Or if you have already connected, type in (export TERM="linux") without brackets<br />
* [https://cs.senecac.on.ca/~chris.szalwinski/resources/borland.html Guide for Using Borland 5.5]<br />
*: Note that to change the cmd.exe window size, right click on the top bar -> Properties -> Layout Tab<br />
<br />
=Due Dates=<br />
Monday June 17th.<br />
<br />
=Help=<br />
==Help Needed==<br />
* <strike>Bug(?): The insert mode in our assignment works as it is supposed to but fails the test when running the test program. Has anyone else encountered this problem, or is this an error on my side?</strike><br />
<br />
I had the same problem. Try to replace the original code '''Console::_insertMode''' by just '''insertMode'''. It works for me. Otherwise it is local I guess. So it works within your application but does not react to parameter passed to the function.<br />
<br />
Thank you. I actually solved it by making insertMode=Console::_insertMode.<br />
<br />
* Just noticed that the return string for the 4-6 test is wrong. It checks to see if you've inserted 'ab' into the string, and not 'abc' like the dialog box asks for. If you insert only 'ab' the test passes as it should.<br />
<br />
* In test 4.9 (END button), the test gives the string which stays in the middle of the field, is that OK?! I see that kind of a weird situation. In that case it fails the END button test, because values for curPosition & strOffset are not right. Ideas?<br />
<br />
==Blog Posts==<br />
<br />
=Learning Outcome=<br />
Upon successful completion of this first assignment, you will have demonstrated the abilities to design and code<br />
* functions that use the basic console input and output library<br />
* a line editor<br />
* use of extern<br />
* operator overload<br />
* use of namespaces<br />
=Console Line Editing Facility =<br />
As your first assignment, you are to upgrade the basic console input output class (BConsole) to include line-display and line-editing facilities and use of "<<" and ">>" operators for character I/O and string output. <br />
<br />
==Specifications==<br />
<br />
Your submission consists of a class called Console that is to be inherited from BConsole in a namespace called '''cui'''. Your application module is fully portable across Borland C++5.5 on windows, Linux GNU C++, Viusual C++ on Windows and Mac C++ platforms which accepts console input, and provides console output through the set of facilities available in your Console module. <br />
<br />
The name of the library object to be created is console. The header file for the original version of this module is console.h and the implementation file for the original version is console.cpp. All of the identifiers for the library module and all upgrades to the module are defined in the cui namespace (short for console input output).<br />
<br />
Your upgrade in this assignment consists of creating a class called Console, inherited from BConsole, implemented in two files; console.h and console.cpp:<br />
<br />
In addition to all public methods of BConsole, Console must have the following two public methods and overload "<<" and ">>" operators.<br />
===external links===<br />
* instantiate Console, in an object called "console" in cui namespace and create an external linkage to in console.h<br />
===strdsp() method===<br />
void display(const char* str, int row, int col, int fieldLen=0, int curpos = -1); <br />
<br />
This method outputs the C-style, null-terminated string pointed to by str starting at row "row" and column "col" of the screen in a field of fieldLen characters(Row value 0 refers to the top row, and column value 0 refers to the left-most column) and positions the cursor at "curpos" location relative to "col", only if it is greater or equal to zero.<br />
<br />
If the string is longer than fieldLen, your function displays the first fieldLen characters. If the string is shorter than fieldLen, your function displays the entire string, followed by enough trailing spaces to fill out the field completely. <br />
<br />
If fieldLen is 0, your function displays the entire string with no trailing spaces.<br />
<br />
Your function positions the cursor after the last character displayed if curpos is less than zero otherwise it positions the cursor at "curpos" location relative to "col". The results are undefined if the starting position of the string is not within the dimensions of the screen.<br />
<br />
===lineedit() method===<br />
<br />
<big><pre><br />
int lineedit(char *str, int row, int col, int fieldLength, int maxStrLength, <br />
int* strOffset=_stroff, int* curPosition=_curpos, <br />
bool InTextEditor = false, bool ReadOnly = false, bool& insertMode=_insertMode );<br />
</pre></big><br />
<br />
This method is to be written in two steps. <br />
====Step one==== <br />
''Ignore the two arguments '''(InTextEditor and ReadOnly)''' for now write the method as follows:''<br />
<br />
This method edits the C-style, null-terminated string pointed by str. The parameter row holds the row (0 is the top row) of the string on the screen. The parameter col holds the starting column (0 is the left-most column) on the screen. The parameter fieldLength holds the length of the editable field. The string may be larger than the field itself, in which case part of the string is hidden from view. The parameter maxStrLength holds the maximum length of the string, excluding the null byte. The parameter insertMode points to a bool variable that holds the current insert mode of the string. The parameter insertMode receives the address of a variable that stores the current editing mode - insert or overwrite. The parameter strOffset points to an int variable that holds the initial offset of the string within the field; that is, the index of the character in the string that initially occupies the first character position in the field. The parameter curPosition points to an int variable that holds the initial cursor position within the field; that is, the index of the character in the field at which the cursor is initially placed. <br />
* '''''Initial Corrections'''''<br />
*:If the initial offset is beyond the end of the string, your function resets the offset to the length of the string; that is, to the index of the character immediately beyond the end of the string. If no offset variable is pointed to; that is, if the address of the variable is NULL, your function sets the offset to the index of the first character in the string; that is, to 0. (to do this have a local variable for the offset that holds zero to be pointed instead of an external variable)<br />
*:If the initial cursor position is beyond the end of the field, your function resets the position to the last character in the field. If the position is beyond the end of the string, your function resets the position to that immediately beyond the end of the string. If no cursor position variable is pointed to; that is, if the address of the variable is NULL, your function sets the cursor position to the first position in the field; that is, to position 0.(like the offset, to do this have a local variable for the cursor position that holds zero to be pointed instead of an external variable)<br />
<br />
Your function does not allow the cursor to move before the start of the field or past the end of the field. If the field ends at the right edge of the screen, your function does not allow the cursor to the right of that edge.<br />
<br />
Your function uses the symbolic names for non-ASCII and special keys defined in the keys.h header file. These names are the same symbolic names as those used in the original library module.<br />
<br />
The user terminates editing by pressing ENTER, ESCAPE, TAB, UP, DOWN, PGUP, PGDN or any of the function keys F(1) through F(12) inclusive. If the user presses ESCAPE, your function aborts editing, replaces the contents of the string with the original contents upon entry into your function, and leaves the offset and cursor position values unaltered. In order to be able to revert to the original string, your function needs to allocate memory at run time. <br />
<br />
At termination, your function passes back through the same int variables the current values of the offset and the cursor position, unless no variables were pointed to upon entry into your function; that is, unless the value of either address was NULL.<br />
<br />
Your function returns an int identifying the key that the user pressed to exit the function. <br />
<br />
Your function takes no action (other than perhaps beeping) if the user tries to enter too many characters (if, for example, the string is full in insert mode, or the cursor is positioned after the last character of a full string in overstrike mode).<br />
<br />
Your function handles the non-ASCII keys as follows<br />
<br />
*LEFT - moves the cursor left one character, if possible, changing the offset, if necessary.<br />
*RIGHT - moves the cursor right one character, if possible, changing the offset, if necessary.<br />
*HOME - moves the cursor to the beginning of the string, changing the offset, if necessary.<br />
*END - moves the cursor to the position to the right of the last character in the string, changing the offset, if necessary. <strike> If the last character is at the edge of the screen, moves the cursor to that character.</strike><br />
*INSERT - toggles Insert/Overstrike mode. In Insert mode, your function inserts a printable character into the string at the current cursor position, moves the remainder of the string to the right to make room for the inserted character, and positions the cursor just to the right of the inserted character. The printable characters are the characters from space (' ') to tilde ('~') inclusive in the ASCII table. In Overstrike mode, your function overwrites the character (if any) at the current cursor position with a printable character and advances the cursor just to the right of the new character. If the cursor is past the end of the string, your function appends a printable character to the string as long as the string isn't full, regardless of the mode. <br />
*DEL - discards the character at the current cursor position and moves all characters to the right of the cursor position one position to the left.<br />
*BACKSPACE - discards the character to the left of the current cursor position, if possible, moves the characters at and to the right of the cursor position one position to the left, if possible, and positions the cursor one character to the left, if possible.<br />
<br />
edit() always displays blanks in any part of the field that is not occupied by the string. UNDER NO CIRCUMSTANCES DOES YOUR FUNCTION CHANGE ANY POSITION ON THE SCREEN OUTSIDE THE FIELD. For example, your function does not display status information (such as "INS" or "OVR") elsewhere on the screen, since such displays limit the programmer's ability to design their own screen layouts.<br />
<br />
You may assume that it is the calling program's responsibility to ensure that the string array is large enough to handle maxStrLength characters and that the starting screen position provides enough room (on the screen) for the field, etc.<br />
<br />
{| class="wikitable" border="0"<br />
|+ <br />
! Edit Method!! Interface<br />
|-<br />
| [[File:editString.png|500px|thumb|center|Edit Method Function Diagram]] || <br />
[[File:interface.png|400px|thumb|center|Interface Diagram]]<br />
|}<br />
<br />
====Step two====<br />
''First run your program with cui_test.cpp and make sure it passes all the tests up to and including "4.16". If all tests are passed continue with step two:<br />
<br />
=====InTextEditor=====<br />
If '''InTextEditor''' is true and the value of '''*strOffset''' is changed at any time, then terminate the edit function immediately and return '''0''';<br />
======TAB key======<br />
If '''InTextEditor''' is true and TAB key is hit, then instead of terminating the function, ''Console::_tabsize'' spaces are inserted into ''str''.<br />
<br />
=====ReadOnly=====<br />
If '''ReadOnly''' is true, then edit function works exactly like before, except that any modification to the data (the content of the '''str''' string) will be ignored.<br />
<br />
===Overload "<<" and ">>" operators===<br />
==== operator>> ====<br />
Console& operator>>(Console& cn, int& ch);<br />
Get a key from keyboard using ''cn'' and store it in ''ch'';<br />
==== operator<< ====<br />
Console& operator<<(Console& cn, char ch);<br />
Print the character ''ch'' on the screen, where the cursor is located, using cn and return the cn reference;<br />
Console& operator<<(Console& cn, const char* str);<br />
print the string '''str''' on the screen where the cursor is using '''cn''' and return the cn reference<br />
<br />
<br />
=Submission=<br />
==Common Submission mistakes==<br />
<!--* Submitting the assignment with old version of cui_text.o<br />
*: ''Make sure you copy the latest version (currently 0.94.1) from my account : $cp ~fardad.soleimanloo/cio_test.o<br />
* Using tab character''<br />
*: ''As mentioned in class using tab character in your text editor makes the indentation of your code different in different editors, please make sure before submission you go to the settings of your development environment and make sure it uses spaces instead of tab character.'' --><br />
==Tester Demo==<br />
<!--To see how tester runs, you can run on Matrix (only use putty with the setting stated at [[#Notes|Notes]]) run:<br />
<big><pre><br />
$ ~fardad.soleimanloo/cui_test<br />
</pre></big> --><br />
<br />
==How to Compile==<br />
Compile and test your code with the test-main, in the following command-line environments and visual studio.<br />
<br />
Local PC: Borland 5.5 <br />
bcc32 bconsole.cpp console.cpp cui_test.cpp<br />
<br />
Local Mac: (use -lcurses to link curses library)<br />
c++ bconsole.cpp console.cpp cui_test.cpp -lcurses -Wno-write-strings<br />
<br />
matrix: GNU (use -lncurses to link ncurses library)<br />
g++ bconsole.cpp console.cpp cui_test.cpp -lncurses -Wno-write-strings<br />
<br />
Local PC: Visual Studio.net<br />
=== Tester Program ===<br />
*Tester program is at git://github.com/Seneca-OOP344/20132notes.git (Notes repository) in '''TesterPrograms''' directory.<br />
*repo path:<br/><br />
*:[https://github.com/Seneca-OOP344/20132notes.git 20132notes]/TesterPrograms/cui_test.cpp<br />
<br />
==How to submit==<br />
<!--For submission purposes, your solution must compile, link, and run without errors in each environment. <br />
<br />
First pull the changes of the two files bconsole.cpp and bconsole.h to version 1.02 (Feb 1, 2013) from the console directory in notes repository of your section.<br />
<br />
Test your program with cio_test.cpp from the same console directory stated above. When your program passed all the tests; on matrix, create a directory and copy all the source files (console.cpp, console.h, bconsole.cpp, bconsole.h) into it. Then copy cio_test.o '<big>''''V 0.94.1'''''</big> from "~fardad.soleimanloo" and then compile your code with your professors version of cio_test (i.e cio_test.o) and run it. If all the tests are passed successfully, an email will be sent to your professor automatically with your source code (console.h and console.cpp) attached to it.<br />
<br />
to copy the cio_test.o do the following.<br /><br />
From the directory containing all source files:<br />
$cp ~fardad.soleimanloo/cio_test.o .<br />
to compile the code:<br />
$g++ bconsole.cpp console.cpp cio_test.o -lncurses<br />
This should not generate any warnings.<br /><br />
To run the test (with automatic submission)<br />
$ a.out your_student_number Your Full Name as on Student Card <ENTER><br />
Example:<br />
$ a.out 012345678 Home Jay Simpson <ENTER> --><br />
== Tasks Distribution Suggestion==<br />
=== Team of 3 ===<br />
* Programmer 1<br />
*# Tab<br />
*# Character Entry<br />
*## Overstrike <br />
*## Insert Mode<br />
* Programmer 2<br />
*# Intial Corrections <br />
*# Home<br />
*# End<br />
*# Escape<br />
*# Right<br />
*# Left<br />
*# Enter<br />
* Programmer 3<br />
*# BackSpace<br />
*# Del<br />
*# InTextEditor and ReadOnly<br />
*# Function keys<br />
*# operator>> int&<br />
*# operator<< char<br />
*# operator<< char*<br />
*# Insert<br />
<br />
=== Team of 4 ===<br />
* Programmer 1<br />
*# Character Entry<br />
*## Overstrike<br />
*## Insert Mode<br />
*# End<br />
*# Enter<br />
* Programmer 2<br />
*# Tab<br />
*# Home<br />
*# operator>> int& <br />
*# operator<< char <br />
*# operator<< char* <br />
* Programmer 3<br />
*# BackSpace<br />
*# Right<br />
*# Del<br />
*# Function keys<br />
* Programmer 4<br />
*# Intial Corrections<br />
*# IsTextEditor and ReadOnly <br />
*# Escape<br />
*# Left<br />
*# Insert<br />
<br />
<br />
<!--<br />
Tab: 23<br />
Function keys: 1<br />
Overstrike: 15<br />
operator>> int& 3<br />
operator<< char 3<br />
operator<< char* 4<br />
Insert: 1<br />
<br />
<br />
Intial Corrections: 18 <br />
Home: 4<br />
End: 7<br />
Escape: 5<br />
Right: 10<br />
Left: 4<br />
Enter: 1<br />
<br />
BackSpace: 23<br />
Del: 3<br />
Insert Mode: 14<br />
IsTextEditor and ReadOnly 10<br />
<br />
--></div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Student_List_20132_-_OOP344&diff=96455Student List 20132 - OOP3442013-06-13T21:35:09Z<p>Oleksandr Snurnikov: /* OOP344 Student List for Summer of 2013 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
== OOP344 Student List for Summer of 2013 ==<br />
<br />
Make sure you have the following done before you add your name here:<br />
<br />
* You have a registered name for IRC; irc.freenode.net server.<br />
* You have a blog for OOP344 either by filtering your posts or a dedicated blog.<br />
<br />
Please add your information to the student list table below by adding the following row to the table (if you are a student in oop344, summer of 2013).<br /><br />
<big><pre>|-<br />
|[[User:WUN|FN]]||LN||[[TPN|TN]]||SEC||[mailto:UserId@myseneca.ca?subject=oop344 LID]||[[Special:Contributions/WUN|WUN]]||IN||GH|| [http://BURL BN]<br />
</pre></big><br />
<br />
Replace the following with your own information when adding the row to the table: <br /><br />
* WUN: Your Wiki User name<br />
* FN: Your First Name<br />
* LN: Your Last Name<br />
* TPN: Your Team Page Name on wiki (Your team page is already created, please see [[Teams' List 20132 - OOP344]])<br />
* TN: Your Team name<br />
* SEC: Your OOP344 Section (example: A, B or C)<br />
* LID: Your seneca email ID (learn id)<br />
* IN: Your IRC '''Registered''' Nickname<br />
* GH: Your GitHub ID<br />
* BURL: Your Blog URL<br />
* BN: Your Blog Title<br />
<br />
Do Not add your row unless you have all the above information.<br />
<br />
If your information is not added to the following line, your work and assignments will not be marked.<br />
<br />
{| class="wikitable sortable" border="1" cellpadding="5"<br />
|+ OOP344 - Winter of 2013 student list<br />
! First Name !! Last Name !! Team Name !! Section !! Seneca Id !! wiki id !! IRC nick !! GITHUB ID !! Blog URL<br />
<br />
|-<br />
|[[User:WUN|FN]]||LN||[[TPN|TN]]||SEC||[mailto:UserId@myseneca.ca?subject=oop344 LID]||[[Special:Contributions/WUN|WUN]]||IN||GH||[http://BURL BN]<br />
<br />
|-<br />
|[[User:Artem Luzyanin|Artem]]||Luzyanin||[[Team K - OOP344 - 20132|Team K]]||A||[mailto:aluzyanin@myseneca.ca?subject=oop344 aluzyanin]||[[Special:Contributions/Artem Luzyanin|Artem Luzyanin]]||ArtemL||ArtemL||[http://lisyonok85.wordpress.com The Cave]<br />
<br />
|-<br />
|[[User:Ji Jungmin|Jungmin]]||Ji||[[Team I - OOP344 - 20132|Team I]]||A||[mailto:jjungmin@myseneca.ca?subject=oop344 jjungmin]||[[Special:Contributions/Ji Jungmin|Ji Jungmin]]||MistySnake||jungminji|| [http://jungmin-ji.tumblr.com/ WAKE UP]<br />
<br />
|-<br />
|[[User:Shehzin_Arshad|Shehzin]]||Arshad||[[Team B - OOP344 - 20132|Team B]]||A||[mailto:sarshad5@myseneca.ca?subject=oop344 sarshad5]||[[Special:Contributions/Shehzin_Arshad|Shehzin]]||shahzyn||shahzyn|| [http://shahzyn.blogspot.ca/ tinker]<br />
<br />
|-<br />
|[[User:Michael_Allison|Michael]]||Allison||[[Team E - OOP344 - 20132|Team E]]||A||[mailto:malliso1@myseneca.ca?subject=oop344 malliso1]||[[Special:Contributions/Michael_Allison|Michael]]||malliso1||malliso1||[http://malliso1.wordpress.com Mike's Blog]<br />
<br />
|-<br />
|[[User:Vadim_Namniak|Vadim]]||Namniak||[[Team E - OOP344 - 20132|Team E]]||B||[mailto:vnamnyak@myseneca.ca?subject=oop344 vnamnyak]||[[Special:Contributions/Vadim Namniak|Vadim]]||VadimNamniak||namniak||[http://namniak.blogspot.ca Vadim's Blog]<br />
<br />
|-<br />
|[[User:Aaron_Salud|Aaron]]||Salud||[[Team A - OOP344 - 20132|Team A]]||A||[mailto:asalud@myseneca.ca?subject=oop344 asalud]||[[Special:Contributions/Aaron Salud|Aaron]]||||AaronSalud||[http://aaronsalud.wordpress.com Aaron's Blog]<br />
<br />
|-<br />
|[[User:Philip Lau|Philip]]||Lau||[[Team C - OOP344 - 20132|Team C]]||A||[mailto:plau7@myseneca.ca?subject=oop344 plau7]||[[Special:Contributions/Philip_Lau|Philip]]||PLau||PLau7||[http://xplaux.wordpress.com/ Philip's Blog]<br />
<br />
|-<br />
|[[User:Brad Stuart|Brad]]||Stuart||[[Team I - OOP344 - 20132|Team I]]||B||[mailto:bstuart1@myseneca.ca?subject=oop344 bstuart1]||[[Special:Contributions/Brad Stuart|Brad]]||LesterNormal||BradStuart||[http://brackethunter.blogspot.ca/ Brad's Blog]<br />
<br />
|-<br />
|[[User:Dong Li|DONG]]||LI||[[Team C - OOP344 - 20132|Team C]]||A||[mailto:dli79@myseneca.ca?subject=oop344 dli79]||[[Special:Contributions/Dong Li|Dong Li]]||dong-dli||dong-dli||[http://dongdli.wordpress.com/ Dongdli Wonderland of Coding]<br />
<br />
|-<br />
|[[User:Dmitry Olifer|Dmitry]]||Olifer||[[Team B - OOP344 - 20132|Team B]]||A||[mailto:dolifer@myseneca.ca?subject=oop344 dolifer]||[[Special:Contributions/Dmitry Olifer|Dmitry]]||MeatTree||DmitryOlifer||[http://meatree.blogger.com/ Dmitry's Blog]<br />
<br />
|-<br />
|[[User:Na Li|Na]]||Li||[[Team B - OOP344 - 20132|Team B]]||B||[mailto:nli59@myseneca.ca?subject=oop344 nli59]||[[Special:Contributions/Na Li|Na]]||ivy-li||ivy-li||[http://happyivyli.blogspot.ca// Happyivy In Canada]<br />
<br />
|-<br />
|[[User:Drew Terrance Kerr|Drew Terrance]]||Kerr||[[Team H - OOP344 - 20132|Team H]]||A||[mailto:dtkerr@myseneca.ca?subject=oop344 dtkerr]||[[Special:Contributions/Drew Terrance Kerr|Drew Terrance]]||Praefractus||TerryKerr||[http://dtkerroop344.wordpress.com/ Terry's Blog]<br />
<br />
|-<br />
|[[User:Herman_Ho_Ming_Hum|Herman]]||Hum||[[Team D - OOP344 - 20132|Team D]]||A||[mailto:hhhum@myseneca.ca?subject=oop344 hhhum]||[[Special:Contributions/Herman Ho Ming Hum|hhhum]]||hhhum||hhhum||[http://hhhum0.blogspot.ca// Herman's Blog]<br />
<br />
|-<br />
|[[User:Amal Khandelwal|Amal]]||Khandelwal||[[Team K - OOP344 - 20132|Team K]]||A||[mailto:akhandelwal@myseneca.ca?subject=oop344 akhandelwal]||[[Special:Contributions/Amal Khandelwal|Amal Khandelwal]]||HaydeezPluto||HaydeezPluto||[http://haydeezpluto.wordpress.com/ Blog]<br />
<br />
|-<br />
|[[User:Chenming Xu|Chenming]]||Xu||[[Team L - OOP344 - 20132|Team L]]||A||[mailto:cxu38@myseneca.ca?subject=oop344 cxu38]||[[Special:Contributions/Chenming Xu|Chenming Xu]]||cxu38||cxu38|| [http://oop344.blogspot.ca/ Interesting c++]<br />
<br />
|-<br />
| [[User:Arlene Lee|Arlene]]||Lee||[[Team I - OOP344 - 20132|Team I]]||B||[mailto:alee110@myseneca.ca?subject=oop344- alee110]||[[Special:Contributions/Arlene Lee|Arlene Lee]]||Zephyr135||Zephyr135||[http://ZephyrCPP.blogspot.com C++ Stuff]<br />
<br />
|-<br />
|[[User:Elliot Kwan|Elliot]]||Kwan||[[Team K - OOP344 - 20132|Team K]]||A||[mailto:ekwan10@myseneca.ca?subject=oop344 ekwan10]||[[Special:Contributions/Elliot Kwan|Elliot]]||ElliotK||ElliotKwan||[http://elliottheguy.wordpress.com/ ElliotTheGuy]<br />
<br />
|-<br />
|[[User:Oleksandr Snurnikov|Oleksandr]]||Snurnikov||[[Team D - OOP344 - 20132|Team D]]||B||[mailto:osnurnikov@myseneca.ca?subject=oop344 osnurnikov]||[[Special:Contributions/Oleksandr Snurnikov|Oleksandr]]||admix||admix||[http://admixdev.com/ _Geek's Life]<br />
<br />
|-</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=User:Oleksandr_Snurnikov&diff=96384User:Oleksandr Snurnikov2013-06-13T19:30:08Z<p>Oleksandr Snurnikov: Created page with '===Contacts=== *[mailto:osnurnikov@myseneca.ca email:osnurnikov@myseneca.ca] *[http://admixdev.com/ Blog] *[https://github.com/admix GitHub] *IRC nick - admix'</p>
<hr />
<div>===Contacts===<br />
*[mailto:osnurnikov@myseneca.ca email:osnurnikov@myseneca.ca]<br />
*[http://admixdev.com/ Blog]<br />
*[https://github.com/admix GitHub]<br />
*IRC nick - admix</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Teams%27_List_20132_-_OOP344&diff=96279Teams' List 20132 - OOP3442013-06-13T18:04:36Z<p>Oleksandr Snurnikov: /* Team D */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
* Add your name and information to your Team Section following '''''Team X''''' Sample<br />
* Make sure your emailid is added to '''Email All''' link too<br />
* update and modify your individual team pages by clicking on your team page and editing the page. <br />
<br />
===[[Team X - OOP344 - 20132 |Team X (SAMPLE)]]===<br />
* [mailto:EmailId1@myseneca.ca?subject=oop344- name1 surname1 (EmailId1)] <br />
* [mailto:EmailId2@myseneca.ca?subject=oop344- name2 surname2 (EmailId2)] <br />
* [mailto:EmailId3@myseneca.ca?subject=oop344- name3 surname3 (EmailId3)] <br />
* [mailto:EmailId1@myseneca.ca;EmailId1@myseneca.ca;EmailId1@myseneca.ca?subject=oop344- Email All]<br />
===[[Team A - OOP344 - 20132|Team A]]=== <br />
===[[Team B - OOP344 - 20132|Team B]]=== <br />
===[[Team C - OOP344 - 20132|Team C]]=== <br />
===[[Team D - OOP344 - 20132|Team D]]===<br />
* [mailto:osnurnikov@myseneca.ca?subject=oop344- Oleksandr Snurnikov (osnurnikov)]<br />
* [mailto:mcmaceachern@myseneca.ca?subject=oop344- Matthew Conner Maceachern (mcmaceachern)]<br />
* [mailto:hhhum@myseneca.ca?subject=oop344- Herman Ho Ming Hum (hhhum)]<br />
* [mailto:osnurnikov@myseneca.ca;mcmaceachern@myseneca.ca;hhhum@myseneca.ca?subject=oop344- Email All]<br />
<br />
===[[Team E - OOP344 - 20132|Team E]]===<br />
<br />
Vadim Namniak (mailto:vnamnyak@myseneca.ca)<br />
<br />
Michael Allison (mailto:malliso1@myseneca.ca)<br />
<br />
===[[Team F - OOP344 - 20132|Team F]]=== <br />
===[[Team G - OOP344 - 20132|Team G]]=== <br />
===[[Team H - OOP344 - 20132|Team H]]===<br />
* [mailto:dtkerr@myseneca.ca?subject=oop344- Drew Kerr (dtkerr)]<br />
<br />
* [mailto:dtkerr@myseneca.ca;EmailId1@myseneca.ca;EmailId1@myseneca.ca?subject=oop344- Email All]<br />
<br />
===[[Team I - OOP344 - 20132|Team I]]===<br />
===[[Team J - OOP344 - 20132|Team J]]=== <br />
===[[Team K - OOP344 - 20132|Team K]]=== <br />
===[[Team L - OOP344 - 20132|Team L]]=== <br />
===[[Team M - OOP344 - 20132|Team M]]=== <br />
===[[Team N - OOP344 - 20132|Team N]]===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Teams%27_List_20132_-_OOP344&diff=96275Teams' List 20132 - OOP3442013-06-13T18:02:00Z<p>Oleksandr Snurnikov: /* Team D */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
* Add your name and information to your Team Section following '''''Team X''''' Sample<br />
* Make sure your emailid is added to '''Email All''' link too<br />
* update and modify your individual team pages by clicking on your team page and editing the page. <br />
<br />
===[[Team X - OOP344 - 20132 |Team X (SAMPLE)]]===<br />
* [mailto:EmailId1@myseneca.ca?subject=oop344- name1 surname1 (EmailId1)] <br />
* [mailto:EmailId2@myseneca.ca?subject=oop344- name2 surname2 (EmailId2)] <br />
* [mailto:EmailId3@myseneca.ca?subject=oop344- name3 surname3 (EmailId3)] <br />
* [mailto:EmailId1@myseneca.ca;EmailId1@myseneca.ca;EmailId1@myseneca.ca?subject=oop344- Email All]<br />
===[[Team A - OOP344 - 20132|Team A]]=== <br />
===[[Team B - OOP344 - 20132|Team B]]=== <br />
===[[Team C - OOP344 - 20132|Team C]]=== <br />
===[[Team D - OOP344 - 20132|Team D]]===<br />
* [mailto:osnurnikov@myseneca.ca?subject=oop344- Oleksandr Snurnikov (osnurnikov)]<br />
<br />
* [mailto:osnurnikov@myseneca.ca;EmailId1@myseneca.ca;EmailId1@myseneca.ca?subject=oop344- Email All]<br />
<br />
===[[Team E - OOP344 - 20132|Team E]]===<br />
<br />
Vadim Namniak (mailto:vnamnyak@myseneca.ca)<br />
<br />
Michael Allison (mailto:malliso1@myseneca.ca)<br />
<br />
===[[Team F - OOP344 - 20132|Team F]]=== <br />
===[[Team G - OOP344 - 20132|Team G]]=== <br />
===[[Team H - OOP344 - 20132|Team H]]===<br />
* [mailto:dtkerr@myseneca.ca?subject=oop344- Drew Kerr (dtkerr)]<br />
<br />
* [mailto:dtkerr@myseneca.ca;EmailId1@myseneca.ca;EmailId1@myseneca.ca?subject=oop344- Email All]<br />
<br />
===[[Team I - OOP344 - 20132|Team I]]===<br />
===[[Team J - OOP344 - 20132|Team J]]=== <br />
===[[Team K - OOP344 - 20132|Team K]]=== <br />
===[[Team L - OOP344 - 20132|Team L]]=== <br />
===[[Team M - OOP344 - 20132|Team M]]=== <br />
===[[Team N - OOP344 - 20132|Team N]]===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Team_D_-_OOP344_-_20132&diff=96266Team D - OOP344 - 201322013-06-13T17:59:24Z<p>Oleksandr Snurnikov: /* Team Members */</p>
<hr />
<div>'''''Modify this page to the needs of your team.'''''<br />
{{OOP344 Index | 20132}}<br />
== Repository ==<br />
* Github: https://github.com/Seneca-OOP344/D-Rep<br />
=== Master Status ===<br />
* Master ('''last pushed/being pushed''') by ''Team Member name''<br />
<br />
== Announcements ==<br />
== Programming Style ==<br />
=== Indentation===<br />
* 2 spaces for indentation<br />
* Do not use tab character<br />
=== Blocks ===<br />
<syntaxhighlight lang="cpp"><br />
if(condition){<br />
whatever;<br />
}</syntaxhighlight><br />
=== Variable Naming ===<br />
<syntaxhighlight lang="cpp"><br />
int main()<br />
{<br />
int a = 1;<br />
char* bookNames;<br />
char bookId<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<br />
== Team Members ==<br />
'''''Add table rows by replacing sample table row, cell values with yours'''''<br />
{| class="wikitable sortable" border="1" cellpadding="5"<br />
|+ OOP344 - Team name<br />
! First Name !! Last Name !! Section !! Seneca Id & email !! wiki id !! IRC nick !! GITHUB ID !! Blog URL<br />
|-<br />
|[[User:http://zenit.senecac.on.ca/wiki/index.php/User:Oleksandr_Snurnikov | Oleksandr]]|| Snurnikov ||B||[mailto:osnurnikov@myseneca.ca?subject=oop344- osnurnikov]||[[Special:Contributions/Wiki ID|Oleksandr Snurnikov]]||admix||[https://github.com/admix admix]|| [http://admixdev.com _Geek's Life]<br />
|-<br />
|}<br />
<br />
== Discussions ==</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Team_D_-_OOP344_-_20132&diff=96265Team D - OOP344 - 201322013-06-13T17:57:42Z<p>Oleksandr Snurnikov: /* Repository */</p>
<hr />
<div>'''''Modify this page to the needs of your team.'''''<br />
{{OOP344 Index | 20132}}<br />
== Repository ==<br />
* Github: https://github.com/Seneca-OOP344/D-Rep<br />
=== Master Status ===<br />
* Master ('''last pushed/being pushed''') by ''Team Member name''<br />
<br />
== Announcements ==<br />
== Programming Style ==<br />
=== Indentation===<br />
* 2 spaces for indentation<br />
* Do not use tab character<br />
=== Blocks ===<br />
<syntaxhighlight lang="cpp"><br />
if(condition){<br />
whatever;<br />
}</syntaxhighlight><br />
=== Variable Naming ===<br />
<syntaxhighlight lang="cpp"><br />
int main()<br />
{<br />
int a = 1;<br />
char* bookNames;<br />
char bookId<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<br />
== Team Members ==<br />
'''''Add table rows by replacing sample table row, cell values with yours'''''<br />
{| class="wikitable sortable" border="1" cellpadding="5"<br />
|+ OOP344 - Team name<br />
! First Name !! Last Name !! Section !! Seneca Id & email !! wiki id !! IRC nick !! GITHUB ID !! Blog URL<br />
|-<br />
|[[User:http://zenit.senecac.on.ca/wiki/index.php/User:Oleksandr_Snurnikov | Oleksandr]]|| Snurnikov ||B||[mailto:osnurnikov@myseneca.ca?subject=oop344- osnurnikov]||[[Special:Contributions/Wiki ID|Oleksandr Snurnikov]]||admix||admix|| [http://admixdev.com _Geek's Life]<br />
|-<br />
|}<br />
<br />
== Discussions ==</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Team_D_-_OOP344_-_20132&diff=96261Team D - OOP344 - 201322013-06-13T17:56:22Z<p>Oleksandr Snurnikov: /* Team Members */</p>
<hr />
<div>'''''Modify this page to the needs of your team.'''''<br />
{{OOP344 Index | 20132}}<br />
== Repository ==<br />
* Github: https://github.com/Seneca-OOP344/whatever<br />
=== Master Status ===<br />
* Master ('''last pushed/being pushed''') by ''Team Member name''<br />
== Announcements ==<br />
== Programming Style ==<br />
=== Indentation===<br />
* 2 spaces for indentation<br />
* Do not use tab character<br />
=== Blocks ===<br />
<syntaxhighlight lang="cpp"><br />
if(condition){<br />
whatever;<br />
}</syntaxhighlight><br />
=== Variable Naming ===<br />
<syntaxhighlight lang="cpp"><br />
int main()<br />
{<br />
int a = 1;<br />
char* bookNames;<br />
char bookId<br />
return 0;<br />
}<br />
</syntaxhighlight><br />
<br />
== Team Members ==<br />
'''''Add table rows by replacing sample table row, cell values with yours'''''<br />
{| class="wikitable sortable" border="1" cellpadding="5"<br />
|+ OOP344 - Team name<br />
! First Name !! Last Name !! Section !! Seneca Id & email !! wiki id !! IRC nick !! GITHUB ID !! Blog URL<br />
|-<br />
|[[User:http://zenit.senecac.on.ca/wiki/index.php/User:Oleksandr_Snurnikov | Oleksandr]]|| Snurnikov ||B||[mailto:osnurnikov@myseneca.ca?subject=oop344- osnurnikov]||[[Special:Contributions/Wiki ID|Oleksandr Snurnikov]]||admix||admix|| [http://admixdev.com _Geek's Life]<br />
|-<br />
|}<br />
<br />
== Discussions ==</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Teams%27_List_20132_-_OOP344&diff=96256Teams' List 20132 - OOP3442013-06-13T17:51:47Z<p>Oleksandr Snurnikov: /* Team D */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
* Add your name and information to your Team Section following '''''Team X''''' Sample<br />
* Make sure your emailid is added to '''Email All''' link too<br />
* update and modify your individual team pages by clicking on your team page and editing the page. <br />
<br />
===[[Team X - OOP344 - 20132 |Team X (SAMPLE)]]===<br />
* [mailto:EmailId1@myseneca.ca?subject=oop344- name1 surname1 (EmailId1)] <br />
* [mailto:EmailId2@myseneca.ca?subject=oop344- name2 surname2 (EmailId2)] <br />
* [mailto:EmailId3@myseneca.ca?subject=oop344- name3 surname3 (EmailId3)] <br />
* [mailto:EmailId1@myseneca.ca;EmailId1@myseneca.ca;EmailId1@myseneca.ca?subject=oop344- Email All]<br />
===[[Team A - OOP344 - 20132|Team A]]=== <br />
===[[Team B - OOP344 - 20132|Team B]]=== <br />
===[[Team C - OOP344 - 20132|Team C]]=== <br />
===[[Team D - OOP344 - 20132|Team D]]===<br />
* [mailto:osnurnikov@myseneca.ca?subject=oop344- Oleksandr Snurnikov (osnurnikov)]<br />
<br />
===[[Team E - OOP344 - 20132|Team E]]===<br />
<br />
Vadim Namniak (mailto:vnamnyak@myseneca.ca)<br />
<br />
===[[Team F - OOP344 - 20132|Team F]]=== <br />
===[[Team G - OOP344 - 20132|Team G]]=== <br />
===[[Team H - OOP344 - 20132|Team H]]=== <br />
===[[Team I - OOP344 - 20132|Team I]]===<br />
===[[Team J - OOP344 - 20132|Team J]]=== <br />
===[[Team K - OOP344 - 20132|Team K]]=== <br />
===[[Team L - OOP344 - 20132|Team L]]=== <br />
===[[Team M - OOP344 - 20132|Team M]]=== <br />
===[[Team N - OOP344 - 20132|Team N]]===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=96171Weekly Schedule 20132 - OOP3442013-06-11T04:00:08Z<p>Oleksandr Snurnikov: /* This Week 5 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual [http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/ Pure Virtual & Abstract Base Classes]<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=96170Weekly Schedule 20132 - OOP3442013-06-11T03:58:00Z<p>Oleksandr Snurnikov: /* This Week 5 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
*: [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
<br />
* Type Casing in C++.<br />
*: [https://www.youtube.com/watch?v=oa_fWKQACAo Casting in C++ (YouTube Video)]<br />
*: [http://www.cplusplus.com/doc/tutorial/typecasting/ Type casting in detail (Documentation)]<br />
<br />
* Void Type<br />
*: [http://msdn.microsoft.com/en-us/library/ebh2k5sc.aspx Pointers to Type Void (MSDN link)]<br />
<br />
* Function Pointers<br />
*: [https://www.youtube.com/watch?v=ZBJoGKVnZYI C++ Function Pointers].<br />
*: [http://www.learncpp.com/cpp-tutorial/78-function-pointers/ C++ Function Pointers in detail].<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
<br />
* C++ Command Line Arguments<br />
*: [https://www.youtube.com/watch?v=rAVIm-g8alQ Basic Tutorial].<br />
<br />
* Variable Arguments Handling<br />
*: [http://www.cplusplus.com/reference/cstdarg/ <stdarg.h> types & macros].<br />
<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: [http://www.learncpp.com/cpp-tutorial/42-global-variables/ extern]<br />
** const<br />
**: [http://www.cprogramming.com/reference/pointers/const_pointers.html pointers]<br />
**: methods<br />
* [http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html compilation process]<br />
* [http://www.cplusplus.com/doc/tutorial/preprocessor/ pre-processor directives]<br />
*: [http://en.wikipedia.org/wiki/Include_guard Include safe guards]<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables [http://stackoverflow.com/questions/3698043/static-variables-in-c crowd source explanation]<br />
*: [http://www.learncpp.com/cpp-tutorial/812-static-member-functions/ Methods]<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=96025Weekly Schedule 20132 - OOP3442013-06-06T15:42:06Z<p>Oleksandr Snurnikov: /* This Week 2 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review - [http://rogerdudler.github.io/git-guide/ Git_Guide]<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: extern<br />
** const<br />
**: pointers<br />
**: methods<br />
* compilation process<br />
* pre-processor directives<br />
*: Include safe guards<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
* Const<br />
*: variable declaration <br />
*: Pointers<br />
*: References <br />
*: Methods<br />
* Statics<br />
*: variables<br />
*: Methods<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95993Weekly Schedule 20132 - OOP3442013-06-05T18:14:42Z<p>Oleksandr Snurnikov: /* This Week 3 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list [http://admixdev.com/2013/06/05/59/ example]<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: extern<br />
** const<br />
**: pointers<br />
**: methods<br />
* compilation process<br />
* pre-processor directives<br />
*: Include safe guards<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95989Weekly Schedule 20132 - OOP3442013-06-05T17:28:58Z<p>Oleksandr Snurnikov: /* This Week 3 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* [http://msdn.microsoft.com/en-us/library/05w82thz(v=vs.80).aspx typedefs]<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jungmin-ji.tumblr.com/post/51031179606/simple-char-to-int SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/asctoint_30.html SecB Kevin Sidhu]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
:[http://ksidhucode.blogspot.ca/2013/05/nstrcat.html SecB Kevin Sidhu]<br />
<br />
:[http://nstrcat.blogspot.ca/ SecB Prabhleen Bhupal]<br />
<br />
:[http://kazilemannor.wordpress.com/2013/06/05/to-do3-char-nstrcat/ SecB Zhenyang Chen]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
* [http://lisyonok85.wordpress.com/2013/05/29/project/ Project Diagram (as drawn in class)]<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: extern<br />
** const<br />
**: pointers<br />
**: methods<br />
* compilation process<br />
* pre-processor directives<br />
*: Include safe guards<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
*[http://brackethunter.blogspot.ca/2013/06/moveboxcpp.html SecB Brad Stuart - Movebox.cpp]<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95899Weekly Schedule 20132 - OOP3442013-05-29T15:27:50Z<p>Oleksandr Snurnikov: /* This Week 4 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* typedefs<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jijungmin90.tumblr.com/post/51031179606/simple-char-to-intlI SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: extern<br />
** const<br />
**: pointers<br />
**: methods<br />
* compilation process<br />
* pre-processor directives<br />
*: Include safe guards<br />
* [http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ Virtuals] <br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95898Weekly Schedule 20132 - OOP3442013-05-29T15:26:18Z<p>Oleksandr Snurnikov: /* This Week 4 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* typedefs<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jijungmin90.tumblr.com/post/51031179606/simple-char-to-intlI SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/asctoint-11-now-with-range-checking-and.html Brad Stuart's Improved Solution]<br />
<br />
:[http://markieta.blogspot.ca/2013/05/asctoint.html Christopher Markieta]<br />
<br />
:[http://haydeezpluto.wordpress.com/2013/05/26/ascii-to-integer-conversion/ Amal Khandelwal]<br />
<br />
:[http://tthaninayagam.blogspot.ca/2013/05/asctoint.html SecB Thanushaa Thaninayagam]<br />
<br />
:[http://chisa-takata.tumblr.com/ SecA Chisa Takata]<br />
<br />
:[http://dimpleamin204.blogspot.ca/ SecA Dimple Amin]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
:[http://brackethunter.blogspot.ca/2013/05/frustrationnstrcatdes.html Brad Stuart]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/nstrcatcpp-no-fail-safe-yet-to-be-added.html SecA Matt MacEachern]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/27/code-of-nstrcat-a-function-to-concatinate-unknow-amount-of-strings/ SECTION_B DONG LI]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
*: bio, cio<br />
* Declaration modifiers <br />
*: auto<br />
*: [http://www.learncpp.com/cpp-tutorial/811-static-member-variables/ static]<br />
*: extern<br />
** const<br />
**: pointers<br />
**: methods<br />
* compilation process<br />
* pre-processor directives<br />
*: Include safe guards<br />
* Virtuals<br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95815Weekly Schedule 20132 - OOP3442013-05-23T06:39:08Z<p>Oleksandr Snurnikov: /* Blog posts 3 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* typedefs<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jijungmin90.tumblr.com/post/51031179606/simple-char-to-intlI think SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[https://github.com/admix/admixSoft/blob/master/OOP344/nstrcat.cpp direct link to the source code on the github]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
*: bio, cio<br />
* Virtuals<br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95814Weekly Schedule 20132 - OOP3442013-05-23T06:36:51Z<p>Oleksandr Snurnikov: /* Blog posts 3 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* typedefs<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jijungmin90.tumblr.com/post/51031179606/simple-char-to-intlI think SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
:[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 SecB Oleksandr Snurnikov]<br />
:*[http://admix-dev.tumblr.com/post/51133316724/const-char-nstrcat-char-to-strcat-with-1 direct link to the source code on the github]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
*: bio, cio<br />
* Virtuals<br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95813Weekly Schedule 20132 - OOP3442013-05-23T01:47:52Z<p>Oleksandr Snurnikov: /* To Do 3 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Pre-Processor directives<br />
*: define (macros)<br />
*: include<br />
* typedefs<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* friends<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
* program: char* nstrcat(char* name, ...) //Basically strcat with >= 1 arguments<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
* <u>'''AscToInt Solutions'''</u><br />
<br />
:[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
:[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
:[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
<br />
:[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ SecA Drew Terrance Kerr]<br />
<br />
:[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
:[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
:[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
:[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
:[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
<br />
:[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
<br />
:[http://jijungmin90.tumblr.com/post/51031179606/simple-char-to-intlI think SecA Jungmin Ji]<br />
<br />
:[http://namniak.blogspot.ca/2013/05/asctoint.html Vadim Namniak's Solution]<br />
<br />
:[http://zhunxue1912.wordpress.com/2013/05/21/int-asctointconst-char-num/ Zhun Xue]<br />
<br />
* <u>'''nstrcat Solutions'''</u><br />
<br />
:[http://dtkerroop344.wordpress.com/2013/05/22/concatenating-an-arbitrary-number-of-strings/ SecA Drew Terrance Kerr]<br />
<br />
:[http://hhhum0.blogspot.ca/2013/05/const-char-nstrcatchar-des.html SecA Herman Hum]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
* Project introduction<br />
*: bio, cio<br />
* Virtuals<br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
<br />
=== To Do 4===<br />
<br />
=== Resources 4===<br />
=== blog posts 4===<br />
<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95727Weekly Schedule 20132 - OOP3442013-05-22T01:49:25Z<p>Oleksandr Snurnikov: /* Week 3 - May 19 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* Virtuals<br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
* operator overload review<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
<br />
http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI<br />
<br />
=== Resources 3===<br />
=== Blog posts 3===<br />
*[http://lisyonok85.wordpress.com/?p=7 SecA Artem's Solution]<br />
<br />
*[http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI]<br />
<br />
*[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
*: An example of a function designed to convert a string to an integer.<br />
<br />
*[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
*[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ Another AscToInt implementation]<br />
*:SecA dtkerr<br />
<br />
*[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
*[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
*[http://happyivyli.blogspot.ca/2013/05/solution-of-int-asctointconst-char-num.html SecB Na Li]<br />
<br />
*[http://hhhum0.blogspot.ca/2013/05/blog-post.html SecA Herman Hum]<br />
<br />
*[http://shahzyn.blogspot.ca/2013/05/ascii-to-int.html SecA Shehzin Arshad]<br />
<br />
*[http://joshem31.wordpress.com/2013/05/21/my-first-challenge-my-first-asctoint-function/ SecA Jose Ramirez]<br />
*[http://mattmaceachern.blogspot.ca/2013/05/blog-post.html SecA Matt MacEachern]<br />
*[http://jijungmin90.tumblr.com/post/51031179606/simple-char-to-intlI think SecA Jungmin Ji]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
=== To Do 4===<br />
=== Resources 4===<br />
=== blog posts 4===<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikovhttps://wiki.cdot.senecacollege.ca/w/index.php?title=Weekly_Schedule_20132_-_OOP344&diff=95668Weekly Schedule 20132 - OOP3442013-05-21T19:10:45Z<p>Oleksandr Snurnikov: /* blog posts 3 */</p>
<hr />
<div>{{OOP344 Index | 20132}}<br />
<br />
Under Construction!<br />
<br />
== Week 1 - May 5 ==<br />
<br />
=== This Week 1 ===<br />
<br />
* Introduction to Open Source development.<br />
* Collaboration Tools:<br />
** Wiki<br />
** Blog<br />
** IRC<br />
** Code Repository<br />
**: Git, Svn, ....<br />
** Big Blue Button<br />
* Etherpad<br />
** [http://etherpad.proximity.on.ca:9001 Seneca Etherpad]<br />
** http://primarypad.com/<br />
* Object Orientation Review<br />
* C Review<br />
*: pointers<br />
*: pointers and arrays<br />
<br />
=== To Do 1===<br />
==== Due May 7th (Tuesday) 18:00 ====<br />
# Create an account on [https://github.com github]<br />
## Make sure your account name is presentable. This name will stay with you forever.<br />
## Make sure your information on github is complete (real name, email, etc...) <br />
# Send ONE email to [mailto:fardad.soleimanloo@senecacollege.ca?subject=344Github20132 me] containing your git hub id<br />
#: subject of the email should be '''''344Github20132'''''<br />
#: '''''email content'''''<br />
#: name: Your Name (exactly as it appears on your Seneca student card)<br />
#: nickname: Your Nick name<br />
#: Git hub ID: your Github id <br />
==== Due by May 13th, 23:59 ====<br />
# Create a [http://en.wikipedia.org/wiki/Blog blog] (anywhere you like)<br />
# Join the IRC by [http://www.wikihow.com/Register-a-User-Name-on-Freenode registering your nickname on freenode] server and joining the #seneca-oop344 channel for 344 related dialog<br />
#: Additional channels of interest: #seneca to interact with all Seneca students participating in opensource projects, and #seneca-social for Social (off-topic) dialog.<br />
# Read [http://git-scm.com/book Pro-git book]<br />
#: Chapter One and Chapter Two<br />
# Create an account on this wiki: send an email to [mailto:cdot-wiki-admin@senecac.on.ca?subject=Wiki+account+request cdot-wiki-admin@senecac.on.ca] and ask for an account, an email will be sent back to you with your userid and a temporary password; make sure you have the following included in your email.<br />
#* Email subject: Wiki Account Request<br />
#* The subject you are enrolled in: "OOP344"<br />
#* Your Seneca user id<br />
#* Send this email from your Seneca Account only<br />
# Learn how to do basic editing in a wiki<br />
<br />
=== Resources 1 ===<br />
* Git<br />
** [http://git-scm.com/book Pro-git book]<br />
** [[GIT for OOP344 Projects]]<br />
** Great 15 minutes tutorial that will give you basic understanding of Git<br />
**: [http://try.github.com/levels/1/challenges/1 Try GitHub]<br />
** [http://www.sourcetreeapp.com Git GUI Client for Mac ] <br />
** [http://windows.github.com/ Github Client for Windows] <br />
** [https://help.github.com/articles/generating-ssh-keys Generating SSH keys for github]<br />
* Wiki<br />
* [http://www.wikihow.com/Register-a-User-Name-on-Freenode How to register your IRC nickname on freenode]<br />
* [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Compare IRC clients]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page How To edit Wiki pages]<br />
* [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet How To edit Wiki Cheatsheet]<br />
* Blogs<br />
** [http://wordpress.com/ Wordpress]<br />
** [http://www.blogger.com/ Blogger]<br />
** [https://www.tumblr.com/ Tumblr]<br />
* IRC Clients:<br />
** [http://www.silverex.org/download/ XChat 2 (Windows)]<br />
** [http://colloquy.info/downloads.html Colloquy Colloguy (Mac)] <br />
** [https://addons.mozilla.org/en-US/firefox/addon/chatzilla/ ChatZilla (Multi-platform)]<br />
** [http://clicksandwhistles.com/download.php Clicks & Whistles (Windows)]<br />
* How to Install <br />
** [http://wiki.tryphon.eu/how_to_install_xchat XChat]<br />
== Week 2 - May 12==<br />
=== This Week 2===<br />
* Git review<br />
*: [http://git-scm.com/docs/git-clone clone], [http://git-scm.com/docs/git-pull pull], [http://git-scm.com/docs/git-push push]<br />
*: [http://git-scm.com/docs/git-add add], [http://git-scm.com/docs/git-commit commit], [http://git-scm.com/docs/git-branch branch]<br />
* Operators<br />
*: review<br />
*: Logical<br />
*: Arithmetic<br />
*: Lazy evaluation<br />
*: operators in C <br />
* pointers (continued)<br />
*: arrays<br />
*: arithmetic<br />
*: void<br />
*: functions<br />
* Default Args<br />
<br />
=== To Do 2===<br />
=== Resources 2===<br />
<br />
* [http://www.cplusplus.com/doc/tutorial/pointers/ Everything you always wanted to know about pointers, but were afraid to ask]<br />
*: Single resource that will give you all the knowledge you need about pointers, including information given in the last two classes. WARNING! Reading online tutorials is NOT a substitute to visiting in-class lectures.<br />
<br />
=== blog posts 2===<br />
<br />
* [http://www.admix-dev.tumblr.com/post/50621074633/oliver-steele-created-a-great-image-explaining-how Easy picture explanation of how the Git works]<br />
*: Easy and detailed explanation of Git transfer procedures using schema.<br />
* [http://admix-dev.tumblr.com/post/50350903940/adding-auto-completion-to-the-git-commands-mac-os Adding auto-completion to the git commands on Mac OS X]<br />
*: Short guide how to set up auto-completion for the '''git''' commands on your Mac (using '''Tab''' to complete commands).<br />
<br />
== Week 3 - May 19==<br />
=== This Week 3===<br />
* Real Signature of main()<br />
* Variable Argument list<br />
* [http://www.cplusplus.com/doc/tutorial/namespaces/ Namespaces]<br />
* Virtuals<br />
*: Review<br />
*: Pure Virtual<br />
*: Abstract Base Classes<br />
* operator overload review<br />
<br />
=== To Do 3===<br />
* program: int AscToInt(const char *num);<br />
<br />
http://dongdli.wordpress.com/2013/05/21/codes-of-the-function-int-asctoint-const-char-num/ Codes from SECTION_B DONG LI<br />
<br />
=== Resources 3===<br />
=== blog posts 3===<br />
*[http://malliso1.wordpress.com/2013/05/21/converting-a-string-of-numbers-to-an-integer/ Converting a string of numbers to an integer.]<br />
*: An example of a function designed to convert a string to an integer.<br />
<br />
*[http://matthewtorrance.blogspot.ca/2013/05/asctoint.html AscToInt Function]<br />
<br />
*[http://dtkerroop344.wordpress.com/2013/05/21/the-ascii-conversion-challenge/ Another AscToInt implementation]<br />
<br />
*[http://ssuduruk.blogspot.ca/2013/05/asctointconst-char-num.html SecA Chiyoung Choi]<br />
<br />
*[http://admix-dev.tumblr.com/post/51005560090/conversion-char-into-int SecB Oleksandr Snurnikov, (ascToInt() function) ]<br />
<br />
== Week 4 - May 26==<br />
=== This Week 4 ===<br />
=== To Do 4===<br />
=== Resources 4===<br />
=== blog posts 4===<br />
== Week 5 - June 2==<br />
=== This Week 5===<br />
=== To Do 5===<br />
=== Resources 5===<br />
=== blog posts 5===<br />
== Week 6 - June 9==<br />
=== This Week 6===<br />
=== To Do 6===<br />
=== Resources 6===<br />
=== blog posts 6===<br />
== Week 7 - June 16==<br />
=== This Week 7===<br />
=== To Do 7===<br />
=== Resources 7===<br />
=== blog posts ===<br />
== Week 8 - June 23 (Study Break)==<br />
=== This Week 8===<br />
=== To Do 8===<br />
=== Resources 8===<br />
=== blog posts 8===<br />
== Week 9 - June 30==<br />
=== This Week 9===<br />
=== To Do 9===<br />
=== Resources 9===<br />
=== blog posts 9===<br />
== Week 10 - July 7==<br />
=== This Week 10===<br />
=== To Do 10===<br />
=== Resources 10===<br />
=== blog posts 10===<br />
== Week 11 - July 14==<br />
=== This Week 11===<br />
=== To Do 11===<br />
=== Resources 11===<br />
=== blog posts 11===<br />
== Week 12 - July 21==<br />
=== This Week 12===<br />
=== To Do 12===<br />
=== Resources 12===<br />
=== blog posts 12===<br />
== Week 13 - July 28==<br />
=== This Week 13===<br />
=== To Do 13===<br />
=== Resources 13===<br />
=== blog posts 13===<br />
== Week 14 - August 4==<br />
=== This Week 14===<br />
=== To Do 14===<br />
=== Resources 14===<br />
=== blog posts 14===<br />
== Week 15 - August 11 (Exam Week)==<br />
=== This Week 15===<br />
=== To Do 15===<br />
=== Resources 15===<br />
=== blog posts 15===</div>Oleksandr Snurnikov