Don't keep asking for S2EVENT_CONNECT reports if driver doen't
[AROS.git] / workbench / c / shellcommands / Unset.c
blob3b09f12f848653fac21fad134152c455e5f28953
1 /*
2 Copyright © 1995-2004, The AROS Development Team. All rights reserved.
3 $Id$
5 Unset CLI command.
6 */
8 /*****************************************************************************
10 NAME
12 Unset
14 SYNOPSIS
16 NAME
18 LOCATION
22 FUNCTION
24 INPUTS
26 NAME - The name of the local variable to unset.
28 RESULT
30 Standard DOS error codes.
32 NOTES
34 EXAMPLE
36 BUGS
38 SEE ALSO
40 INTERNALS
42 ******************************************************************************/
45 #include <proto/dos.h>
46 #include <proto/exec.h>
48 #include <dos/dos.h>
49 #include <dos/dosextens.h>
50 #include <dos/rdargs.h>
51 #include <dos/var.h>
52 #include <exec/lists.h>
53 #include <exec/nodes.h>
54 #include <exec/types.h>
55 #include <aros/shcommands.h>
57 #define BUFFER_SIZE 160
59 static void GetNewString(STRPTR, STRPTR, LONG);
61 AROS_SH1(Unset, 41.0,
62 AROS_SHA(STRPTR, ,NAME, ,NULL))
64 AROS_SHCOMMAND_INIT
66 struct Process * UnsetProc;
67 struct LocalVar * UnsetNode;
68 IPTR OutArgs[3];
69 LONG VarLength;
70 char Buffer1[BUFFER_SIZE];
71 char Buffer2[BUFFER_SIZE];
74 if (SHArg(NAME) != NULL)
76 /* Delete the local Var from the list.
79 if (!DeleteVar(SHArg(NAME), GVF_LOCAL_ONLY))
81 return RETURN_FAIL;
85 else
87 /* Display a list of local variables.
89 UnsetProc = (struct Process *)FindTask(NULL);
91 ForeachNode(&(UnsetProc->pr_LocalVars), UnsetNode)
93 if (UnsetNode->lv_Node.ln_Type == LV_VAR)
95 /* Get a clean variable with no excess
96 * characters.
98 VarLength = -1;
99 VarLength = GetVar(UnsetNode->lv_Node.ln_Name,
100 &Buffer1[0],
101 BUFFER_SIZE,
102 GVF_LOCAL_ONLY);
104 if (VarLength != -1)
106 GetNewString(&Buffer1[0], &Buffer2[0], VarLength);
108 Buffer2[VarLength] = 0;
110 OutArgs[0] = (IPTR)UnsetNode->lv_Node.ln_Name;
111 OutArgs[1] = (IPTR)&Buffer2[0];
112 OutArgs[2] = (IPTR)NULL;
113 VPrintf("%-20s\t%-20s\n", &OutArgs[0]);
119 return RETURN_OK;
121 AROS_SHCOMMAND_EXIT
122 } /* main */
125 static void GetNewString(STRPTR s, STRPTR d, LONG l)
127 int i;
128 int j;
130 i = j = 0;
132 while (i < l)
134 if (s[i] == '*' || s[i] == '\e')
136 d[j] = '*';
138 i++;
139 j++;
141 else
143 d[j] = s[i];
145 i++;
146 j++;
149 } /* GetNewString */