//TSO0020 JOB  (TSO),
//             'Build CLRSCRN',
//             CLASS=A,
//             MSGCLASS=A,
//             MSGLEVEL=(1,1)
//HELP    EXEC PGM=IEBUPDTE,PARM=NEW
//SYSPRINT DD  SYSOUT=*
//SYSUT2   DD  DISP=SHR,DSN=SYS2.HELP
//SYSIN    DD  *
./ ADD NAME=CLRSCRN
)F CLRSCRN  FUNCTIONS -
  Clear the screen on a 3270 type terminal
)X SYNTAX -
         CLRSCRN
)O OPERANDS -
  No operands on CLRSCRN command.
//ASM     EXEC PGM=IEBUPDTE,PARM=NEW
//SYSPRINT DD  SYSOUT=*
//SYSUT2   DD  DISP=SHR,DSN=SYS2.TSOCP.ASM
//SYSIN    DD  *
./ ADD NAME=CLRSCRN
         PUNCH ' ALIAS CLS     &SYSDATE &SYSTIME'
         PUNCH ' ALIAS SYSCLS  &SYSDATE &SYSTIME'
         PUNCH ' ALIAS CLEARS  &SYSDATE &SYSTIME'
         TITLE 'CLRSCRN'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         SPACE 1
CLRSCRN  CSECT
         USING CLRSCRN,R15          , temporary base register
         ST    R14,RETURN           , save return address
         LR    R14,R15              , permanent base register
         DROP  R15                  , not needed any more
         USING CLRSCRN,R14          , tell assembler the new base
         GTSIZE                     , get screen size info
         LA    R15,20               , set up RC=20 if no 3270
         LTR   R0,R0                , Is it 3270?
         BZ    EXIT                 , BIF not
         MR    R0,R0                , Screen end = Lines times LineLen
         BCTR  R1,0                 , Convert position to offset
         D     R0,=F'64'            , Module 64
         N     R1,=X'0000003F'      , Make absoultely certain
         STC   R0,SCREND+1          , column offset mod 64
         STC   R1,SCREND            , row offset mod 64
         TR    SCREND,SCRPOS        , make 3270 buffer address
         TPUT  SCRCNTL,LSCRCNTL,FULLSCR,,HOLD   and send
EXIT     DS    0H                   , get out
         L     R14,RETURN           , load retrun address
         BR    14                   , and branch
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         TITLE 'CLRSCRN - DATA AREA'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         SPACE 1                    ,
RETURN   DS    F                    , slot for saving return address
SCRCNTL  DS    0CL11                , 3270 command string
         DC    AL1(WCC)             , Write contro Character
         DC    AL1(SBA)             , Set Buffer Address Order
         DC    X'4040'              , RC = 01,01
         DC    AL1(IC)              , Insert Cursor Order
         DC    AL1(RA)              , Repeat Until Address order
SCREND   DC    X'5D7F'              , Last position on screen
         DC    X'00'                , Character to be repeated
LSCRCNTL EQU   *-SCRCNTL            , length of command string
SCRPOS   DS    0H                   , modulo 64 translate table
         DC    X'40C1C2C3C4C5C6C7C8C94A4B4C4D4E4F'
         DC    X'50D1D2D3D4D5D6D7D8D95A5B5C5D5E5F'
         DC    X'6061E2E3E4E5E6E7E8E96A6B6C6D6E6F'
         DC    X'F0F1F2F3F4F5F6F7F8F97A7B7C7D7E7F'
         LTORG
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
WCC      EQU   X'C3'                , restore Kbd, reset MDT
SF       EQU   X'1D'                , Start Field
SBA      EQU   X'11'                , Set Buffer Address
IC       EQU   X'13'                , Insert Cursor
RA       EQU   X'3C'                , Repeat to Address
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         END
//TSOASML EXEC TSOASML,MEM=CLRSCRN
