-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmoreOpcodesFuncs.c
123 lines (104 loc) · 2.32 KB
/
moreOpcodesFuncs.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "monty.h"
/**
* mul - multiplite the top two elements of the stack
* @top: the top of the stack
* @line_number: value of arguments
* Return: exit status.
*/
void mul(SP stack_t **top, SP unsigned int line_number)
{
stack_t *po;
if (!globaldata->top)
{
fprintf(stderr, "L%d: can't pop an empty stack\n", line_number);
exit(EXIT_FAILURE);
}
if (globaldata->top->prev == NULL && globaldata->top == NULL)
{
fprintf(stderr, "L%d: can't mod, stack too short\n", line_number);
exit(EXIT_FAILURE);
}
po = globaldata->top;
globaldata->top->prev->n *= globaldata->top->n;
globaldata->top = globaldata->top->prev;
globaldata->top->next = NULL;
free(po);
}
/**
* add - adds the top two elements of the stack
* @top: the top of the stack
* @line_number: value of arguments
* Return: exit status.
*/
void add(SP stack_t **top, SP unsigned int line_number)
{
stack_t *po;
if (!globaldata->top)
{
fprintf(stderr, "L%d: can't pop an empty stack\n", line_number);
exit(EXIT_FAILURE);
}
if (globaldata->top->prev == NULL && globaldata->top == NULL)
{
fprintf(stderr, "L%d: can't mod, stack too short\n", line_number);
exit(EXIT_FAILURE);
}
po = globaldata->top;
globaldata->top->prev->n += globaldata->top->n;
globaldata->top = globaldata->top->prev;
globaldata->top->next = NULL;
free(po);
}
/**
* pall - prints all stack
* @top: the top of the stack
* @line_number: value of arguments
* Return: exit status.
*/
void pall(stack_t **top, unsigned int line_number)
{
stack_t *newStack;
(void) line_number;
if (*top == NULL)
return;
newStack = (*top);
while (newStack)
{
printf("%d\n", newStack->n);
newStack = newStack->prev;
}
}
/**
* pint - prints stack on top
* @top: the top of the stack
* @line_number: value of arguments
* Return: exit status.
*/
void pint(SP stack_t **top, SP unsigned int line_number)
{
if (!globaldata->top)
{
fprintf(stderr, "L%d: can't pint, stack empty\n", line_number);
exit(EXIT_FAILURE);
}
printf("%d\n", globaldata->top->n);
}
/**
* pop - pops an int from stack
* @top: the top of the stack
* @line_number: line count
* Return: exit status.
*/
void pop(SP stack_t **top, SP unsigned int line_number)
{
stack_t *po;
if (!globaldata->top)
{
fprintf(stderr, "L%d: can't pop an empty stack\n", line_number);
exit(EXIT_FAILURE);
}
po = globaldata->top;
globaldata->top = globaldata->top->prev;
globaldata->top->next = NULL;
free(po);
}