Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: CIAUSTX

CIAUSTX.m

Go to the documentation of this file.
  1. CIAUSTX ;MSC/IND/DKM - M syntax analyzer;04-May-2006 08:19;DKM
  1. ;;1.2;CIA UTILITIES;;Mar 20, 2007
  1. ;;Copyright 2000-2006, Medsphere Systems Corporation
  1. ;=================================================================
  1. ; Perform syntactic analysis of a line of M code.
  1. ; Inputs:
  1. ; CIAM = M statement(s)
  1. ; CIAO = Options:
  1. ; L = Line label allowed
  1. ; . = Dotted syntax allowed
  1. ; N = Do not init parsing tables
  1. ; D = Do not delete parsing tables
  1. ; Z = Process all Z-extensions as valid
  1. ; Outputs:
  1. ; Returns 0 if successfully parsed. Otherwise returns E^P^M
  1. ; where E is an error code (see ERRORS label), P is the
  1. ; character position where the error occurred, and M is the
  1. ; error message.
  1. ;=================================================================
  1. ENTRY(CIAM,CIAO) ;
  1. N CIAPSN,CIALEN,CIAERR,CIARN,CIAQT,CIAF,CIAPID,CIACMD
  1. S CIAM=$$UP^XLFSTR(CIAM),CIAO=$$UP^XLFSTR($G(CIAO)),CIAPSN=1,CIALEN=$L(CIAM),CIAERR=0,CIAQT="""",CIAF=0,CIAPID="CIAUSTX",U="^"
  1. D LOAD:CIAO'["N",PARSE:CIALEN
  1. K:CIAO'["D" ^TMP(CIAPID,$J)
  1. Q $S(CIAERR:CIAERR_U_$S(CIAPSN>CIALEN:CIALEN,1:CIAPSN)_U_$S(CIAERR<0:$$EC^%ZOSV,1:$P($T(ERRORS+CIAERR),";;",2)),1:0)
  1. PARSE N CIAZ,CIAZ1
  1. S @$$TRAP^CIAUOS("ERROR^CIAUSTX")
  1. I CIAO["L" D Q:CIAERR
  1. .S:$E(CIAM)'=" " CIAPSN=$$LABEL^CIAUSTX0
  1. .I $$NEXT^CIAUSTX0("("),'$$NEXT^CIAUSTX0(")") D
  1. ..F CIAPSN=CIAPSN:1 D Q:$E(CIAM,CIAPSN)'=","!CIAERR
  1. ...S CIAPSN=$$NAME^CIAUSTX0(CIAPSN,"L%")
  1. ..Q:CIAERR
  1. ..S:'$$NEXT^CIAUSTX0(")") CIAERR=3
  1. .S:" "'[$E(CIAM,CIAPSN) CIAERR=2
  1. I CIAO["." F CIAPSN=CIAPSN:1:CIALEN+1 Q:". "'[$E(CIAM,CIAPSN)
  1. F Q:CIAERR D SKPSPC Q:";"[$E(CIAM,CIAPSN) D
  1. .S CIACMD=""
  1. .F CIAPSN=CIAPSN:1 S CIAZ=$E(CIAM,CIAPSN) Q:CIAZ'?1A S CIACMD=CIACMD_CIAZ
  1. .I CIACMD="" S CIAERR=4 Q
  1. .I $D(^TMP(CIAPID,$J,"CMD",CIACMD)) S CIACMD=^(CIACMD)
  1. .E I CIAO["Z" S CIACMD="PC;OPT;ARGS("":M"")"
  1. .E S CIAERR=4 Q
  1. .F CIARN=1:1:$L(CIACMD,";") D CMD^CIAUSTX0($P(CIACMD,";",CIARN)) Q:CIAERR!'CIARN
  1. .I 'CIAERR," "'[$E(CIAM,CIAPSN) S CIAERR=2
  1. .E S CIAPSN=CIAPSN+1
  1. Q
  1. ; Skip over blanks
  1. SKPSPC F Q:'$$NEXT^CIAUSTX0(" ")
  1. Q
  1. ; Load tables
  1. LOAD N CIAZ,CIAZ1,CIAZ2,CIAL
  1. K ^TMP(CIAPID,$J)
  1. F CIAL="CMD","FCN","SYS" D
  1. .F CIAZ=1:1 S CIAZ1=$P($T(@CIAL+CIAZ),";;",2,999) Q:CIAZ1="" D
  1. ..S CIAZ2=$P(CIAZ1,";"),CIAZ1=$P(CIAZ1,";",2,999)
  1. ..F Q:CIAZ2="" D
  1. ...S ^TMP(CIAPID,$J,CIAL,$P(CIAZ2,","))=CIAZ1,CIAZ2=$P(CIAZ2,",",2,999)
  1. Q
  1. ERROR S CIAERR=-1
  1. Q
  1. CMD ;;*Commands*
  1. ;;B,BREAK;PC;OPT;ARGS()
  1. ;;C,CLOSE;PC;ARGS(":M")
  1. ;;D,DO;PC;OPT;LBL(2)
  1. ;;E,ELSE;NPC;OPT;ARGS()
  1. ;;F,FOR;NPC;OPT;FOR
  1. ;;G,GOTO;PC;LBL(1)
  1. ;;H,HALT,HANG;PC;OPT;EXP()
  1. ;;I,IF;NPC;OPT;ARGS()
  1. ;;J,JOB;PC;LBL(2)
  1. ;;K,KILL;PC;OPT;KILL
  1. ;;L,LOCK;PC;OPT;LOCK
  1. ;;M,MERGE;PC;MERGE
  1. ;;N,NEW;PC;OPT;NEW
  1. ;;O,OPEN;PC;ARGS(":M")
  1. ;;Q,QUIT;PC;OPT;EXP()
  1. ;;R,READ;PC;READ
  1. ;;S,SET;PC;SET
  1. ;;U,USE;PC;ARGS(":M")
  1. ;;V,VIEW;PC;ARGS(":M")
  1. ;;W,WRITE;PC;WRITE
  1. ;;X,XECUTE;PC;ARGS(":")
  1. ;;ZT,ZTRAP;PC;OPT;EXP()
  1. ;;ZS,ZSAVE;PC;OPT;EXP()
  1. ;;ZR,ZREMOVE;PC;OPT;LBL(1)
  1. ;;ZP,ZPRINT
  1. ;;
  1. FCN ;;*Intrinsic functions*
  1. ;;A,ASCII;;1-2
  1. ;;C,CHAR;;1-999
  1. ;;D,DATA;;1-1;V
  1. ;;E,EXTRACT;S;1-3
  1. ;;F,FIND;;2-3
  1. ;;FN,FNUMBER;;2-3
  1. ;;G,GET;;1-2;V
  1. ;;J,JUSTIFY;;1-3
  1. ;;L,LENGTH;;1-2
  1. ;;N,NEXT;;1-2
  1. ;;NA,NAME;;1-2;V
  1. ;;O,ORDER;;1-2;V
  1. ;;P,PIECE;S;2-4
  1. ;;Q,QUERY;;1-2;V
  1. ;;R,RANDOM;;1-1
  1. ;;S,SELECT;:;1-999
  1. ;;T,TEXT;;1-1;L
  1. ;;TR,TRANSLATE;;2-3
  1. ;;V,VIEW;;1-999
  1. ;;
  1. SYS ;;*System variables*
  1. ;;D,DEVICE
  1. ;;ET,ETRAP;SN
  1. ;;H,HOROLOG
  1. ;;I,IO
  1. ;;J,JOB
  1. ;;K,KEY
  1. ;;P,PRINCIPAL
  1. ;;S,STORAGE
  1. ;;SY,SYSTEM
  1. ;;T,TEST
  1. ;;TL,TLEVEL
  1. ;;TR,TRESTART
  1. ;;X;S
  1. ;;Y;S
  1. ;;ZT,ZTRAP;S
  1. ;;ZE,ZERROR;S
  1. ;;ES,ESTACK;N
  1. ;;EC,ECODE;S
  1. ERRORS ;;*Error messages*
  1. ;;Bad variable name
  1. ;;Syntax error
  1. ;;Unbalanced parentheses
  1. ;;Unrecognized command
  1. ;;Postconditional not allowed
  1. ;;Missing operand
  1. ;;Unrecognized intrinsic function/variable
  1. ;;Incorrect number of arguments
  1. ;;Missing closing quote
  1. ;;Illegal pattern
  1. ;;Bad label name
  1. ;;Name too long
  1. ;;13