version 1.1, 2025/01/19 02:04:04
|
version 1.4, 2025/05/05 04:46:35
|
Line 1
|
Line 1
|
/* |
/* |
* * |
* $Id$ |
* * * |
|
* * * |
|
* *************** |
|
* * * * * |
|
* * MUMPS * |
|
* * * * * |
|
* *************** |
|
* * * |
|
* * * |
|
* * |
|
* |
|
* mcommand.c |
|
* M command utility functions |
* M command utility functions |
* |
* |
* |
* |
* Author: Serena Willis <jpw@coherent-logic.com> |
* Author: Serena Willis <snw@coherent-logic.com> |
* Copyright (C) 1998 MUG Deutschland |
* Copyright (C) 1998 MUG Deutschland |
* Copyright (C) 2023 Coherent Logic Development LLC |
* Copyright (C) 2023, 2025 Coherent Logic Development LLC |
* |
* |
* |
* |
* This file is part of FreeM. |
* This file is part of FreeM. |
Line 35
|
Line 23
|
* You should have received a copy of the GNU Affero Public License |
* You should have received a copy of the GNU Affero Public License |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
|
* $Log$ |
|
* Revision 1.4 2025/05/05 04:46:35 snw |
|
* Documentation fixes; make FreeM more standards compliant |
|
* |
|
* Revision 1.3 2025/03/09 19:50:47 snw |
|
* Second phase of REUSE compliance and header reformat |
|
* |
|
* |
|
* SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC |
|
* SPDX-License-Identifier: AGPL-3.0-or-later |
**/ |
**/ |
|
|
#include <string.h> |
#include <string.h> |
|
#include <ctype.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include "mpsdef.h" |
#include "mpsdef.h" |
#include "mcommand.h" |
#include "mcommand.h" |
Line 52 MRESULT mcmd_tokenize(MACTION *ra, char
|
Line 51 MRESULT mcmd_tokenize(MACTION *ra, char
|
if (mcmnd != 'z') { |
if (mcmnd != 'z') { |
|
|
if (find (" ab ablock assert assign asta astart asto astop aunb aunblock \ |
if (find (" ab ablock assert assign asta astart asto astop aunb aunblock \ |
break co const close do else esta estart esto estop etr etrigger for goto hang halt \ |
break close do else esta estart esto estop etr etrigger for goto hang halt \ |
if job kill ks ksubscripts kv kvalue lock ma map merge new open quit read rl rload \ |
if job kill ks ksubscripts kv kvalue lock merge new open quit read rl rload \ |
rs rsave set tc tcommit th then thr throw tro trollback ts tstart use \ |
rs rsave set tc tcommit th then tro trollback ts tstart use \ |
un unmap usi using view wa watch write wi with xecute ", tmp3) == FALSE) { |
view wa watch write xecute ", tmp3) == FALSE) { |
return CMMND; |
return CMMND; |
} |
} |
|
|
Line 78 MRESULT mcmd_tokenize(MACTION *ra, char
|
Line 77 MRESULT mcmd_tokenize(MACTION *ra, char
|
else if (tmp3[4] == 'o') { |
else if (tmp3[4] == 'o') { |
mcmnd = ASTOP; |
mcmnd = ASTOP; |
} |
} |
else if (tmp3[4] == 'e') { |
|
mcmnd = ASSERT_TKN; |
|
} |
|
|
|
} |
} |
|
|
break; |
break; |
|
|
case 'c': |
case 'c': |
|
mcmnd = CLOSE; |
|
break; |
|
|
if (tmp3[2] == 'l') { |
|
mcmnd = CLOSE; |
|
} |
|
else { |
|
mcmnd = CONST; |
|
} |
|
|
|
case 'e': |
case 'e': |
if (tmp3[2] == 't') mcmnd = ETRIGGER; |
if (tmp3[2] == 't') mcmnd = ETRIGGER; |
else if (tmp3[4] == 'a') mcmnd = ESTART; |
else if (tmp3[4] == 'a') mcmnd = ESTART; |
Line 122 MRESULT mcmd_tokenize(MACTION *ra, char
|
Line 113 MRESULT mcmd_tokenize(MACTION *ra, char
|
break; |
break; |
|
|
} |
} |
else if (tmp3[2] == 'a') { |
|
mcmnd = MAP; |
|
break; |
|
} |
|
|
|
case 'r': |
case 'r': |
if (tmp3[2] == 'l') mcmnd = RLOAD; |
if (tmp3[2] == 'l') mcmnd = RLOAD; |
Line 138 MRESULT mcmd_tokenize(MACTION *ra, char
|
Line 125 MRESULT mcmd_tokenize(MACTION *ra, char
|
if (tmp3[3] == 'e') { |
if (tmp3[3] == 'e') { |
mcmnd = THEN; |
mcmnd = THEN; |
} |
} |
else if (tmp3[3] == 'r') { |
|
mcmnd = THROW; |
|
} |
|
} |
} |
else if (tmp3[3] == 'o') mcmnd = TROLLBACK; |
else if (tmp3[3] == 'o') mcmnd = TROLLBACK; |
else if (tmp3[2] == 's') mcmnd = TSTART; |
else if (tmp3[2] == 's') mcmnd = TSTART; |
break; |
break; |
|
|
case 'w': |
case 'w': |
|
mcmnd = WRITE; |
switch (tmp3[2]) { |
|
|
|
|
|
case 'a': |
|
mcmnd = WATCH; |
|
break; |
|
|
|
case 'i': |
|
mcmnd = OO_WITH; |
|
break; |
|
|
|
case 'r': |
|
mcmnd = WRITE; |
|
break; |
|
|
|
|
|
} |
|
|
|
break; |
break; |
|
|
case 'u': |
case 'u': |
|
mcmnd = USE; |
if (tmp3[2] == 'n') { |
break; |
mcmnd = UNMAP; |
|
break; |
|
} |
|
|
|
switch (tmp3[3]) { |
|
|
|
case 'e': |
|
mcmnd = USE; |
|
break; |
|
|
|
case 'i': |
|
mcmnd = OO_USING; |
|
break; |
|
|
|
} |
|
|
|
|
|
} /* end of switch(mcmnd) */ |
} /* end of switch(mcmnd) */ |
|
|
Line 194 MRESULT mcmd_tokenize(MACTION *ra, char
|
Line 144 MRESULT mcmd_tokenize(MACTION *ra, char
|
else { |
else { |
|
|
mcmnd = tmp3[2] - 32; /* z_command select */ |
mcmnd = tmp3[2] - 32; /* z_command select */ |
|
|
|
switch (mcmnd) { |
|
|
|
case 'A': |
|
mcmnd = ASSERT_TKN; |
|
break; |
|
|
|
case 'C': |
|
mcmnd = CONST; |
|
break; |
|
|
|
case 'M': |
|
mcmnd = MAP; |
|
break; |
|
|
|
case 'T': |
|
mcmnd = THROW; |
|
break; |
|
|
|
case 'U': |
|
mcmnd = UNMAP; |
|
break; |
|
|
|
case 'W': |
|
switch (toupper (tmp3[3])) { |
|
case 'R': |
|
mcmnd = ZWRITE; |
|
break; |
|
case 'A': |
|
mcmnd = WATCH; |
|
break; |
|
case 'I': |
|
mcmnd = OO_WITH; |
|
break; |
|
} |
|
break; |
|
|
|
} |
|
|
if (find (zcommds, tmp3) == FALSE) mcmnd = PRIVATE; |
if (find (zcommds, tmp3) == FALSE) mcmnd = PRIVATE; |
} |
} |
|
|
|
mcmnd_done: |
*ra = RA_CONTINUE; |
*ra = RA_CONTINUE; |
return OK; |
return OK; |
} |
} |