home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / qlabel / qlabel.asm next >
Assembly Source File  |  1992-11-15  |  7KB  |  151 lines

  1. ;; QLABEL - gets, creates or changes volume label
  2. ;;
  3. ;; Usage:
  4. ;;
  5. ;; QLABEL [ENTER] displays current label
  6. ;;
  7. ;; QLABEL [ANY_NEWNAME] [ENTER] changes or creates label name
  8. ;;
  9. ;; Requires DOS v2.0 or better (no one uses 2 or less do they??????)
  10. ;;
  11. ;; This program can be assembled using the A86 or TASM assemblers 
  12. ;;
  13. ;; Not tested with Masm, should work?
  14. ;;
  15. ;; This code is "PUBLIC DOMAIN"
  16. ;;
  17. ;; by William Cravener 11/14/92
  18. ;;
  19. ;-----------------------------------------------------------------------------
  20. ;;
  21. code                    SEGMENT         ; set up code and data section
  22.  
  23. ASSUME          cs:code, ds:code, es:code, ss:code
  24.  
  25. ORG             100h                    ; COM programs begin here
  26.  
  27. main:           jmp     work_to_do      ; skip over "DATA"
  28. ;;
  29. ;-----------------------------------------------------------------------------
  30. ;; DATA
  31. ;;
  32. fcb_ext                 DB      0ffh            ;extended FCB
  33.                         DB      5 DUP (0)       ;unused
  34. fcb_attrib              DB      8               ;volume attribute
  35. fcb_drive               DB      0               ;default drive 
  36. file_root               DB      8 DUP ('?')     ;find any name
  37. file_ext                DB      3 DUP ('?')
  38. block_num               DW      0               ;current block number
  39. rec_size                DW      0               ;record size
  40. file_size               DW      0               ;file size
  41.                         DW      0               ;double word
  42. file_date               DW      0               ;file date stamp
  43. file_time               DW      0               ;file time stamp
  44.                         DB      8 DUP (0)       ;DOS work area
  45. rec_num                 DB      0               ;current record number
  46. random_rec              DW      0               ;random record number
  47.                         DW      0               ;double word
  48. new_name                DB      11 DUP (' ')    ;storage for new name
  49. explain                 DB      'Current Label: $' ;message
  50. cr_lf                   DB      0dh, 0ah, '$'   ;carriage return linefeed
  51. ;;
  52. ;-------------------------------------------------------------------------------
  53. work_to_do:
  54.         mov     si, 81h                 ; possible new label name
  55. back:                                   ; will be here to retrieve
  56.         lodsb                           ; get a character
  57.         cmp     al, ' '                 ; throw away spaces
  58.         je      back
  59.         cmp     al, 0dh                 ; if a carriage return user
  60.         ja      transfer_new_name       ; entered a new label name
  61.         jmp     show_label_name         ; whats to retrieve current label
  62. transfer_new_name:
  63.         mov     di, OFFSET new_name     ; point to new label storage
  64. get_next_char:
  65.         call    uppercase               ; be sure its uppercase
  66.         stosb                           ; store it
  67.         lodsb                           ; get another character
  68.         cmp     al, 0dh                 ; end of new name?
  69.         jne     get_next_char           ; no get next character
  70.         jmp     change_name             ; got all - go change it
  71. show_label_name:                        ; display current label
  72.         call    do_cr_lf                ; do a carriage linefeed pair
  73.         mov     ah, 9
  74.         mov     dx, OFFSET explain      ; display message
  75.         int     21h
  76.         call    get_current_label_name  ; go get current label name
  77.         mov     si, OFFSET file_root    ; point to beginning of name
  78.         mov     cx, 11                  ; upto 11 characters
  79. label_char:
  80.         lodsb                           ; get character
  81.         cmp     al, '?'                 ; if its '?' then no label name
  82.         je      name_end                ; just leave
  83.         cmp     al, ' '                 ; if a space
  84.         je      name_end                ; its the end of name string
  85.         call    print_char              ; print out the character
  86.         loop    label_char              ; get all characters
  87. name_end:
  88.         call    do_cr_lf                ; do one more carriage linefeed
  89.         jmp     all_done                ; and leave
  90. change_name:
  91.         call    get_current_label_name  ; go get current label name
  92.         call    delete_old_label_name   ; delete the current label name
  93.         call    write_new_label_name    ; create the new label name
  94. all_done:
  95.         mov     ax, 4c00h               ; finished
  96.         int     21h                     ; exit
  97. ;--------------------------------
  98. get_current_label_name:                 ; subroutine gets label name
  99.         mov     ah, 1ah
  100.         mov     dx, OFFSET fcb_ext      ; set dta address
  101.         int     21h
  102.         mov     ah, 11h
  103.         mov     dx, OFFSET fcb_ext      ; find volume name
  104.         int     21h
  105.         ret
  106. ;--------------------------------
  107. delete_old_label_name:                  ; subroutine deletes label name
  108.         mov     ah, 13h
  109.         mov     dx, OFFSET fcb_ext      ; delete name
  110.         int     21h
  111.         ret
  112. ;--------------------------------
  113. write_new_label_name:                   ; subroutine creates label name
  114.         mov     si, OFFSET new_name     ; points to new label name
  115.         mov     di, OFFSET file_root    ; points to fcb
  116.         mov     cx, 11                  ; maximum length
  117.         rep     movsb                   ; store new name to fcb
  118.         mov     ah, 16h
  119.         mov     dx, OFFSET fcb_ext      ; create new label name
  120.         int     21h
  121.         mov     ah, 10h
  122.         mov     dx, OFFSET fcb_ext      ; update and close
  123.         int     21h
  124.         ret
  125. ;--------------------------------
  126. print_char:                             ; Bios print character
  127.         mov     ah, 0eh                 ; at current cursor
  128.         mov     bh, 0                   ; location
  129.         int     10h
  130.         ret
  131. ;--------------------------------
  132. do_cr_lf:                               ; carriage return linefeed 
  133.         mov     ah, 9
  134.         mov     dx, OFFSET cr_lf
  135.         int     21h
  136.         ret
  137. ;--------------------------------
  138. uppercase:                              ; subroutine converts
  139.         cmp     al,'a'                  ; to uppercase
  140.         jb      isup                    ; if neccessary
  141.         cmp     al,'z'
  142.         ja      isup
  143.         sub     al,20h
  144. isup:
  145.         ret
  146. ;-------------------------------------------------------------------------------
  147. code                    ENDS            ; end of coding
  148.  
  149. END             main
  150.  
  151.