Skip to content

Commit

Permalink
PRP2-A3: many major changes
Browse files Browse the repository at this point in the history
  • Loading branch information
jtByt.Pictures authored and jtByt.Pictures committed May 13, 2014
1 parent fe16cc1 commit ad44a88
Show file tree
Hide file tree
Showing 9 changed files with 304 additions and 268 deletions.
Binary file modified PRP2-A3-stateDiagramm.pdf
Binary file not shown.
4 changes: 2 additions & 2 deletions PRP2-A3/festoFunctions.c
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -172,10 +172,10 @@ void resetOutputs () { // sets all actors to a save value and write

void saveActors () {
actorsImageStore = actorsImage;
printf("INFO: actorsImage saved");
printf("INFO: actorsImage saved\n");
}

void restoreActors () {
actorsImage = actorsImageStore;
printf("INFO: actorsImage restored");
printf("INFO: actorsImage restored\n");
}
Empty file modified PRP2-A3/festoFunctions.h
100644 → 100755
Empty file.
175 changes: 78 additions & 97 deletions PRP2-A3/listDatabase.c
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,67 +1,60 @@
/*
* file: listDatabase.c
* project: BScMech2-SoSe14-PRP2
* version: 0.5 (05.05.2014 14:00)
* version: 1.0 (13.05.2014 19:30)
* - 0.1 first version
* - 0.2 first "basic" list functions
* - 0.3 many safety functions added
* - 0.4 outputList basic function
* - 0.5 outputList ready with unique filename
* - 1.0 major changes
*
*
* Created by Jannik Beyerstedt
* jannik.beyerstedt.de
* Copyright: all code under creative commons license: CC BY-NC-SA 3.0
*
*
* HAW Hamburg - Labor Programmieren 3
* HAW Hamburg - Labor Programmieren 2
* festo conveyor belt system - exercise 3
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "listDatabase.h"


struct listNode {
time_t inputTime;
Boolean height;
Boolean metal;
time_t outputTime;
listDataPtr dataPtr;
struct listNode *nextNode;
struct listNode *prewNode;
};
typedef struct listNode *listNodePtr;

struct listValues {
struct listMeta {
unsigned int length;
struct listNode *firstNodePtr;
struct listNode *lastNodePtr;
listNodePtr firstNodePtr;
listNodePtr lastNodePtr;
};
typedef struct listMeta *list_t;

struct listValues *list = NULL;



int initializeList () {
if (list == NULL) { // only add a new list, if there is no list initialized
list = malloc(sizeof(struct listValues));
list_t initializeList () {
list_t list = malloc(sizeof(struct listMeta));
list->length = 0;
list->firstNodePtr = NULL;
list->lastNodePtr = NULL;
return 1;
}else {
printf("ERROR: initializeList: there is already a list\n");
return 0;
}// end list safety
return list;
}

int addNodeAtEnd () {
if (list == NULL) { // only att nodes, if list initialized
int addNodeAtEnd (list_t list) {
if (list == NULL) { // only add nodes, if list initialized
printf("ERROR: addNodeAtEnd: there is no list");
return 0;
}else {
struct listNode *secondLastNode = list->lastNodePtr;
listNodePtr secondLastNode = list->lastNodePtr;

list->lastNodePtr = malloc(sizeof(struct listNode));
list->length += 1;
Expand All @@ -76,12 +69,12 @@ int addNodeAtEnd () {
}// end list safety
}

int addNodeAtStart () {
int addNodeAtStart (list_t list) {
if (list == NULL) { // only add nodes, if list initialized
printf("ERROR: addNodeAtEnd: there is no list");
return 0;
}else {
struct listNode *secondNode = list->firstNodePtr;
listNodePtr secondNode = list->firstNodePtr;

list->firstNodePtr = malloc(sizeof(struct listNode));
list->length += 1;
Expand All @@ -97,38 +90,49 @@ int addNodeAtStart () {
}


int addDataToLastNode (int cellNo, void *info) {
if (list == NULL || list->lastNodePtr == NULL) { // list safety
printf("ERROR: addDataToLastNode: no list or no node");
return 0;

listDataPtr getNodeData (list_t list, int nodeNo) {
if (list == NULL || list->firstNodePtr == NULL) { // list safety
printf("ERROR: getNodeData: no list or no firstNode\n");
return NULL;
}else {
switch (cellNo) {
case 1:
list->lastNodePtr->inputTime = *(time_t *)info;
break;
case 2:
list->lastNodePtr->height = *(Boolean *)info;
break;
case 3:
list->lastNodePtr->metal = *(Boolean *)info;
break;
case 4:
list->lastNodePtr->outputTime = *(time_t *)info;
break;
default:
printf("ERROR: addDataToLastNode: invalid cell number\n");
break;

if (nodeNo == 1) {
listNodePtr nodePtr = list->firstNodePtr;
return nodePtr->dataPtr;
}else if ( (nodeNo > 1) && (nodeNo <= list->length) ) {
listNodePtr nodePtr = list->firstNodePtr;
for (int i = 1; i < nodeNo; i++) {
nodePtr = nodePtr->nextNode;
}
return nodePtr->dataPtr;


}else if ( (nodeNo == -1) && (-nodeNo <= list->length) ) {
listNodePtr nodePtr = list->lastNodePtr;
return nodePtr->dataPtr;
}else if (nodeNo < -1) {
listNodePtr nodePtr = list->lastNodePtr;
for (int i = 1; i < -nodeNo; i++) {
nodePtr = nodePtr->prewNode;
}
return nodePtr->dataPtr;


}else {
printf("ERROR: getNodeData: invalid nodePos number\n");
return NULL;
}
return 1;
}// end list safety
}

struct listNode * getNode (unsigned int nodeNo) {
// internal only
listNodePtr getNode (list_t list, unsigned int nodeNo) {
if (list == NULL || list->firstNodePtr == NULL) { // list safety
printf("ERROR: getNode: no list or no firstNode\n");
return NULL;
}else {
struct listNode *nodePtr = list->firstNodePtr;
listNodePtr nodePtr = list->firstNodePtr;

if (nodeNo == 1) {
return nodePtr;
Expand All @@ -145,52 +149,22 @@ struct listNode * getNode (unsigned int nodeNo) {
}// end list safety
}

void *getData (unsigned int nodePos, unsigned int cellPos) {
if (nodePos == 0 || cellPos == 0 || list == NULL) {
printf("ERROR: getData: invalis nodePos or cellPos number\n");
return NULL;
}else {
struct listNode *nodePtr = getNode(nodePos);
if (nodePtr == NULL) { // getNode safety
return NULL;
}// end getNode safety

switch (cellPos) {
case 1:
return &nodePtr->inputTime;
break;
case 2:
return &nodePtr->height;
break;
case 3:
return &nodePtr->metal;
break;
case 4:
return &nodePtr->outputTime;
break;

default:
printf("ERROR: getData: other error\n");
return NULL;
break;
}
}// end position and list safety
}


int deleteFirst () {
int deleteFirst (list_t list) {
if (list == NULL || list->firstNodePtr == NULL) { // list safety
printf("ERROR: deleteFirst: no list or no firstNode\n");
return 0;
}else {
struct listNode *deletedNode = list->firstNodePtr;
listNodePtr deletedNode = list->firstNodePtr;

if (list->length > 1){
list->firstNodePtr = list->firstNodePtr->nextNode;
free(deletedNode->dataPtr);
free(deletedNode);
list->length -= 1;
return 1;
}else if (list->length == 1) {
free(deletedNode->dataPtr);
free(deletedNode);
list->firstNodePtr = NULL;
list->lastNodePtr = NULL;
Expand All @@ -202,21 +176,23 @@ int deleteFirst () {
}// end list safety
}

int deleteLast () {
int deleteLast (list_t list) {
if (list == NULL || list->firstNodePtr == NULL) { // list safety
printf("ERROR: deleteFirst: no list or no firstNode\n");
return 0;
}else {
struct listNode *deletedNode = getNode(list->length);
struct listNode *secondLastNode = getNode(list->length -1);
listNodePtr deletedNode = getNode(list, list->length);
listNodePtr secondLastNode = getNode(list, list->length -1);

if (list->length > 1) {
list->lastNodePtr = secondLastNode;
secondLastNode->nextNode = NULL;
free(deletedNode->dataPtr);
free(deletedNode);
list->length -= 1;
return 1;
}else if (list->length == 1) {
free(deletedNode->dataPtr);
free(deletedNode);
list->firstNodePtr = NULL;
list->lastNodePtr = NULL;
Expand All @@ -228,14 +204,14 @@ int deleteLast () {
}// end list safety
}

int deleteList () {
int deleteList (list_t list) {
if (list == NULL) { // list safety
return 0;
}else {
//while (deleteFirst()) {;}

while (list->length >= 1) {
deleteFirst();
deleteFirst(list);
}
free(list);
list = NULL;
Expand All @@ -245,7 +221,7 @@ int deleteList () {
}


int outputList () {
int outputList (list_t list) {
if (list == NULL || list->firstNodePtr == NULL) { // list safety
printf("ERROR: deleteFirst: no list or no firstNode\n");
return 0;
Expand All @@ -266,23 +242,25 @@ int outputList () {
}else {// normal operation

fprintf(file, "item No.; input time; height ok (Y/N); metal (Y/N); output time\n");
printf( "item No.; input time; height ok (Y/N); metal (Y/N); output time\n");
printf( "\nitem No.; input time; height ok (Y/N); metal (Y/N); output time\n");

for (int i = 1; i <= list->length; i++) {//every node
listDataPtr data = getNodeData(list, i);

// print item number
fprintf(file, "%i ;", i);
printf("%i; ", i);
fprintf(file, "%02i;", i);
printf("%02i; ", i);

tvar = localtime(getData(i,1));
tvar = localtime(&data->inputTime);
fprintf(file, "%04i-%02i-%02i T%02i:%02i:%02i;",tvar->tm_year+1900, tvar->tm_mon+1, tvar->tm_mday, tvar->tm_hour, tvar->tm_min, tvar->tm_sec);
printf("%04i-%02i-%02i T%02i:%02i:%02i; ",tvar->tm_year+1900, tvar->tm_mon+1, tvar->tm_mday, tvar->tm_hour, tvar->tm_min, tvar->tm_sec);

fprintf(file, "%i;", *(Boolean *) getData(i, 2));
printf("%i; ", *(Boolean *) getData(i, 2));
fprintf(file, "%i;", *(Boolean *) getData(i, 3));
printf("%i; ", *(Boolean *) getData(i, 3));
fprintf(file, "%i;", *(Boolean *) data->height);
printf("%i; ", *(Boolean *) data->height);
fprintf(file, "%i;", *(Boolean *) data->metal);
printf("%i; ", *(Boolean *) data->metal);

tvar = localtime(getData(i,1));
tvar = localtime(&data->outputTime);
fprintf(file, "%04i-%02i-%02i T%02i:%02i:%02i;",tvar->tm_year+1900, tvar->tm_mon+1, tvar->tm_mday, tvar->tm_hour, tvar->tm_min, tvar->tm_sec);
printf("%04i-%02i-%02i T%02i:%02i:%02i; ",tvar->tm_year+1900, tvar->tm_mon+1, tvar->tm_mday, tvar->tm_hour, tvar->tm_min, tvar->tm_sec);

Expand All @@ -291,6 +269,9 @@ int outputList () {
}

fclose(file);
printf("\n");
printf("INFO: list saved\n");
printf("\n\n");

}// end output safety

Expand Down
Loading

0 comments on commit ad44a88

Please sign in to comment.