NAME SCROLL
PAGE ,132
COMMENT*
        THIS IS A FAR PROCEDURE TO BE USED WITH A BASIC PROGRAM TO PERFORM
        SCROLLING OF THE SCREEN IN A SPECIFIED WINDOW.  THE ARGUMENTS FOR
        THE CALL TO THE ROUTINE ARE:
                ULR% - ROW NUMBER (1-25) OF UPPER LEFT CORNER OF WINDOW
                ULC% - COL NUMBER (1-80) OF UPPER LEFT CORNER OF WINDOW
                LRR% - ROW NUMBER (1-25) OF LOWER RIGHT CORNER
                LRC% - COL NUMBER (1-80) OF LOWER RIGHT CORNER
                ATTR% - ATTRIBUTE OF BLANKED LINE: &H07=NORMAL, &H70=REVERSE
                        SEE TECH. REF. MANUAL PG. 2-51 FOR OTHERS
                LNGTH% - NUMBER OF LINES TO SCROLL (0 BLANKS ENTIRE WINDOW)
                         USE + NUMBER TO SCROLL UP
                         USE - NUMBER TO SCROLL DOWN
        NOTE !! -  THE ARGUMENTS ARE NOT VALUE CHECKED.

        FROM BASIC: CALL SCROLL(ULR%,ULC%,LRR%,LRC%,ATTR%,LNGHT%)

        PROGRAM BY: LEE M. BUCK
        DATE: 3-16-83

*

CSEG SEGMENT PUBLIC 'CODE'
                ASSUME CS:CSEG
SCROLL PROC FAR
                PUSH BP                 ;SAVE BP
                MOV BP,SP               ;SET FRAME POINTER FOR ADDRESSING STACK
                                        ;  PARAMETERS
                MOV AH,6                ;SET DEFAULT TO SCROLL ACTIVE PAGE UP
                                        ;  SWITCH TO 7 FOR DOWN
                MOV SI,[BP+6]           ;GET ADDR OF LNGTH% OF SCROLL
                MOV AL,[SI]             ;GET VALUE OF LNGTH% OF SCROLL
                CMP AL,0                ;CHECK FOR LENGTH .GE. ZERO
                JGE NO_CHANGE           ;MAKE NO CHANGE TO AH IF LNGHT% .GE. 0
                MOV AH,7                ;RESET AH TO SCROLL DOWN
                NEG AL                  ;USE POS. VALUE OF SCROLL LNGTH%
NO_CHANGE:      MOV SI,[BP+8]           ;GET ADDR OF ATTR% FOR BLANKED LINE
                MOV BH,[SI]             ;GET VALUE OF ATTR%
                MOV SI,[BP+10]          ;GET ADDR OF LRC% OF WINDOW
                MOV DL,[SI]             ;GET VALUE OF LRC%
                MOV SI,[BP+12]          ;GET ADDR OF LRR% OF WINDOW
                MOV DH,[SI]             ;GET VALUE OF LRR%
                MOV SI,[BP+14]          ;GET ADDR OF URC% OF WINDOW
                MOV CL,[SI]             ;GET VALUE OF URC%
                MOV SI,[BP+16]          ;GET ADDR OF URR% OF WINDOW
                MOV CH,[SI]             ;GET VALUE OF URR%
                DEC CH                  ;DECREMENT WINDOW COORDINATES BY ONE
                                        ;  TO ACCOUNT FOR FACT SYSTEM DEFINES
                                        ;  SCREEN FROM 0-24 AND 0-79
                DEC CL
                DEC DH
                DEC DL
                INT 10H                 ;CALL BIOS VIDEO_IO
                POP BP                  ;RESTORE ORIGINAL BP
                RET 12                  ;RETURN AND INC SP BY 12 FOR 6 ARGS
SCROLL ENDP
CSEG ENDS
END
