home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE12-SRC-3.SFX / grep.s < prev    next >
Encoding:
Text File  |  1990-02-12  |  6.9 KB  |  514 lines

  1. ;*** GREP PROGRAM
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:GREP"
  6.  
  7. JMP GREP═AIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $40
  14.  
  15. CHR├╥ = $0D
  16. CHR╤UOTE = $22
  17. MAX╠INE╠EN = 2049
  18.  
  19. INVERSE╞LAG .BUF 1
  20. IGNORE├ASE╞LAG .BUF 1
  21. DISPLAY╞ILENAME╞LAG .BUF 1
  22. ANCHOR╠EFT╞LAG .BUF 1
  23. ANCHOR╥IGHT╞LAG .BUF 1
  24. STRING╠EN .BUF 1
  25.  
  26. ;******** STANDARD LIBRARY ********
  27. PUTS = *
  28.    LDX #STDOUT
  29. FPUTS = *
  30.    STA ZP
  31.    STY ZP+1
  32.    LDY #$FF
  33. -  INY
  34.    LDA (ZP),Y
  35.    BNE -
  36.    TYA
  37.    LDY #0
  38.    JMP WRITE
  39. EPUTS = *
  40.    LDX #STDERR
  41.    JMP FPUTS
  42.  
  43. PUTCHAR = *
  44.    LDX #STDOUT
  45. PUTC = *
  46.    STA PUTC┬UFFER
  47.    LDA #<PUTC┬UFFER
  48.    LDY #>PUTC┬UFFER
  49.    STA ZP
  50.    STY ZP+1
  51.    LDA #1
  52.    LDY #0
  53.    JMP WRITE
  54.    PUTC┬UFFER .BUF 1
  55.  
  56. GETCHAR = *
  57.    LDX #STDIN
  58. GETC = *
  59.    LDA #<GETC┬UFFER
  60.    LDY #>GETC┬UFFER
  61.    STA ZP
  62.    STY ZP+1
  63.    LDA #1
  64.    LDY #0
  65.    JSR READ
  66.    BEQ +
  67.    LDA GETC┬UFFER
  68.    RTS
  69. +  SEC
  70.    RTS
  71.    GETC┬UFFER .BUF 1
  72.  
  73. GETARG = *
  74.    STY ZP+1
  75.    ASL
  76.    STA ZP
  77.    ROL ZP+1
  78.    CLC
  79.    LDA ACE┴RGV
  80.    ADC ZP
  81.    STA ZP
  82.    LDA ACE┴RGV+1
  83.    ADC ZP+1
  84.    STA ZP+1
  85.    LDY #0
  86.    LDA (ZP),Y
  87.    TAX
  88.    INY
  89.    LDA (ZP),Y
  90.    STX ZP
  91.    STA ZP+1
  92.    RTS
  93.  
  94. CHECKSTOP = *
  95.    JSR STOPKEY
  96.    BCS +
  97.    RTS
  98. +  LDA #<STOPPED═SG
  99.    LDY #>STOPPED═SG
  100.    JSR EPUTS
  101.    LDA #1
  102.    LDX #0
  103.    JMP EXIT
  104.    STOPPED═SG = *
  105.    .ASC "<╙TOPPED>"
  106.    .BYTE CHR├╥,0
  107.  
  108. ;===GREP===
  109. GREP┴RG = 2
  110. GREP╬AME = 4
  111. IN┬UF╠EN = 6
  112. GREP╙TRING = 8
  113.  
  114. GREP═AIN = *
  115.    ;** CHECK ARGUMENT COUNT
  116.    LDA #0
  117.    STA INVERSE╞LAG
  118.    STA IGNORE├ASE╞LAG
  119.    STA DISPLAY╞ILENAME╞LAG
  120.    STA ANCHOR╠EFT╞LAG
  121.    STA ANCHOR╥IGHT╞LAG
  122.    LDA ACE┴RGC+1
  123.    BNE GREP┼NOUGH┴RGS
  124.    LDA ACE┴RGC
  125.    CMP #3
  126.    BCS GREP┼NOUGH┴RGS
  127.  
  128. GREP╒SAGE = *
  129.    LDA #<GREP╒SAGE═SG
  130.    LDY #>GREP╒SAGE═SG
  131.    JMP EPUTS
  132.  
  133. GREP╒SAGE═SG = *
  134.    .ASC "USAGE: GREP [-[I][V]] [^]SUBSTR[$] FILES"
  135.    .BYTE CHR├╥,0
  136.  
  137. GREP┼NOUGH┴RGS = *
  138.    ;** GET INPUT BUFFER LENGTH
  139.    SEC
  140.    LDA ACE═EM╘OP+0
  141.    SBC #<GREP╔N┬UF
  142.    STA IN┬UF╠EN
  143.    LDA ACE═EM╘OP+1
  144.    SBC #>GREP╔N┬UF
  145.    STA IN┬UF╠EN+1
  146.    ;** MAIN LOOP
  147.    LDA #1
  148.    LDY #0
  149.    STA GREP┴RG
  150.    STY GREP┴RG+1
  151.    JSR GETARG
  152.    LDY #0
  153.    LDA (ZP),Y
  154.    CMP #"-"
  155.    BNE SUBSTR┴RG
  156.    INC GREP┴RG
  157. -  INY
  158.    LDA (ZP),Y
  159.    BEQ SUBSTR┴RG
  160.    CMP #"I"
  161.    BNE +
  162.    LDA #$FF
  163.    STA IGNORE├ASE╞LAG
  164. +  CMP #"V"
  165.    BNE +
  166.    LDA #$FF
  167.    STA INVERSE╞LAG
  168. +  JMP -
  169.  
  170.    SUBSTR┴RG = *
  171.    LDA GREP┴RG
  172.    LDY #0
  173.    JSR GETARG
  174.    LDA ZP
  175.    LDY ZP+1
  176.    STA GREP╙TRING
  177.    STY GREP╙TRING+1
  178.    BIT IGNORE├ASE╞LAG
  179.    BPL +
  180.    JSR FOLD╙TRING
  181. +  JSR CHECK┴NCHORS
  182.    INC GREP┴RG
  183.    
  184.    FIRST┴RG = *
  185.    LDA GREP┴RG
  186.    LDY #0
  187.    JSR GETARG
  188.    LDA ZP
  189.    ORA ZP+1
  190.    BNE +
  191.    JMP GREP╒SAGE
  192. +  CLC
  193.    LDA GREP┴RG
  194.    ADC #1
  195.    LDY #0
  196.    JSR GETARG
  197.    LDA ZP
  198.    ORA ZP+1
  199.    BEQ NEXT┴RG
  200.    LDA #$FF
  201.    STA DISPLAY╞ILENAME╞LAG
  202.  
  203.    NEXT┴RG = *
  204.    JSR CHECKSTOP
  205.    LDA GREP┴RG
  206.    LDY GREP┴RG+1
  207.    JSR GETARG
  208.    LDA ZP
  209.    LDY ZP+1
  210.    STA GREP╬AME
  211.    STY GREP╬AME+1
  212.    ORA ZP+1
  213.    BEQ GREP┼XIT
  214.    JSR GREP
  215.    BCC +
  216.    JSR GREP┼RROR
  217. +  INC GREP┴RG
  218.    BNE +
  219.    INC GREP┴RG+1
  220. +  JMP NEXT┴RG
  221.  
  222. GREP┼XIT = *
  223.    RTS
  224.  
  225. FOLD╙TRING = *
  226.    LDY #0
  227. -  LDA (GREP╙TRING),Y
  228.    BNE +
  229.    RTS
  230. +  CMP #"┴"
  231.    BCC +
  232.    CMP #"┌"+1
  233.    BCS +
  234.    SEC
  235.    SBC #"┴"-"A"
  236.    STA (GREP╙TRING),Y
  237. +  INY
  238.    BNE -
  239.    RTS
  240.  
  241. CHECK┴NCHORS = *
  242.    LDY #0
  243.    LDA (GREP╙TRING),Y
  244.    CMP #"^"
  245.    BNE +
  246.    LDA #$FF
  247.    STA ANCHOR╠EFT╞LAG
  248.    INC GREP╙TRING
  249.    BNE +
  250.    INC GREP╙TRING+1
  251. +  LDY #255
  252. -  INY
  253.    LDA (GREP╙TRING),Y
  254.    BNE -
  255.    STY STRING╠EN
  256.    DEY
  257.    CPY #255
  258.    BEQ +
  259.    LDA (GREP╙TRING),Y
  260.    CMP #"$"
  261.    BNE +
  262.    LDA #$FF
  263.    STA ANCHOR╥IGHT╞LAG
  264.    LDA #0
  265.    STA (GREP╙TRING),Y
  266.    STY STRING╠EN
  267. +  RTS
  268.  
  269. GREP┼RROR = *
  270.    LDA #<GREP┼RROR═SG1
  271.    LDY #>GREP┼RROR═SG1
  272.    JSR EPUTS
  273.    LDA GREP╬AME
  274.    LDY GREP╬AME+1
  275.    JSR EPUTS
  276.    LDA #<GREP┼RROR═SG2
  277.    LDY #>GREP┼RROR═SG2
  278.    JMP EPUTS
  279.  
  280. GREP┼RROR═SG1 = *
  281.    .ASC "┼RROR READING FILE "
  282.    .BYTE CHR╤UOTE,0
  283.  
  284. GREP┼RROR═SG2 = *
  285.    .BYTE CHR╤UOTE,CHR├╥,0
  286.  
  287. BUF╨TR = 10
  288. BUF├OUNT = 12
  289. INFILE = 14
  290.  
  291. GREP = *
  292.    ;** OPEN FILE
  293.    LDA GREP╬AME
  294.    LDY GREP╬AME+1
  295.    STA ZP
  296.    STY ZP+1
  297.    LDA #"R"
  298.    JSR OPEN
  299.    BCC +
  300.    RTS
  301. +  STA INFILE
  302.    ;** ENCODE FILE
  303.    JSR GREP┬ODY
  304.    ;** CLOSE FILE
  305.    LDA INFILE
  306.    JSR CLOSE
  307.    RTS
  308.  
  309. LINE╠EN = $40      ;(2)
  310. LINE╨TR = $42      ;(2)
  311.  
  312. GREP┬ODY = *
  313.    LDA #0
  314.    STA BUF├OUNT
  315.    STA BUF├OUNT+1
  316. -  JSR GETLINE
  317.    BCC +
  318.    RTS
  319. +  JSR CHECK╠INE
  320.    BIT INVERSE╞LAG
  321.    BMI +
  322.    BCC -
  323.    JSR WRITE╠INE
  324.    JMP -
  325. +  BCS -
  326.    JSR WRITE╠INE
  327.    JMP -
  328.  
  329. LINE╥ESET = $44   ;(2)
  330. STRING╨OS = $46   ;(1)
  331.  
  332. CHECK╠INE = *  ;() : .├├=NO_MATCH, .├╙=MATCH
  333.    BIT ANCHOR╥IGHT╞LAG
  334.    BPL CHECK╙UBSTR
  335.    CLC
  336.    LDA LINE╨TR
  337.    ADC LINE╠EN
  338.    STA LINE╨TR
  339.    LDA LINE╨TR+1
  340.    ADC LINE╠EN+1
  341.    STA LINE╨TR+1
  342.    SEC
  343.    LDA LINE╨TR
  344.    SBC STRING╠EN
  345.    STA LINE╨TR
  346.    LDA LINE╨TR+1
  347.    SBC #0
  348.    STA LINE╨TR+1
  349.  
  350.    CHECK╙UBSTR = *
  351.    LDA LINE╨TR
  352.    LDY LINE╨TR+1
  353.    STA LINE╥ESET
  354.    STY LINE╥ESET+1
  355.    INC LINE╥ESET
  356.    BNE +
  357.    INC LINE╥ESET+1
  358. +  LDY #0
  359.    STY STRING╨OS
  360.  
  361.    CHECK├HAR = *
  362. +  LDY STRING╨OS
  363.    LDA (GREP╙TRING),Y
  364.    BEQ END╧F╙TRING
  365.    LDY #0
  366.    CMP (LINE╨TR),Y
  367.    BNE MISMATCH
  368. -  INC STRING╨OS
  369.    INC LINE╨TR
  370.    BNE +
  371.    INC LINE╨TR+1
  372. +  JMP CHECK├HAR
  373.  
  374.    MISMATCH = *
  375.    LDY #0
  376.    LDA (LINE╨TR),Y
  377.    BEQ END╧F╠INE
  378.    BIT IGNORE├ASE╞LAG
  379.    BPL +
  380.    CMP #"┴"
  381.    BCC +
  382.    CMP #"┌"+1
  383.    BCS +
  384.    SEC
  385.    SBC #"┴"-"A"
  386.    LDY STRING╨OS
  387.    CMP (GREP╙TRING),Y
  388.    BEQ -
  389. +  LDA LINE╥ESET
  390.    LDY LINE╥ESET+1
  391.    STA LINE╨TR
  392.    STY LINE╨TR+1
  393.    JMP CHECK╙UBSTR
  394.  
  395.    END╧F╠INE = *
  396.    CLC
  397.    RTS
  398.  
  399.    END╧F╙TRING = *
  400.    BIT ANCHOR╠EFT╞LAG
  401.    BMI +
  402.    SEC
  403.    RTS
  404. +  LDA LINE╥ESET
  405.    BNE +
  406.    DEC LINE╥ESET+1
  407. +  DEC LINE╥ESET
  408.    LDA LINE╥ESET
  409.    CMP #<GREP╠INE
  410.    BNE END╧F╠INE
  411.    LDA LINE╥ESET+1
  412.    CMP #>GREP╠INE
  413.    BNE END╧F╠INE
  414.    SEC
  415.    RTS
  416.  
  417. WRITE╠INE = *
  418.    LDA DISPLAY╞ILENAME╞LAG
  419.    BEQ +
  420.    LDA GREP╬AME
  421.    LDY GREP╬AME+1
  422.    JSR PUTS
  423.    LDA #":"
  424.    JSR PUTCHAR
  425. +  LDA #<GREP╠INE
  426.    LDY #>GREP╠INE
  427.    STA ZP
  428.    STY ZP+1
  429.    LDA LINE╠EN
  430.    LDY LINE╠EN+1
  431.    LDX #STDOUT
  432.    JSR WRITE
  433.    LDA #CHR├╥
  434.    JSR PUTCHAR
  435.    RTS
  436.  
  437. GETLINE = *  ;() : LINE╠EN, LINE╨TR
  438.    ;** IGNORES CHARS BEYOND MAX LINE LEN, IGNORES LAST LINE NOT ENDING IN ├╥,
  439.    ;** LINE ENDS WITH \0
  440.    LDA #0
  441.    STA LINE╠EN
  442.    STA LINE╠EN+1
  443.    LDA #<GREP╠INE
  444.    LDY #>GREP╠INE
  445.    STA LINE╨TR
  446.    STY LINE╨TR+1
  447. -  JSR GET┬YTE
  448.    BCC +
  449.    RTS
  450. +  CMP #CHR├╥
  451.    BNE +
  452.    LDA #0
  453.    LDY #0
  454.    STA (LINE╨TR),Y
  455.    LDA #<GREP╠INE
  456.    LDY #>GREP╠INE
  457.    STA LINE╨TR
  458.    STY LINE╨TR+1
  459.    CLC
  460.    RTS
  461. +  LDX LINE╠EN+1
  462.    CPX #>MAX╠INE╠EN
  463.    BCS -
  464.    LDY #0
  465.    STA (LINE╨TR),Y
  466.    INC LINE╨TR
  467.    BNE +
  468.    INC LINE╨TR+1
  469. +  INC LINE╠EN
  470.    BNE +
  471.    INC LINE╠EN+1
  472. +  JMP -
  473.  
  474. GET┬YTE = *
  475.    LDA BUF├OUNT
  476.    ORA BUF├OUNT+1
  477.    BEQ GET┬YTE╞ILL┬UF
  478.    LDY #0
  479.    LDA (BUF╨TR),Y
  480.    INC BUF╨TR
  481.    BNE +
  482.    INC BUF╨TR+1
  483. +  LDX BUF├OUNT
  484.    BNE +
  485.    DEC BUF├OUNT+1
  486. +  DEC BUF├OUNT
  487.    CLC
  488.    RTS
  489.  
  490. GET┬YTE╞ILL┬UF = *
  491.    JSR CHECKSTOP
  492.    LDA #<GREP╔N┬UF
  493.    LDY #>GREP╔N┬UF
  494.    STA ZP
  495.    STY ZP+1
  496.    STA BUF╨TR
  497.    STY BUF╨TR+1
  498.    LDA IN┬UF╠EN
  499.    LDY IN┬UF╠EN+1
  500.    LDX INFILE
  501.    JSR READ
  502.    BEQ +
  503.    BCS +
  504.    STA BUF├OUNT
  505.    STY BUF├OUNT+1
  506.    JMP GET┬YTE
  507. +  SEC
  508.    RTS
  509.  
  510. ;===THE END===
  511. GREP┬SS = *
  512. GREP╠INE = GREP┬SS
  513. GREP╔N┬UF  = GREP╠INE+MAX╠INE╠EN
  514.