home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / DRIPAK.ZIP / CPM_3-0 / SOURCES / PARSE.ASM < prev    next >
Assembly Source File  |  1982-12-31  |  3KB  |  234 lines

  1. $title    ('Filename Parser')
  2.     name    Parse
  3.     public parse
  4.     CSEG
  5.     ; BC->.(.filename,.fcb)
  6.     ;
  7.     ; filename = [d:]file[.type][;password]
  8.     ;             
  9.     ; fcb assignments
  10.     ;
  11.     ;   0     => drive, 0 = default, 1 = A, 2 = B, ...
  12.     ;   1-8   => file, converted to upper case,
  13.     ;            padded with blanks
  14.     ;   9-11  => type, converted to upper case,
  15.     ;         padded with blanks
  16.     ;   12-15 => set to zero
  17.     ;   16-23 => password, converted to upper case,
  18.     ;         padded with blanks
  19.     ;   24-25 => address of password field in 'filename',
  20.     ;         set to zero if password length = 0
  21.     ;   26    => length of password (0 - 8)
  22.     ;
  23.     ; Upon return, HL is set to FFFFH if BC locates
  24.     ;            an invalid file name;
  25.     ; otherwise, HL is set to 0000H if the delimiter
  26.     ;            following the file name is a 00H (NULL)
  27.     ;          or a 0DH (CR);
  28.     ; otherwise, HL is set to the address of the delimiter
  29.     ;            following the file name.
  30.     ;
  31. parse:    lxi h,0
  32.     push h
  33.     push h
  34.     mov h,b
  35.     mov l,c
  36.     mov e,m
  37.     inx h
  38.     mov d,m
  39.     inx h        
  40.     mov a,m
  41.     inx h
  42.     mov h,m
  43.     mov l,a    
  44.     call deblnk
  45.     call delim
  46.     jnz parse1
  47.     mov a,c
  48.     ora a
  49.     jnz parse9
  50.     mov m,a
  51.     jmp parse3
  52. parse1:    mov b,a
  53.     inx d
  54.     ldax d
  55.     cpi ':'
  56.     jnz parse2
  57.     mov a,b
  58.     sui 'A'
  59.     jc parse9
  60.     cpi 16
  61.     jnc parse9
  62.     inr a
  63.     mov m,a
  64.     inx d
  65.     call delim
  66.     jnz parse3
  67.     cpi '.'
  68.     jz parse9
  69.     cpi ':'
  70.     jz parse9
  71.     cpi ';'
  72.     jz parse9
  73.     jmp parse3
  74. parse2:    dcx d
  75.     mvi m,0
  76. parse3:    mvi b,8
  77.     call setfld
  78.     mvi b,3
  79.     cpi '.'
  80.     jz parse4
  81.     call padfld
  82.     jmp parse5
  83. parse4:    inx d
  84.     call setfld
  85. parse5:    mvi b,4
  86. parse6:    inx h
  87.     mvi m,0
  88.     dcr b
  89.     jnz parse6
  90.     mvi b,8
  91.     cpi ';'
  92.     jz parse7
  93.     call padfld
  94.     jmp parse8
  95. parse7:    inx d
  96.     call pwfld
  97. parse8:    push d
  98.     call deblnk
  99.     call delim
  100.     jnz pars81
  101.     inx sp
  102.     inx sp
  103.     jmp pars82
  104. pars81: pop d
  105. pars82: mov a,c
  106.     ora a
  107.     pop b
  108.     mov a,c
  109.     pop b
  110.     inx h
  111.     mov m,c
  112.     inx h
  113.     mov m,b
  114.     inx h
  115.     mov m,a
  116.     xchg
  117.     rnz
  118.     lxi h,0
  119.     ret
  120. parse9:    pop h
  121.     pop h
  122.     lxi h,0ffffh
  123.     ret
  124.  
  125. setfld:    call delim
  126.     jz padfld
  127.     inx h
  128.     cpi '*'
  129.     jnz setfd1
  130.     mvi m,'?'
  131.     dcr b
  132.     jnz setfld
  133.     jmp setfd2
  134. setfd1: mov m,a
  135.     dcr b
  136. setfd2: inx d
  137.     jnz setfld
  138. setfd3: call delim
  139.     rz
  140.     pop h
  141.     jmp parse9
  142.  
  143. pwfld:    call delim
  144.     jz padfld
  145.     inx sp
  146.     inx sp
  147.     inx sp
  148.     inx sp
  149.     inx sp
  150.     inx sp
  151.     push d
  152.     push h
  153.     mvi l,0
  154.     xthl
  155.     dcx sp
  156.     dcx sp
  157. pwfld1:    inx sp
  158.     inx sp
  159.     xthl
  160.     inr l
  161.     xthl
  162.     dcx sp
  163.     dcx sp
  164.     inx h
  165.     mov m,a
  166.     inx d
  167.     dcr b
  168.     jz setfd3
  169.     call delim
  170.     jnz pwfld1
  171.     ;jmp padfld
  172.  
  173. padfld:    inx h
  174.     mvi m,' '
  175.     dcr b
  176.     jnz padfld
  177.     ret
  178.  
  179. delim:    ldax d
  180.     mov c,a
  181.     ora a
  182.     rz
  183.     mvi c,0
  184.     cpi 0dh
  185.     rz
  186.     mov c,a
  187.     cpi 09h
  188.     rz
  189.     cpi ' '
  190.     jc delim2
  191.     rz
  192.     cpi '.'
  193.     rz
  194.     cpi ':'
  195.     rz
  196.     cpi ';'
  197.     rz
  198.     cpi '='
  199.     rz
  200.     cpi ','
  201.     rz
  202.     cpi '/'
  203.     rz
  204.     cpi '['
  205.     rz
  206.     cpi ']'
  207.     rz
  208.     cpi '<'
  209.     rz
  210.     cpi '>'
  211.     rz
  212.     cpi 'a'
  213.     rc
  214.     cpi 'z'+1
  215.     jnc delim1
  216.     ani 05fh
  217. delim1:    ani 07fh
  218.     ret
  219. delim2:    pop h
  220.     jmp parse9
  221.  
  222. deblnk: ldax d
  223.     cpi ' '
  224.     jz dblnk1
  225.     cpi 09h
  226.     jz dblnk1
  227.     ret
  228. dblnk1: inx d
  229.     jmp deblnk
  230.     END
  231.     EOF
  232.  
  233.  
  234.