home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol089 / sbline.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  2.6 KB  |  99 lines

  1. ;
  2. ; SYSLIB Module Name:  SBLINE
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  2.0
  5. ; Module Version Number:  1.0
  6. ; Module Entry Points:
  7. ;    BLINE
  8. ; Module External References:
  9. ;    CAPS
  10. ;
  11.  
  12. ;
  13. ;  BLINE -- BDOS Input Line Editor
  14. ;    BLINE provides a very convenient interface to the BDOS for input
  15. ; line editor functions.  It uses a buffer supplied by the user for storage
  16. ; of the input line, and it returns a pointer to the first byte of the line
  17. ; upon return.  The line stored in this buffer is terminated by a binary zero.
  18. ;    To use BLINE, the user need only call it, with a capitalization flag
  19. ; stored in the A Register and HL pointing to the first byte of the user-
  20. ; supplied buffer which will contain the line.  This buffer is structured
  21. ; as follows:
  22. ;        1st Byte - Size (filled in by user)
  23. ;        2nd Byte - Char count (filled in by BLINE)
  24. ;        3rd to nth Byte - Characters of Line (filled in by BLINE)
  25. ;        n+1st Byte - Terminating Zero
  26. ; The number of bytes allocated to the entire buffer is SIZE+3, where SIZE
  27. ; is the buffer size as supplied by the user.
  28. ;    If A = 0, BLINE does not capitalize the input line characters;
  29. ; if A <> 0, BLINE capitalizes the input line characters
  30. ; before returning to the caller.
  31. ;    No error codes are returned by BLINE.  On return, HL points to the
  32. ; first byte of the input line and A contains a count of the number of
  33. ; characters in that line.
  34. ;
  35.  
  36. ;
  37. ;  EQUATES
  38. ;
  39. BDOS        EQU    5
  40. B$RDLINE    EQU    10    ; READ LINE FUNCTION
  41.  
  42. ;
  43. ;  EXTERNAL DECLARATIONS
  44. ;
  45.     EXT    CAPS
  46.  
  47. ;
  48. ;  MAIN ROUTINE FOR BLINE
  49. ;
  50. BLINE::
  51.     JMP    START    ; SKIP OVER BUFFER
  52. LINEST:
  53.     DS    2    ; ADDRESS OF START OF LINE BUFFER
  54. CAPFLG:
  55.     DS    1    ; CAPITALIZATION FLAG (0=NO CAP)
  56. START:
  57.     PUSH    D    ; SAVE DE, BC
  58.     PUSH    B
  59.     STA    CAPFLG    ; SAVE CAPITALIZATION FLAG
  60.     SHLD    LINEST    ; SAVE ADDRESS OF FIRST BYTE
  61.     XCHG        ; DE PTS TO BUFFER
  62.     MVI    C,B$RDLINE    ; READ LINE FUNCTION IN BDOS
  63.     CALL    BDOS    ; DO READ LINE FUNCTION
  64.     LHLD    LINEST    ; PT TO RETURNED CHAR COUNT
  65.     INX    H
  66.     MOV    A,M    ; GET IT
  67.     INX    H    ; PT TO FIRST CHAR
  68.     PUSH    H    ; SAVE PTR TO FIRST CHAR
  69.     ADD    L    ; ADD CHAR COUNT
  70.     MOV    L,A
  71.     MOV    A,H
  72.     ACI    0
  73.     MOV    H,A    ; HL PTS TO AFTER LAST CHAR
  74.     MVI    M,0    ; STORE ENDING ZERO
  75.     POP    H    ; GET PTR TO FIRST CHAR
  76.     LDA    CAPFLG    ; CAPITALIZE?
  77.     ORA    A    ; 0=NO
  78.     JZ    DONE
  79.     PUSH    H    ; SAVE PTR TO FIRST CHAR
  80. CAPLP:
  81.     MOV    A,M    ; GET CHAR
  82.     ORA    A    ; END OF LINE?
  83.     JZ    CAPDN
  84.     CALL    CAPS    ; CAPITALIZE CHAR
  85.     MOV    M,A    ; PUT IT BACK
  86.     INX    H    ; PT TO NEXT
  87.     JMP    CAPLP
  88. CAPDN:
  89.     POP    H    ; GET PTR TO FIRST CHAR
  90. DONE:
  91.     POP    B    ; RESTORE REGS
  92.     POP    D
  93.     DCX    H    ; PT TO CHAR COUNT
  94.     MOV    A,M    ; GET CHAR COUNT
  95.     INX    H    ; PT TO FIRST CHAR OF LINE
  96.     RET
  97.  
  98.     END
  99.