ghidra/GhidraDocs/GhidraClass/ExerciseFiles/VersionTracking/Source/Mod2/Wallace.cpp

78 lines
1.8 KiB
C++

/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// WinHelloCPP.cpp : Defines the entry point for the application.
//
#include "Wallace.h"
#include "Gadget.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Person *personList = NULL;
static char *wallace = "Wallace";
void addPeople(Person **list) {
addPerson(list, "Lord Victor Quartermaine");
addPerson(list, "Lady Tottington");
addPerson(list, "Were Rabbit");
addPerson(list, "Rabbit");
addPerson(list, "Gromit");
addPerson(list, "Wallace");
addPerson(list, "Sheep");
}
void initializePeople(Person *people) {
int index = 0;
do {
people->likesCheese = ((index % 3) == 0);
people->id = index++;
people = people->next;
} while (people != NULL);
}
void addPerson (Person **list, char *name) {
Person *person = new(Person);
strncpy_s(person->name, name, sizeof(person->name));
person->next = *list;
*list = person;
}
Gadget* deployGadget() {
Gadget *gadget = new Gadget("Infrared Garden Gnome");
Person *pp = personList;
while (pp != NULL) {
if (strcmp(pp->name, wallace)==0 || pp->likesCheese) {
gadget->use(pp);
}
pp = pp->next;
}
return gadget;
}
int main(int argc, char **argv) {
addPeople(&personList);
initializePeople(personList);
Gadget *gadget = deployGadget();
gadget->print();
}