
 1000  *SAVE S.WILDCARD
 1010  *--------------------------------
 1020  COUT   .EQ $FDED
 1030  CROUT  .EQ $FD8E
 1040  *--------------------------------
 1050  KEY.PNTR   .EQ $00
 1060  BUF.PNTR   .EQ $01
 1070  FN         .EQ $02,03
 1080  KEY.START  .EQ $04
 1090  CNTR       .EQ $05
 1100  *--------------------------------
 1110  T
 1120         LDA #NAME.CNT
 1130         STA CNTR
 1140         LDA #FNLIST
 1150         LDY /FNLIST
 1160  .1     STA FN
 1170         STY FN+1
 1180         JSR MATCH
 1190         BCC .2       ...DID NOT MATCH
 1200         JSR DISPLAY
 1210  .2     LDA FN
 1220         CLC
 1230         ADC #30
 1240         LDY FN+1
 1250         BCC .3
 1260         INY
 1270  .3     DEC CNTR
 1280         BNE .1
 1290         RTS
 1300  *--------------------------------
 1310  DISPLAY
 1320         LDY #0
 1330  .1     LDA (FN),Y
 1340         JSR COUT
 1350         INY
 1360         CPY #30
 1370         BCC .1
 1380         JMP CROUT
 1390  *--------------------------------
 1400  *   COMPARE KEY TO A FILE NAME
 1410  *      KEY MAY CONTAIN WILDCARDS
 1420  *      TRAILING BLANKS DON'T COUNT
 1430  *      FILE NAME ADDRESSED VIA "(FN),Y"
 1440  *      KEY ADDRESSED VIA "KEY,X"
 1450  *      KEY AND FILE NAME ARE UP TO 30 CHARS LONG
 1460  *          (STORED LEFT-JUSTIFIED, BLANK-FILLED)
 1470  *--------------------------------
 1480  MATCH
 1490         LDY #30      FIND LAST NON-BLANK CHAR
 1500  .1     DEY              IN FILE NAME
 1510         LDA (FN),Y
 1520         CMP #" "
 1530         BEQ .1
 1540  *--------------------------------
 1550         LDX #30      FIND LAST NON-BLANK CHAR
 1560  .2     DEX              IN KEY
 1570         LDA KEY,X
 1580         CMP #" "
 1590         BEQ .2
 1600         STX KEY.START
 1610         INX
 1620  *---WILD CARD--------------------
 1630  .3     DEX          ADVANCE KEY POINTER
 1640         BMI .8       ...END OF KEY IS WILD, SO MATCHES
 1650  *--------------------------------
 1660  .4     STX KEY.PNTR
 1670  .5     STY BUF.PNTR
 1680  .6     LDA KEY,X
 1690         CMP WILD.CARD
 1700         BEQ .3      ...WILD CARD CHARACTER
 1710         CMP (FN),Y
 1720         BNE .11      ...NO MATCH
 1730         DEX
 1740         BMI .10       ...END OF KEY
 1750         DEY
 1760         BPL .6       ...STILL MORE TO COMPARE
 1770  *---END OF FILE NAME, MORE KEY---
 1780  .7     LDA KEY,X
 1790         CMP WILD.CARD
 1800         BNE .9       ...REST OF KEY NOT WILD, NO MATCH
 1810         DEX
 1820         BPL .7
 1830  *---VALID MATCH------------------
 1840  .8     SEC          SIGNAL MATCH
 1850         RTS
 1860  *---NOT A MATCH------------------
 1870  .9     CLC
 1880         RTS
 1890  *---END OF KEY-------------------
 1900  .10    DEY          MATCH IF END OF NAME
 1910         BMI .8       ...END OF NAME
 1920  *---IF AFTER WILDCARD, SLIP------
 1930  .11    LDX KEY.PNTR START KEY OVER AGAIN
 1940         CPX KEY.START
 1950         BEQ .9       ...NOT AFTER A WILDCARD
 1960         LDY BUF.PNTR SLIP TO LEFT IN BUFFER
 1970         DEY
 1980         BPL .5       TRY AGAIN
 1990         BMI .7       REST OF KEY BETTER BE WILD
 2000  *--------------------------------
 2010  WILD.CARD  .AS -/=/
 2020  *--------------------------------
 2030  KEY        .AS -/A=                            /
 2040  *--------------------------------
 2050  FNLIST     .AS -/A SIMPLE KEY                  /
 2060             .AS -/NOT SUCH A SIMPLE KEY         /
 2070             .AS -/NOT A SIMPLE KEY AT ALL       /
 2080             .AS -/A SIMPLE KEY AFTER ALL        /
 2090  NAME.CNT   .EQ *-FNLIST/30
 2100  *--------------------------------

