home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 8 Other
/
08-Other.zip
/
HPTDEM.ZIP
/
HAPLIST.RXC
next >
Wrap
Text File
|
1992-03-17
|
4KB
|
107 lines
/* HAPLIST demo version (c) Copyright HeteroGenius Systems Ltd 1992 */
/* DEMOCMD -*- DEMOCMD -*- DEMOCMD -*- DEMOCMD */
PARSE UPPER ARG luname,outfile,pattern
IF VALUE('HAPLOGON_'luname,'Y','OS2ENVIRONMENT') <> 'Y' THEN
CALL HAPLOGON luname
SAY "HDP205I List request sent to" luname "*** SIMULATION ONLY ***"
/* Prepare to write the output file */
CALL STREAM outfile,'C','OPEN'
CALL STREAM outfile,'C','SEEK 0'
/* Set up table of file names and member names */
d. = ''
d.1="HETERO.ASM"; a.1="PO"
d.2="HETERO.CLIST"; a.2="PO"
d.3="HETERO.H"; a.3="PO"
d.4="HETERO.MACLIB"; a.4="PO"
d.5="HETERO.MODS"; a.5="PO"
d.6="HETERO.MSGS"; a.6="PO"
d.7="HETERO.PANELS"; a.7="MIGRAT"
d.8="SEQDS"; a.8="PS"
m. = ''
m.1="APPCCTL"; s.1="91/12/23 11:57"
m.2="APPCSVC"; s.2="92/01/31 15:32"
m.3="APPCTPI"; s.3="91/07/15 09:14"
m.4="HAPDEF"; s.4="91/12/28 20:39"
m.5="HAPPC"; s.5="92/02/18 11:18"
/* Try to make sense of the pattern */
alnum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$#@0123456789'
PARSE VAR pattern dspatt '(' mempat ')' residue
IF residue ¬= '' THEN SIGNAL invpatt
IF mempat ¬= '' THEN DO
IF LENGTH(mempat) > 8 THEN SIGNAL invpatt
IF VERIFY(mempat,alnum'?*') > 0 THEN SIGNAL invpatt
IF VERIFY(dspatt,'?*','M') > 0 THEN SIGNAL invpatt
END
IF VERIFY(dspatt,alnum'.?*') > 0 THEN SIGNAL invpatt
PARSE VAR dspatt hiqual '.' loqual
PARSE VAR hiqual hiqual '*' residue
IF ABBREV('GATSBYG',hiqual) THEN hiqual = 'GATSBYG'
hiqual = TRANSLATE(hiqual,'X','?')
IF LENGTH(hiqual) > 8 THEN SIGNAL invpatt
IF DATATYPE(hiqual,'A') = 0 THEN SIGNAL invpatt
/* Produce list of matching files */
DO 2500; n = 0; END /* Delay loop */
IF mempat = '' THEN DO k = 1 WHILE d.k ¬= ''
dsn = hiqual'.'d.k
IF test_match(dsn,pattern) THEN DO
CALL LINEOUT outfile,dsn || '00'x || LEFT(a.k,28)
n = n + 1; END
END
/* Produce list of matching members */
ELSE DO k = 1 WHILE m.k ¬= ''
IF test_match(m.k,mempat) THEN DO
CALL LINEOUT outfile,m.k || '00'x || RIGHT(s.k,28)
n = n + 1; END
END
/* Close the output file */
CALL CHAROUT outfile,'1A'X
CALL STREAM outfile,'C','CLOSE'
IF n = 0 THEN SIGNAL nomatch
EXIT 0
/* Error exits */
invpatt:
nomatch:
SAY "No matches for dataset name" pattern
SAY "For demonstration, specify GATSBYG.*"
CALL STREAM outfile,'C','CLOSE'
EXIT 'HAPFAIL'
/* Procedure to test whether file name matches pattern */
test_match: PROCEDURE
ARG name,pattern
DO WHILE pattern ¬= '' /* for each pattern char */
IF LEFT(pattern,1) = '?' THEN DO
pattern = SUBSTR(pattern,2) /* to next pattern char */
IF name ¬= '' & LEFT(name,1) ¬= '.' THEN
name = SUBSTR(name,2) /* to next name character */
ITERATE /* and check next pair */
END
IF LEFT(pattern,1) = '*' THEN DO
IF name = '' THEN DO /* if name is exhausted */
pattern = SUBSTR(pattern,2) /* point past '*' */
ITERATE /* and check next pair */
END
name = SUBSTR(name,2) /* to next name character */
IF SUBSTR(pattern,2,1) = LEFT(name,1) THEN
/* if next character matches */
pattern = SUBSTR(pattern,2) /* point past '*' */
ITERATE /* and check next pair */
END
IF name = '' THEN /* If name is exhausted */
RETURN 0 /* exit with 'no-match' code */
IF LEFT(name,1) ¬= LEFT(pattern,1) THEN
RETURN 0 /* exit with 'no-match' code */
name = SUBSTR(name,2) /* to next name character */
pattern = SUBSTR(pattern,2) /* to next pattern character */
END
IF name ¬= '' THEN /* If name has more chars */
RETURN 0 /* exit with 'no-match' code */
RETURN 1 /* Exit with 'matched' code */
/* DEMOCMD -*- DEMOCMD -*- DEMOCMD -*- DEMOCMD */