home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / asm_programming / AS02.ZIP / VALIDATE.ASM < prev    next >
Assembly Source File  |  1985-01-08  |  3KB  |  89 lines

  1. ;validate
  2. ;
  3. ;this routine will check for valid filenames and is call from BASIC
  4. ;
  5. ;written by howard glosser
  6. ;
  7. ;return codes set as follows...
  8. ;
  9. ; 0 - no special occurrences
  10. ; 1 - global name
  11. ; 2 - invalid drive
  12. ; 3 - invalid filename
  13. ; 4 - no extension on filename
  14. ;
  15. cseg        segment
  16.         assume cs:cseg
  17.         jmp begin
  18. ;
  19. retcd        dw 0
  20. ;
  21. validate    proc far
  22. ;
  23. begin:        push bp         ;save bp for far return
  24.         mov bp,sp        ;move stack pointer to bp
  25.         mov bx,[bp]+10        ;point bx at parm 1
  26.         mov si,1[bx]        ;get filename to validate
  27.         mov bx,[bp]+8        ;point bx at parm 2
  28.         mov di,1[bx]        ;get work area
  29.         mov cs:retcd,0        ;move 0 to return code
  30.         push si         ;save si register
  31.         mov al,0fh        ;bits on in low al reg for parse
  32.         mov ah,29h        ;set up for parsing filename
  33.         int 21h         ;dos interrupt
  34.         pop si            ;restore si register
  35.         cmp al,01h        ;do we have a global name?
  36.         jne ckdrv        ;no - check drive
  37.         or cs:retcd,01h     ;yes - indicate global name
  38. ;
  39. ckdrv:        cmp byte ptr[si]+1,':'  ;is there a drive letter?
  40.         jne ckname        ;no - check the name
  41.         add si,2        ;yes - set si past letter/colon
  42.         cmp al,0ffh        ;is it valid?
  43.         jne ckname        ;yes - go check name
  44.         or cs:retcd,02h     ;no - indicate invalid drive
  45. ;
  46. ckname:     cmp byte ptr[di]+1,' '  ;invalid characters in name
  47.         jne scaname        ;no - scan for name
  48.         or cs:retcd,04h     ;yes - indicate invalid name
  49.         jmp namedone        ;done - go leave subroutine
  50. ;
  51. scaname:    mov al,'.'              ;set al for end of name scan
  52.         mov cx,9        ;scan nine characters
  53. ;
  54. nameloop:    cmp byte ptr[si],al    ;get a hit on '.'
  55.         je ckext        ;yes - check extension
  56.         cmp byte ptr[si],' '    ;hit a blank
  57.         je noext        ;yes - no extension on name
  58.         inc si            ;bump name one character
  59.         loop nameloop        ;do again
  60.         or cs:retcd,04h     ;get here - name's invalid
  61.         jmp namedone        ;done - go leave subroutine
  62. ;
  63. ckext:        inc si            ;bump si past '.'
  64.         mov al,' '              ;set al for extension scan
  65.         mov cx,4        ;scan four characters
  66.         cmp byte ptr[si],al    ;get a hit on ' ' at start
  67.         je namedone        ;yes - there's no actual extension
  68. ;
  69. extloop:    cmp byte ptr[si],al    ;get a hit on ' '
  70.         je namedone        ;yes - filename is okay
  71.         inc si            ;bump to next character in ext
  72.         loop extloop        ;do again
  73.         or cs:retcd,04h     ;get here - name's invalid
  74.         jmp namedone        ;done - go leave subroutine
  75. ;
  76. noext:        or cs:retcd,08h     ;no extension - indicate this
  77. ;
  78. namedone:    mov di,[bp]+6        ;point di at parm 3
  79.         mov ax,cs:retcd     ;put return code in ax
  80.         mov [di],ax        ;move return code for basic
  81.         pop bp            ;restore bp
  82.         ret 6            ;return with three parms on stack
  83. ;
  84. validate    endp
  85. ;
  86. cseg        ends
  87. ;
  88.         end
  89.