home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / source / cls.lha / CLS.asm
Assembly Source File  |  1986-12-07  |  3KB  |  86 lines

  1. * CLI TOY #1
  2. * CLS.ASM:     A command to clear the current (CLI) window. Works by
  3. *              sending a HOME/CLEAR TO END OF SCREEN sequence to CON:
  4. *
  5. * Perpetrator: Dewi Williams  ..!ihnp4!druca!dewi
  6. *              Unconditionally placed in the public domain.
  7.  
  8. * Included equate files.
  9. * -----------------------------------------------------------------------
  10.       NOLIST 
  11.       INCLUDE  "exec/types.i"
  12.       INCLUDE  "exec/libraries.i"
  13.       INCLUDE  "libraries/dos.i"
  14.       LIST
  15.  
  16. * Local Equates
  17. * ------------------------------------------------------------------------
  18. SysBase  EQU   4        ; The one known address in the system.
  19.  
  20. * External references
  21. * -----------------------------------------------------------------------
  22.  
  23.     EXTERN_LIB    OpenLibrary
  24.     EXTERN_LIB    Write
  25.     EXTERN_LIB    Output
  26.     EXTERN_LIB      IoErr
  27.  
  28. * macros
  29. * ------------------------------------------------------------------------
  30. * Calls to dos.library and exec library
  31. callsys  MACRO
  32.       CALLLIB      _LVO\1
  33.       ENDM
  34.  
  35. * The code segment
  36. * -------------------------------------------------------------------------
  37.  
  38.    RORG     0              ; Relocatable code.
  39.  
  40.    ;------ get Exec's library base pointer:
  41.    move.l   SysBase,a6
  42.    LEA.L    DOSName(PC),A1    ; name of dos library
  43.    move.l   #LIBRARY_VERSION,d0
  44.  
  45.    callsys  OpenLibrary
  46.    MOVE.L   D0,A6             ; Save library pointer (always in A6).
  47.    BEQ.S    DOSFAIL           ; Give up!
  48.  
  49. * Obtaining the output handle (needed for write)
  50.    callsys  Output            ; Always works -- copy from process structure.
  51.    MOVE.L   D0,D1             ; Needed there by write
  52.  
  53. * Write the sequence to the driver
  54.    LEA.L    CLS(PC),A0
  55.    MOVE.L   A0,D2             ; Effective address of the buffer
  56.    MOVEQ    #4,D3             ; Length of buffer to write
  57.    callsys  Write             ; Do it
  58.    TST.L    D0                ; Just set condition code
  59.    BMI.S    IOFAIL            ; For disks & suchlike check == D3.
  60.  
  61. * Exit back to CLI (shouldn't close CLI handles).
  62.    MOVEQ    #0,D0             ; Success exit code
  63.  
  64. FINISHED:
  65.    rts
  66.  
  67. * All the error traps go here
  68. * ---------------------------
  69.  
  70.    ; Get here if we can't write to CON: for some reason.
  71. IOFAIL:
  72.    callsys  IoErr          ; Returns real reason for failure.
  73.    BRA.S    FINISHED       ; Quit
  74.  
  75.    ; Get here if we can't open dos.library. Give up! We should really
  76.    ; alert...
  77. DOSFAIL:
  78.    MOVEQ    #RETURN_FAIL,D0
  79.    RTS
  80.  
  81. * Data declarations
  82. * ------------------------------------------------
  83. DOSName        DOSNAME;
  84. CLS        DC.B    $9B,'H',$9B,'J'    ; HOME, CLEAR TO END OF SCREEN
  85.     END
  86.