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 / ZSYS / SIMTEL20 / SYSLIB / SLIB1.LBR / SBLINE.Z80 < prev    next >
Text File  |  2000-06-30  |  3KB  |  95 lines

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