mirror of
git://git.psyced.org/git/psyced
synced 2024-08-15 03:25:10 +00:00
53 lines
1.5 KiB
C
53 lines
1.5 KiB
C
// stack implementation donated by psyc://psyced.org/~allo
|
|
//
|
|
#include <net.h>
|
|
#define ON_COMMAND if (mycmd(command, args, source)) return 1;
|
|
|
|
#include <place.gen>
|
|
|
|
mycmd(a, args, source) {
|
|
unless (source) source = previous_object(); // really needed???
|
|
string *stack=allocate(0);
|
|
if (v("stack")){
|
|
stack=v("stack");
|
|
}
|
|
switch (a){
|
|
case "push":
|
|
stack=stack + ({ARGS(1)});
|
|
vSet("stack", stack);
|
|
castmsg(ME, "_notice_public_stack_add", "Eintrag #[_num] hinzugefuegt: "+stack[sizeof(stack)-1], (["_nick": "stack", "_num": sizeof(stack)]));
|
|
break;
|
|
case "get":
|
|
if(sizeof(stack)>0){
|
|
if(sizeof(args)==1){
|
|
castmsg(ME, "_notice_public_stack", "Eintrag #[_num]: "+stack[sizeof(stack)-1], (["_nick": "stack", "_num": sizeof(stack)]));
|
|
}else{
|
|
args[1]=to_int(args[1]);
|
|
if(sizeof(stack)>=args[1]){
|
|
castmsg(ME, "_notice_public_stack", "Eintrag #[_num]: "+stack[(args[1])-1], (["_nick": "stack", "_num": args[1]]));
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "pop":
|
|
if(sizeof(args)==1){
|
|
if(sizeof(stack)>0){
|
|
castmsg(ME, "_notice_public_stack_delete", "Eintrag #[_num] entfernt: "+stack[sizeof(stack)-1], (["_nick": "stack", "_num": sizeof(stack)]));
|
|
stack=stack - ({stack[sizeof(stack)-1]});
|
|
vSet("stack", stack);
|
|
}
|
|
}else{
|
|
args[1]=to_int(args[1]);
|
|
if(sizeof(stack)>=to_int(args[1])){
|
|
castmsg(ME, "_notice_public_stack_delete", "Eintrag #[_num] entfernt: "+stack[(args[1])-1], (["_nick": "stack", "_num": args[1]]));
|
|
stack=stack - ({stack[args[1]-1]});
|
|
vSet("stack", stack);
|
|
}
|
|
}
|
|
default:
|
|
return 0;
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|