For Programmers: Free Programming Magazines  


Home > Archive > ASM370 > October 2004 > Compare char with ampersand in AIF or SETB









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Compare char with ampersand in AIF or SETB
Gilbert Saint-Flour

2004-10-22, 3:55 pm

Hello:

I'm trying to figure our how to code a SETB instruction to check if a
one-byte character string contains an ampersand, an apostrophe or a hyphen.
Apost and hyphen work fine, but I can't find a way to get a match with the
ampersand. See my test case below. Thanks in advance for your help.

--
Gilbert Saint-Flour
http://gsf-soft.com


//GILBERTM JOB (ACCT#),STRING,
// NOTIFY=&SYSUID,
// CLASS=A,MSGCLASS=X,COND=(0,NE)
//HLASM EXEC PGM=ASMA90,PARM=(NOOBJECT,NORXREF)
MACRO
&NAME STRING
&I SETA 1
&J SETA 2
..*LOOP
..LIT11C ANOP
&K SETC '&SYSLIST(&I)'(&J,1)
&B SETB ('&K' EQ '&&' OR '&K' EQ '''' OR '&K' EQ '-')
MNOTE ' J=&J KK=&K&K B=&B '
&J SETA &J+1
AIF (&J LT K'&SYSLIST(&I) ).LIT11C
..*ENDLOOP
MEND
****************************************
***********************
STRING '&&'
STRING ''''
STRING '--'
END
//SYSPRINT DD SYSOUT=*
//SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR
//SYSUT1 DD UNIT=VIO,SPACE=(CYL,2)

Sven Pran

2004-10-22, 8:55 pm

It is some 20 years since I worked with conditional assembly but
I have in my archives a macro with some code that I used to parse
a text parameter for valid quotes (including the surrounding),or
ampersands. This might give you some ideas?

..TXT AIF (K'&TXT LT 3).ERR08 IF TEXT INVALID
AIF ('&TXT'(1,1) NE '''' OR '&TXT'(K'&TXT,1) NE '''').ERR08
&$$(7) SETA K'&TXT-2 LENGTH OF TEXT
&A(7) SETA K'&TXT-1 LAST TEXT BYTE
&A(8) SETA 1 TEXT BYTE POINTER
..TX1 AIF (&A(8) EQ &A(7)).EXIT IF DONE
&A(8) SETA &A(8)+1 NEXT TEXT BYTE
AIF ('&TXT'(&A(8),1) EQ '''').TX2 IF QUOTE
AIF ('&TXT'(&A(8),1) NE '&&').TX1 IF NOT AMPERSAND
..TX2 AIF (&A(8) EQ &A(7)).ERR08 IF AT END OF STRING
AIF ('&TXT'(&A(8),1) NE '&TXT'(&A(8)+1,1)).ERR08 IF NOT DOUBLED
&$$(7) SETA &$$(7)-1 DECREMENT TEXT LENGTH
&A(8) SETA &A(8)+1 SKIP DOUBLED BYTE
AGO .TX1 LOOP BACK

regards Sven

"Gilbert Saint-Flour" <usenet5678@yahoo.com> wrote in message
news:u_Kdne_3BYFHxOTcRVn-1w@comcast.com...
> Hello:
>
> I'm trying to figure our how to code a SETB instruction to check if a
> one-byte character string contains an ampersand, an apostrophe or a
> hyphen.
> Apost and hyphen work fine, but I can't find a way to get a match with the
> ampersand. See my test case below. Thanks in advance for your help.
>
> --
> Gilbert Saint-Flour
> http://gsf-soft.com
>
>
> //GILBERTM JOB (ACCT#),STRING,
> // NOTIFY=&SYSUID,
> // CLASS=A,MSGCLASS=X,COND=(0,NE)
> //HLASM EXEC PGM=ASMA90,PARM=(NOOBJECT,NORXREF)
> MACRO
> &NAME STRING
> &I SETA 1
> &J SETA 2
> .*LOOP
> .LIT11C ANOP
> &K SETC '&SYSLIST(&I)'(&J,1)
> &B SETB ('&K' EQ '&&' OR '&K' EQ '''' OR '&K' EQ '-')
> MNOTE ' J=&J KK=&K&K B=&B '
> &J SETA &J+1
> AIF (&J LT K'&SYSLIST(&I) ).LIT11C
> .*ENDLOOP
> MEND
> ****************************************
***********************
> STRING '&&'
> STRING ''''
> STRING '--'
> END
> //SYSPRINT DD SYSOUT=*
> //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR
> //SYSUT1 DD UNIT=VIO,SPACE=(CYL,2)
>



Michel Hack

2004-10-23, 3:55 pm

Gilbert Saint-Flour <usenet5678@yahoo.com> wrote in message news:<u_Kdne_3BYFHxOTcRVn-1w@comcast.com>...
> Hello:
>
> I'm trying to figure our how to code a SETB instruction to check if a
> one-byte character string contains an ampersand, an apostrophe or a hyphen.
> Apost and hyphen work fine, but I can't find a way to get a match with the
> ampersand. See my test case below. Thanks in advance for your help.


The problem is that '&&' stands for TWO ampersands in the macro language
(to make other things easier), so use '&&'(1,1) for one ampersand.

Michel.
Sven Pran

2004-10-27, 8:55 pm

It is some 20 years since I worked with conditional assembly but
I have in my archives a macro with some code that I used to parse
a text parameter for valid quotes (including the surrounding),or
ampersands. This might give you some ideas?

..TXT AIF (K'&TXT LT 3).ERR08 IF TEXT INVALID
AIF ('&TXT'(1,1) NE '''' OR '&TXT'(K'&TXT,1) NE '''').ERR08
&$$(7) SETA K'&TXT-2 LENGTH OF TEXT
&A(7) SETA K'&TXT-1 LAST TEXT BYTE
&A(8) SETA 1 TEXT BYTE POINTER
..TX1 AIF (&A(8) EQ &A(7)).EXIT IF DONE
&A(8) SETA &A(8)+1 NEXT TEXT BYTE
AIF ('&TXT'(&A(8),1) EQ '''').TX2 IF QUOTE
AIF ('&TXT'(&A(8),1) NE '&&').TX1 IF NOT AMPERSAND
..TX2 AIF (&A(8) EQ &A(7)).ERR08 IF AT END OF STRING
AIF ('&TXT'(&A(8),1) NE '&TXT'(&A(8)+1,1)).ERR08 IF NOT DOUBLED
&$$(7) SETA &$$(7)-1 DECREMENT TEXT LENGTH
&A(8) SETA &A(8)+1 SKIP DOUBLED BYTE
AGO .TX1 LOOP BACK

regards Sven

"Gilbert Saint-Flour" <usenet5678@yahoo.com> wrote in message
news:u_Kdne_3BYFHxOTcRVn-1w@comcast.com...
> Hello:
>
> I'm trying to figure our how to code a SETB instruction to check if a
> one-byte character string contains an ampersand, an apostrophe or a
> hyphen.
> Apost and hyphen work fine, but I can't find a way to get a match with the
> ampersand. See my test case below. Thanks in advance for your help.
>
> --
> Gilbert Saint-Flour
> http://gsf-soft.com
>
>
> //GILBERTM JOB (ACCT#),STRING,
> // NOTIFY=&SYSUID,
> // CLASS=A,MSGCLASS=X,COND=(0,NE)
> //HLASM EXEC PGM=ASMA90,PARM=(NOOBJECT,NORXREF)
> MACRO
> &NAME STRING
> &I SETA 1
> &J SETA 2
> .*LOOP
> .LIT11C ANOP
> &K SETC '&SYSLIST(&I)'(&J,1)
> &B SETB ('&K' EQ '&&' OR '&K' EQ '''' OR '&K' EQ '-')
> MNOTE ' J=&J KK=&K&K B=&B '
> &J SETA &J+1
> AIF (&J LT K'&SYSLIST(&I) ).LIT11C
> .*ENDLOOP
> MEND
> ****************************************
***********************
> STRING '&&'
> STRING ''''
> STRING '--'
> END
> //SYSPRINT DD SYSOUT=*
> //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR
> //SYSUT1 DD UNIT=VIO,SPACE=(CYL,2)
>



Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com