Metropoli BBS
VIEWER: usend.s MODE: TEXT (ASCII)
**********************************************************************
* Name:		USEND
* Stack:	( ob --> )
*		( {names} --> )
* Desc:		Fast IR send
* Author:	Dan Kirkland
**********************************************************************
DEFINE flag?	ONE TestUserFlag

ASSEMBLE
	CON(1)	8
RPL
xNAME USEND
::
  CK1
  ERRSET
  ::
    ZEROZERO FalseFalse OpenUart?Clr
    CODE
		GOSBVL	=SAVPTR
		LC(3)	#504
		D0=(5)	=IRC
		DAT0=C	1		[IRI EIRU EIRI IRE] = [0 1 0 0]
		D0=(2)	=BAU
		DAT0=C	XS		[UCK BD2 BD1 BD0] = 7680 bauds
		GOSBVL	=DisableIntr
		GOSBVL	=OffNoBlush
		GOSBVL	=AllowIntr
		GOVLNG	=ClockDisab
    ENDCODE

    FALSETRUE				( * Wait for connection * )
    BINT_112d ZERO_DO (DO)
       "$" KPUTSERIAL
       VERYSLOW
       UARTBUFLEN DROP
       #1= IT DropExitLoop
    LOOP

    case :: # C02 ERROROUT ;		( * Got no connection * )

    DUPNULL{}? flag? OR
    IT ONE{}N
    DTYPELIST? ?SKIP ONE{}N

    DUPLENCOMP
    ZERO TOTEMPSWAP
    ObjSegment$ DROPSWAPDROP KPUTSERIAL

    toLEN_DO (DO)
      DUPINDEX@ NTHCOMPDROP
      ::
        NotIdorLAM? flag? ORcase ONE{}N
        DUP@ NOTcase ONE{}N
        SWAP DUPTYPEIDNT? ?SKIP LAM>ID
        ID>$ TWO{}N
      ;
      DUP OCRC SWAP TWO #/ #+
      ZERO TOTEMPSWAP
      ObjSegment$ DROPSWAPDROP
      ZERO TOTEMPOB
      ROT ObjSegment$ DROPSWAPDROP
      &$ KPUTSERIAL
      ZERO TOTEMPOB
      BEGIN
        OVER ObjSegment$
        SWAPDUP NULL$? IT 3skip
        ONE
        ::
          GETSERIAL ?SEMI
          Attn?Abort ERROROUT
        ;
        DROP
        KPUTSERIAL
      UNTIL
      2DROP
    LOOP
    DROP
  ;

  ERRTRAP
  :: 'REVAL ERRJMP ;
  :: CLOSEUART
     CODE
	GOSBVL	=SAVPTR
	GOSBVL	=DispOn
	GOVLNG	=GETPTRLOOP
     ENDCODE
  ;
;
**********************************************************************
[ RETURN TO DIRECTORY ]