home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / CPM68K / SD68K.LBR / OPTSET.S < prev    next >
Text File  |  2000-06-30  |  1KB  |  58 lines

  1. ****    OPTSET -- option set
  2. **
  3. **    Function:
  4. **        Set options in option table according to options in command
  5. **        line.  Terminate at first delimiter (i.e. not A-Z)
  6. **    Inputs:    D0.l == pointer to first option
  7. **        D1.l == pointer to table
  8. **    Outputs: D0.l == pointer to delimiter
  9. **    Registers affected:  D0.l, (table)
  10. **    Routines called: -none-
  11. **    Special error conditions: D1.l=0 indicates error, then D0.l points
  12. **        to invalid option.
  13. **
  14. **    Option table format:  The options table consists of a series of
  15. **        byte pairs as "option letter, occurance value".
  16. **        i.e.
  17. **            .dc.b    'A',0
  18. **            .dc.b    'B',0
  19. **            etc,
  20. **            .dc.b    0,0    * terminator
  21. **
  22. **        If an option is encountered, the least-significant bit of the
  23. **        occurance value is *TOGGLED*.
  24. **
  25. *
  26.     .globl    optset
  27.     .text
  28. optset:
  29.     movem.l    d1/a0-a1,-(a7)
  30.     move.l    d0,a0
  31. *
  32. optst1:    move.b    (a0),d2        * get option
  33.     cmpi.b    #'A',d2
  34.     blt    optstx        * delimiter
  35.     cmpi.b    #'Z',d2
  36.     bgt    optstx        * delimiter
  37.     move.l    d1,a1        * table pointer
  38. optst2:    tst.b    (a1)
  39.     bne    optst3        * if not end of table
  40.     clr.l    d1        * bad option
  41.     bra    optstx
  42. *
  43. optst3:    cmp.b    (a1),d2
  44.     beq    optst4        * bingo!
  45.     addq.l    #2,a1
  46.     bra    optst2        * keep looking
  47. optst4:    addq.l    #1,a1
  48.     eori.b    #1,(a1)        * toggle value
  49. *
  50.     addq.l    #1,a0        * go to next character in line
  51.     bra    optst1
  52. *
  53. optstx:    move.l    a0,d0        * pointer to err or delimiter
  54.     movem.l    (a7)+,d2/a0-a1
  55.     rts
  56. *
  57.     .end
  58.