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 / OPTSCN.S < prev    next >
Text File  |  2000-06-30  |  3KB  |  123 lines

  1. ****    OPTSCN -- options scanner
  2. **
  3. **    Function:
  4. **        Scan command line for options and set flags in option table
  5. **    Inputs:    D0.l == pointer to command line (assumed capitalized)
  6. **        D1.l == pointer to options table
  7. **        D2.l == pointer to input FCB (0 indicates none)
  8. **        D3.l == pointer to output FCB (0 indicates none)
  9. **    Outputs: D0.l == pointer to end of parsed command line (+1)
  10. **    Registers affected: D0.l, ( options table )
  11. **    Routines called:  OPTSET, MAKEFCB
  12. **    Special error conditions: D1.l=0 implies error in options.
  13. **            Error msg printed to CON: if:
  14. **                o bad delimiter on line
  15. **                o bad file name
  16. **                o input re-direct not allowed
  17. **                o output re-direct not allowed
  18. *
  19. **            last mod: 14feb85 jmk /make ptr into longword/
  20. *
  21. *
  22.     .globl    optscn
  23.     .globl    optset
  24.     .globl    makefcb
  25.     .text
  26. optscn:
  27.     move.l    a0,-(a7)
  28.     move.l    d1,-(a7)
  29.     move.l    d0,a0        * ptr to line
  30. *
  31. optsc1:    move.b    (a0)+,d0
  32.     cmpi.b    #0,d0
  33.     beq    optscx        * end of line
  34.     cmpi.b    #' ',d0
  35.     beq    optsc1        * ignore blanks
  36.     cmpi.b    #'-',d0
  37.     beq    optsco        * option flag
  38.     cmpi.b    #'$',d0
  39.     beq    optsco        * alternate option flag
  40.     cmpi.b    #'*',d0        * test for wildcard
  41.     beq    optsc2        * treat as A-Z (filespec)
  42.     cmpi.b    #'<',d0
  43.     beq    optinr        * input re-direct
  44.     cmpi.b    #'>',d0
  45.     beq    optotr        * output re-direct
  46.     cmpi.b    #'A',d0
  47.     blt    opterm        * bad character
  48.     cmpi.b    #'Z',d0
  49.     bgt    opterm        * bad character
  50. *
  51. **    it's a file name
  52. *
  53. optsc2:    move.l    d2,d1        * file FCB
  54.     beq    optfne        * hey, not legal
  55.     move.l    a0,d0
  56.     subq.l    #1,d0        * pointer to beginning of name
  57.     jsr    makefcb        * make file name into FCB
  58.     move.l    d0,a0
  59.     tst.l    d1
  60.     bne    optsc1        * no problem
  61. optfne:    move.l    #bdfnm,d1
  62.     bra    opter1
  63. *
  64. *
  65. optinr:    move.l    d3,d1        * ptr to input fcb
  66.     beq    optie        * hey, not legal
  67.     move.l    a0,d0
  68.     jsr    makefcb
  69.     move.l    d0,a0
  70.     tst.l    d1
  71.     bne    optsc1        * no problem
  72. optie:    move.l    #bdinf,d1
  73.     bra    opter1
  74. *
  75. *
  76. optotr:    move.l    d4,d1        * prt to output fcb
  77.     beq    optoe        * hey, not legal
  78.     move.l    a0,d0
  79.     jsr    makefcb
  80.     move.l    d0,a0
  81.     tst.l    d1
  82.     bne    optsc1        * no problem
  83. optoe:    move.l    #bdotf,d1
  84.     bra    opter1
  85. *
  86. *
  87. optsco:    move.l    a0,d0        * option pointer
  88.     move.l    (a7),d1        * table pointer
  89.     jsr    optset
  90.     move.l    d0,a0
  91.     tst.l    d1
  92.     beq    opterr        * if bad option
  93.     bra    optsc1
  94. *
  95. *
  96. opterm:    subq.l    #1,a0        * point to bad character
  97. opterr:                * A0.L points to bad option
  98.     move.b    (a0),optbd
  99.     move.l    #optdm,d1
  100. opter1:    moveq    #9,d0
  101.     trap    #2        * print error msg
  102.     clr.l    (a7)        * return error
  103. *
  104. optscx:    move.l    (a7)+,d1
  105.     move.l    a0,d0        * pointer to end of line
  106.     move.l    (a7)+,a0
  107.     rts
  108. *
  109. *
  110.     .data
  111. cr:    .equ    13
  112. lf:    .equ    10
  113. *
  114. optdm:    .dc.b    '   Illegal option [x]',cr,lf,'$'
  115. optbd:    .equ    optdm+19
  116. *
  117. bdfnm:    .dc.b    '  Bad file spec.',cr,lf,'$'
  118. bdinf:    .dc.b    '  Illegal input re-direct',cr,lf,'$'
  119. bdotf:    .dc.b    '  Illegal output re-diredt',cr,lf,'$'
  120. *
  121. *
  122.     .end
  123.