-
Notifications
You must be signed in to change notification settings - Fork 0
/
lists.c
105 lines (84 loc) · 2.67 KB
/
lists.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "lists.h"
/**
* adding word structs to data list or code list
* @param fileInformation1 struct that holds the input file details
* @param head the head of the list we want to add to
* @param word_to_add the word that we want to add to the list
* @param address the address of the word
* @param status if is a first word in the code line or not
*/
void add_to_list(fileInformation *fileInformation1,DataNodePointer *head,word word_to_add,int address,FirstOrSecondary status){
DataNodePointer temp;
DataNodePointer new_data_word;/*the word that we are going to add */
new_data_word = (DataNodePointer )malloc(sizeof (struct DataNode));
/*checking if malloc worked */
if(new_data_word == NULL){
printf("Malloc critic error - exit program");
exit(1);
}
/*setting all of the values inside the word that we are going to add */
new_data_word->memory_address = address;
new_data_word->word_in_node = word_to_add;
strcpy(new_data_word->word_in_node.labelName,word_to_add.labelName);
new_data_word->line = fileInformation1->line_num;
new_data_word->status = status;
new_data_word->next = NULL;
temp = *head;
if(temp == NULL){
*head = new_data_word;
return;
}
while(temp->next != NULL)
temp = temp->next;
temp->next = new_data_word;
}
word getWord(int address,DataNodePointer head){
word *word_to_return = NULL ;
DataNodePointer temp;
temp = head;
while(temp != NULL){
if(temp->memory_address == address)
return temp->word_in_node;
temp = temp->next;
}
printf("error in getting the word");
return *word_to_return ;
}
void freeList(DataNodePointer head){
DataNodePointer prev;
if(head == NULL)
return;
prev = head;
while(head->next != NULL){
head = head->next;
free(prev);
prev = head->next;
}
free(head);
}
void update_are(DataNodePointer head, int address,char ARE) {
DataNodePointer temp;
temp = head;
while(temp != NULL) {
if(temp->memory_address == address)
temp->word_in_node.ARE = ARE;
temp = temp->next;
}
}
/**
* updating the values of label operands that has delcared as extern
* @param head the head of the list we want to update
* @param address the address we want to update
* @param s the label name
*/
void update_extern_name(DataNodePointer head,int address,char *s){
DataNodePointer temp;
temp = head;
while(temp != NULL) {
if(strcmp(temp->word_in_node.labelName, s) == 0) {
temp->word_in_node.ARE = 'E';
temp->word_in_node.value = 0;
}
temp = temp->next;
}
}