#include <stdio.h>
#include <time.h>
typedef struct {
union {
char * company;
char * school;
char * project;
} ;
union {
char * location;
char * url;
} ;
union {
char * title;
char * program;
} ;
time_t started;
time_t left;
char * description[ ] ;
} thing_t;
typedef thing_t job_t;
typedef thing_t school_t;
typedef thing_t project_t;
#define CURRENT 0 /* I wasn't alive at the Unix epoch, so that'll work */
/* Contact Information */
char * name = "Kevin R. Lange" ;
char * email = "klange@toaruos.org" ;
char * address = "1045 Mission St, Apt 440\n "
"San Francisco, CA 94103" ;
/* Education */
school_t uiuc = {
.school = "University of Illinois at Urbana-Champaign" ,
.location = "Urbana, IL" ,
.program = "BS Computer Science" ,
.started = 1251158400 ,
.left = 1336608000 ,
.description = {
"Minor in International Studies in Engineering, Japan" ,
"Focused on systems software courses" ,
NULL
}
} ;
school_t hit = {
.school = "Hiroshima Institute of Technology" ,
.location = "Hiroshima, Japan" ,
.program = "Study Abroad" ,
.started = 1274745600 ,
.left = 1278288000 ,
.description = {
"Cultural exchange program" ,
NULL
}
} ;
school_t * schools[ ] = {
& uiuc,
& hit,
NULL
} ;
/* Projects */
project_t compiz = {
.project = "Compiz Window Manager" ,
.url = "http://c...content-available-to-author-only...z.org" ,
.title = "Developer" ,
.started = 1201392000 ,
.left = 1264291200 ,
.description = {
"Minor plugin contributor" ,
"Various research projects" ,
NULL
}
} ;
project_t toaruos = {
.project = "ToAruOS" ,
.url = "https://g...content-available-to-author-only...b.com/klange/toaruos" ,
.title = "Lead" ,
.started = 1295049600 ,
.left = CURRENT,
.description = {
"Hobby x86 Unix-like kernel and userspace" ,
"Advanced in-house GUI with compositing window manager" ,
NULL
}
} ;
project_t * projects[ ] = {
& toaruos,
& compiz,
NULL
} ;
/* Employment History */
job_t yelp = {
.company = "Yelp, Inc." ,
.location = "San Francisco, CA" ,
.title = "Software Engineer, i18n" ,
.started = 1339977600 ,
.left = CURRENT,
.description = {
"Developed several internal tools and libraries" ,
"Provided critical input and design work for Yelp's launch in Japan" ,
NULL
}
} ;
job_t apple_internship = {
.company = "Apple Inc." ,
.location = "Cupertino, CA" ,
.title = "Software Engineering Intern" ,
.started = 1306886400 ,
.left = 1314662400 ,
.description = {
"Built software framework for testing and verification of desktop retina display modes" ,
"Assisted other interns with Unix fundamentals" ,
NULL
}
} ;
job_t * jobs[ ] = {
& yelp,
& apple_internship,
NULL
} ;
void print_thing( thing_t * thing) {
char started[ 100 ] ;
char left[ 100 ] ;
struct tm * ti;
int i = 0 ;
printf ( "%s at %s - %s\n " , thing
-> title
, thing
-> company
, thing
-> location
) ;
strftime ( started
, 100 , "%B %d, %Y" , ti
) ;
if ( thing-> left == CURRENT) {
printf ( "%s to now\n " , started
) ; } else {
printf ( "%s to %s\n " , started
, left
) ; }
char ** desc = thing-> description;
while ( * desc) {
desc++;
}
}
int main( int argc, char ** argv) {
printf ( "%s\n %s\n %s\n \n " , name
, email
, address
) ;
school_t ** s = schools;
while ( * s) {
print_thing( * s) ;
s++;
}
job_t ** j = jobs;
while ( * j) {
print_thing( * j) ;
j++;
}
project_t ** p = projects;
while ( * p) {
print_thing( * p) ;
p++;
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+Cgp0eXBlZGVmIHN0cnVjdCB7Cgl1bmlvbiB7CgkJY2hhciAqIGNvbXBhbnk7CgkJY2hhciAqIHNjaG9vbDsKCQljaGFyICogcHJvamVjdDsKCX07Cgl1bmlvbiB7CgkJY2hhciAqIGxvY2F0aW9uOwoJCWNoYXIgKiB1cmw7Cgl9OwoJdW5pb24gewoJCWNoYXIgKiB0aXRsZTsKCQljaGFyICogcHJvZ3JhbTsKCX07CgoJdGltZV90IHN0YXJ0ZWQ7Cgl0aW1lX3QgbGVmdDsKCgljaGFyICogZGVzY3JpcHRpb25bXTsKfSB0aGluZ190OwoKdHlwZWRlZiB0aGluZ190IGpvYl90Owp0eXBlZGVmIHRoaW5nX3Qgc2Nob29sX3Q7CnR5cGVkZWYgdGhpbmdfdCBwcm9qZWN0X3Q7CgojZGVmaW5lIENVUlJFTlQgMCAvKiBJIHdhc24ndCBhbGl2ZSBhdCB0aGUgVW5peCBlcG9jaCwgc28gdGhhdCdsbCB3b3JrICovCgovKiBDb250YWN0IEluZm9ybWF0aW9uICovCmNoYXIgKiBuYW1lICAgID0gIktldmluIFIuIExhbmdlIjsKY2hhciAqIGVtYWlsICAgPSAia2xhbmdlQHRvYXJ1b3Mub3JnIjsKY2hhciAqIGFkZHJlc3MgPSAiMTA0NSBNaXNzaW9uIFN0LCBBcHQgNDQwXG4iCiAgICAgICAgICAgICAgICAgIlNhbiBGcmFuY2lzY28sIENBIDk0MTAzIjsKCi8qIEVkdWNhdGlvbiAqLwpzY2hvb2xfdCB1aXVjID0gewoJLnNjaG9vbCAgID0gIlVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbiIsCgkubG9jYXRpb24gPSAiVXJiYW5hLCBJTCIsCgkucHJvZ3JhbSAgPSAiQlMgQ29tcHV0ZXIgU2NpZW5jZSIsCgkuc3RhcnRlZCAgPSAxMjUxMTU4NDAwLAoJLmxlZnQgICAgID0gMTMzNjYwODAwMCwKCS5kZXNjcmlwdGlvbiA9IHsKCQkiTWlub3IgaW4gSW50ZXJuYXRpb25hbCBTdHVkaWVzIGluIEVuZ2luZWVyaW5nLCBKYXBhbiIsCgkJIkZvY3VzZWQgb24gc3lzdGVtcyBzb2Z0d2FyZSBjb3Vyc2VzIiwKCQlOVUxMCgl9Cn07CgpzY2hvb2xfdCBoaXQgPSB7Cgkuc2Nob29sICAgPSAiSGlyb3NoaW1hIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IiwKCS5sb2NhdGlvbiA9ICJIaXJvc2hpbWEsIEphcGFuIiwKCS5wcm9ncmFtICA9ICJTdHVkeSBBYnJvYWQiLAoJLnN0YXJ0ZWQgID0gMTI3NDc0NTYwMCwKCS5sZWZ0ICAgICA9IDEyNzgyODgwMDAsCgkuZGVzY3JpcHRpb24gPSB7CgkJIkN1bHR1cmFsIGV4Y2hhbmdlIHByb2dyYW0iLAoJCU5VTEwKCX0KfTsKCnNjaG9vbF90ICogc2Nob29sc1tdID0gewoJJnVpdWMsCgkmaGl0LAoJTlVMTAp9OwoKLyogUHJvamVjdHMgKi8KcHJvamVjdF90IGNvbXBpeiA9IHsKCS5wcm9qZWN0ID0gIkNvbXBpeiBXaW5kb3cgTWFuYWdlciIsCgkudXJsICAgICA9ICJodHRwOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uei5vcmciLAoJLnRpdGxlICAgPSAiRGV2ZWxvcGVyIiwKCS5zdGFydGVkID0gMTIwMTM5MjAwMCwKCS5sZWZ0ICAgID0gMTI2NDI5MTIwMCwKCS5kZXNjcmlwdGlvbiA9IHsKCQkiTWlub3IgcGx1Z2luIGNvbnRyaWJ1dG9yIiwKCQkiVmFyaW91cyByZXNlYXJjaCBwcm9qZWN0cyIsCgkJTlVMTAoJfQp9OwoKcHJvamVjdF90IHRvYXJ1b3MgPSB7CgkucHJvamVjdCA9ICJUb0FydU9TIiwKCS51cmwgICAgID0gImh0dHBzOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYi5jb20va2xhbmdlL3RvYXJ1b3MiLAoJLnRpdGxlICAgPSAiTGVhZCIsCgkuc3RhcnRlZCA9IDEyOTUwNDk2MDAsCgkubGVmdCAgICA9IENVUlJFTlQsCgkuZGVzY3JpcHRpb24gPSB7CgkJIkhvYmJ5IHg4NiBVbml4LWxpa2Uga2VybmVsIGFuZCB1c2Vyc3BhY2UiLAoJCSJBZHZhbmNlZCBpbi1ob3VzZSBHVUkgd2l0aCBjb21wb3NpdGluZyB3aW5kb3cgbWFuYWdlciIsCgkJTlVMTAoJfQp9OwoKcHJvamVjdF90ICogcHJvamVjdHNbXSA9IHsKCSZ0b2FydW9zLAoJJmNvbXBpeiwKCU5VTEwKfTsKCi8qIEVtcGxveW1lbnQgSGlzdG9yeSAqLwoKam9iX3QgeWVscCA9IHsKCS5jb21wYW55ICA9ICJZZWxwLCBJbmMuIiwKCS5sb2NhdGlvbiA9ICJTYW4gRnJhbmNpc2NvLCBDQSIsCgkudGl0bGUgICAgPSAiU29mdHdhcmUgRW5naW5lZXIsIGkxOG4iLAoJLnN0YXJ0ZWQgID0gMTMzOTk3NzYwMCwKCS5sZWZ0ICAgICA9IENVUlJFTlQsCgkuZGVzY3JpcHRpb24gPSB7CgkJIkRldmVsb3BlZCBzZXZlcmFsIGludGVybmFsIHRvb2xzIGFuZCBsaWJyYXJpZXMiLAoJCSJQcm92aWRlZCBjcml0aWNhbCBpbnB1dCBhbmQgZGVzaWduIHdvcmsgZm9yIFllbHAncyBsYXVuY2ggaW4gSmFwYW4iLAoJCU5VTEwKCX0KfTsKCmpvYl90IGFwcGxlX2ludGVybnNoaXAgPSB7CgkuY29tcGFueSAgPSAiQXBwbGUgSW5jLiIsCgkubG9jYXRpb24gPSAiQ3VwZXJ0aW5vLCBDQSIsCgkudGl0bGUgICAgPSAiU29mdHdhcmUgRW5naW5lZXJpbmcgSW50ZXJuIiwKCS5zdGFydGVkICA9IDEzMDY4ODY0MDAsCgkubGVmdCAgICAgPSAxMzE0NjYyNDAwLAoJLmRlc2NyaXB0aW9uID0gewoJCSJCdWlsdCBzb2Z0d2FyZSBmcmFtZXdvcmsgZm9yIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbiBvZiBkZXNrdG9wIHJldGluYSBkaXNwbGF5IG1vZGVzIiwKCQkiQXNzaXN0ZWQgb3RoZXIgaW50ZXJucyB3aXRoIFVuaXggZnVuZGFtZW50YWxzIiwKCQlOVUxMCgl9Cn07Cgpqb2JfdCAqIGpvYnNbXSA9IHsKCSZ5ZWxwLAoJJmFwcGxlX2ludGVybnNoaXAsCglOVUxMCn07Cgp2b2lkIHByaW50X3RoaW5nKHRoaW5nX3QgKiB0aGluZykgewoJY2hhciBzdGFydGVkWzEwMF07CgljaGFyIGxlZnRbMTAwXTsKCXN0cnVjdCB0bSAqIHRpOwoJaW50IGkgPSAwOwoKCXByaW50ZigiJXMgYXQgJXMgLSAlc1xuIiwgdGhpbmctPnRpdGxlLCB0aGluZy0+Y29tcGFueSwgdGhpbmctPmxvY2F0aW9uKTsKCgl0aSA9IGxvY2FsdGltZSgmdGhpbmctPnN0YXJ0ZWQpOwoJc3RyZnRpbWUoc3RhcnRlZCwgMTAwLCAiJUIgJWQsICVZIiwgdGkpOwoKCWlmICh0aGluZy0+bGVmdCA9PSBDVVJSRU5UKSAgewoJCXByaW50ZigiJXMgdG8gbm93XG4iLCBzdGFydGVkKTsKCX0gZWxzZSB7CgkJdGkgPSBsb2NhbHRpbWUoJnRoaW5nLT5sZWZ0KTsKCQlzdHJmdGltZShsZWZ0LCAgICAxMDAsICIlQiAlZCwgJVkiLCB0aSk7CgkJcHJpbnRmKCIlcyB0byAlc1xuIiwgc3RhcnRlZCwgbGVmdCk7Cgl9CgoJY2hhciAqKiBkZXNjID0gdGhpbmctPmRlc2NyaXB0aW9uOwoJd2hpbGUgKCpkZXNjKSB7CgkJcHJpbnRmKCItICVzXG4iLCAqZGVzYyk7CgkJZGVzYysrOwoJfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KSB7CgoJcHJpbnRmKCIlc1xuJXNcbiVzXG5cbiIsIG5hbWUsIGVtYWlsLCBhZGRyZXNzKTsKCglwdXRzKCJFZHVjYXRpb25cbiIpOwoJc2Nob29sX3QgKiogcyA9IHNjaG9vbHM7Cgl3aGlsZSAoKnMpIHsKCQlwcmludF90aGluZygqcyk7CgkJcHV0cygiIik7CgkJcysrOwoJfQoKCXB1dHMoIkVtcGxveW1lbnRcbiIpOwoJam9iX3QgKiogaiA9IGpvYnM7Cgl3aGlsZSAoKmopIHsKCQlwcmludF90aGluZygqaik7CgkJcHV0cygiIik7CgkJaisrOwoJfQoKCXB1dHMoIlByb2plY3RzXG4iKTsKCXByb2plY3RfdCAqKiBwID0gcHJvamVjdHM7Cgl3aGlsZSAoKnApIHsKCQlwcmludF90aGluZygqcCk7CgkJcHV0cygiIik7CgkJcCsrOwoJfQoKCXJldHVybiAwOwp9