; ; MODIFICATION TO ZCPR3 CP TO ALLOW IF/ELSE STATEMENTS INSIDE A SHELL CMD ; ; If you are a heavy user of aliases and arunz alias.cmd ; files which contain flow control statements, and you ; also use the SHSET FNAME1;FNAME2;CMD sequence to create ; shells from non-shell programs; you have probably had ; problems if FNAME2 or FNAME2 were aliases which contained ; flow control statements. ; ; The source of the difficulty is in the following section ; of ZCPR3 CP code. The code was originally included so that ; a false flow control state would not prevent re-entry to ; a shell. However, if you are willing to allow that to occur; ; the modification shown below will greatly increase the ; flexibility of the ZCPR3 system by allowing flow control ; statements to be included inside a shell command. I have ; been using this modification for several months (along with ; CMD11.COM) and have had no problems introduced by doing so. ; ; Just insert the conditional assembly statements as shown, into ; the ZCPR3 CP source code, assemble, & link. The code below ; is from ZCPR3 ver 3.0, but it shouldn't be to difficult to ; find the proper place to modify if you are using the latest ; release. ; Royce Shofner....4/15/87 RS3: LD (NXTCHR),HL ;SET PTR TO FIRST CHAR OF NEW COMMAND LINE LD (CURCMD),HL ;SAVE PTR TO COMMAND LINE FOR ERROR RETURN ; ; PARSE COMMAND LINE PTED TO BY HL ; CALL PARSER ;PARSE ENTIRE COMMAND LINE ;*************************************************************** ; ; CHECK FOR SHELL INVOCATION AND RUN IT IF SO ; ; THIS IS THE CODE WHICH PREVENTS FLOW CONTROL PROCESSING ; FROM WITHIN A (FNAME1;FNAME2;CMD) SEQUENCE WHERE FNAME1, ; FNAME2 ARE ALIASES CONTAINING FLOW CONTROL STATEMENTS ; IF SHELLIF IS DECLARED TRUE, THIS SECTION OF CODE IS NOT ; INCLUDED IN THE ZCPR3 COMMAND PROCESSOR, & FLOW CONTROL ; STATEMENTS MAY BE INCLUDED INSIDE A SHELL COMMAND ; ; THE SHELLIF EQUATE MAY BE LOCATED INSIDE THE ZCPR3 CP ; AS IS SHOWN HERE, OR IT MAY BE PLACED INSIDE Z3HDR.LIB ; SOMEWHERE IN THE FLOW CONTROL DEFINITION AREA SHELLIF EQU TRUE ;ALLOWS IF PROCESSING FROM SHELL IF Z3MSG NE 0 IF NOT SHELLIF LD A,(Z3MSG+3) ;GET COMMAND STATUS CP 1 ;SHELL? JP Z,RS4 ENDIF ;SHELLIF ENDIF ;Z3MSG NE 0 ;*************************************************************** ; ; IF IFON AND FCP AVAILABLE, TRY TO RUN FROM FCP ; IF IFON AND [FCP NE 0] LD HL,FCP+5 ;PT TO COMMAND TABLE CALL CMDSCAN ;SCAN TABLE JP Z,CALLP ;RUN IF FOUND (NO LEADING CRLF) ENDIF ;IFON AND (FCP NE 0) ; ; IF IFON, THEN CHECK FOR RUNNING IF AND FLUSH COMMAND LINE IF ENABLED ; IF IFON LD HL,Z3MSG+1 ;PT TO IF BYTE LD A,(HL) ;GET IT OR A ;SEE IF ANY IF JR Z,RS4 ;CONTINUE IF NOT INC HL ;PT TO IF ACTIVE BYTE AND (HL) ;SEE IF CURRENT IF IS ACTIVE JR Z,RS1 ;SKIP IF NOT ENDIF ;IFON RS4:  .