Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: KLASXMIT

KLASXMIT.m

Go to the documentation of this file.
  1. KLASXMIT ;RTM;MSM CPU<->CPU TRANSMIT; [ 08/12/92 3:25 PM ]
  1. ; COPYRIGHT MICRONETICS DESIGN CORP. @1985
  1. ; If you need to send $C(1) or $C(2) through as data,
  1. ; pick another character and change the line INIT+1.
  1. ; %HT = wait time for READs (0 or 1)
  1. ; %DT = # of READs from IO device since last terminal read
  1. ; %DC = # iterations thru fast loop with no data received
  1. ; %RS = 1 if recording, 0 if not
  1. S %INT=0 K %MSM ; $D(%MSM) flag for calling from %TRANS
  1. S $ZT="ERROR^%XMIT"
  1. GO S %HT=0,%DT=0,%DC=0,%RS=0 G:%INT INIT
  1. W !?10,$P($P($ZV,","),"-")," - Transmission Utility"
  1. ASK R !!,"I/O PORT? > ",%IO G:%IO="" EXIT G:%IO?1"^".E EXIT I %IO?1"?".E D QUE G ASK
  1. I $I=%IO!'%IO W !!,"Cannot select your own device.",*7 G ASK
  1. S $ZT="NOPEN^%XMIT"
  1. B 1 O %IO::0 E W *7,"..line in use..waiting.." O %IO W "ready"
  1. S $ZT="ERROR^%XMIT"
  1. U %IO I $ZB($ZA,2,1) U 0 W !,"Device ",%IO," is an output only device.",*7 G ASK
  1. INIT U 0 S %ESC=$ZB($ZA,64,1) ; save escape processing status
  1. S %EXIT=$C(1),%RECORD=$C(2)
  1. ; Turn off pass-all, esc processing, & tab control. Set terminators
  1. OPEN U %IO:(0::::#001001:#800040:::$C(3,8,13,21,24,27,127))
  1. U 0:(0::::#000001:#800040:::$C(3,8,13,15,18,21,24,27,127)) W !
  1. TERM ;
  1. U 0 R %X:%HT
  1. S %CR=$ZB ; get READ terminator
  1. G:$E(%X)=%EXIT EXIT D:$E(%X)=%RECORD
  1. .D @$S(%RS:"HALT",1:"RECORD") S %X=$E(%X,2,$L(%X)) Q
  1. U %IO W:$L(%X) %X W:$T $C(%CR) S:$L(%X)!$T %DC=0,%HT=0 S %DT=0
  1. PORT ;
  1. U %IO R %Y:%HT G:%INT&(%Y=$C(1)) EXIT S %CR=$ZB U 0 W:$L(%Y) %Y W:$T $C(%CR) S:$L(%Y)!$T %DC=0,%HT=0,%DT=%DT+1
  1. S:$L(%Y)&%RS %XS=%XS_%Y I $T,%RS S ^XMIT(%XN,%XE)=%XS,%XE=%XE+1,%XS=""
  1. PORT1 I %DT>20 G TERM ; heavy incoming data, force check of CRT
  1. G TERM:$L(%X),PORT:$L(%Y)
  1. S %DC=%DC+1 G:%DC<500 TERM S %HT=1 ; READ timeout 1, goto slow mode
  1. TERMWAIT ; TERMWAIT and PORTWAIT handle periods in which no data has been
  1. ; received from either side for %DC iterations through the
  1. ; TERM & PORT loop.
  1. U 0 R %X#1:%HT E G PORTWAIT
  1. G:%X=%EXIT EXIT
  1. I %X=%RECORD D @$S(%RS:"HALT",1:"RECORD") S (%DC,%DT,%HT)=0 G TERM
  1. S %CR=$ZB
  1. U %IO W %X W:'$L(%X) $C(%CR) S (%DC,%DT,%HT)=0 G TERM
  1. PORTWAIT ;
  1. U %IO R %Y#1:%HT E G TERMWAIT
  1. G:%INT&(%Y=%EXIT) EXIT ; %TRANS rtn or gbl selection finished
  1. S %CR=$ZB
  1. U 0 W %Y W:'$L(%Y) $C(%CR) S (%DC,%DT,%HT)=0
  1. ; If recording...
  1. S:$L(%Y)&%RS %XS=%XS_%Y ; add to captured string
  1. ; or terminate & file captured string
  1. I '$L(%Y),%RS S ^XMIT(%XN,%XE)=%XS,%XE=%XE+1,%XS=""
  1. G PORT
  1. EXIT ;
  1. D:%RS HALT I $D(%ESC),%ESC U 0:(::::64)
  1. K %ESC,%X,%Y,%RS,%XN,%XE,%XS,%DC,%DT,%HT,%CR,%EXIT,%RECORD
  1. U:(%IO?.N)&(%IO'="") %IO:(:::::#001001:::$C(13,27))
  1. U 0:(:::::#000001:::$C(13,27))
  1. I %INT!$D(%MSM) B 1 K %INT Q ; return to %TRANS
  1. I %IO?.N&(%IO'="") C %IO U 0 K %IO,%INT
  1. W:'$F($ZE,"<DSCON>") !,"Transmission Complete",!!
  1. Q
  1. RECORD ;
  1. S:'$D(^XMIT) ^XMIT(0)=1
  1. S %XN=^XMIT(0),^XMIT(0)=%XN+1,%RS=1,%XS="",%XE=1,%X=$E(%X,2,999),^XMIT(%XN)=$H
  1. U 0 W !!,"Recording Started in ^XMIT(",%XN,",1)",!
  1. Q
  1. HALT ;
  1. S:$L(%XS) ^XMIT(%XN,%XE)=%XS S %RS=0
  1. U 0 W !!,"Recording halted, last node is ^XMIT(",%XN,",",%XE,")",!!
  1. Q
  1. NOPEN S %IO="" ; avoid <NOPEN> on <INRPT>
  1. ERROR ;
  1. I $F($ZE,"<MXSTR>") F %XE=%XE:1 G:%XS="" ERROR1 S ^XMIT(%XN,%XE)=$E(%XS,1,255),%XS=$E(%XS,256,9999)
  1. I $F($ZE,"<INRPT>") U 0 W !!,"...Aborted." D EXIT V 0:$J:$ZB($V(0,$J,2),#0400,7):2
  1. I $F($ZE,"<DSCON>") DO:$I'=$P D EXIT V 0:$J:$ZB($V(0,$J,2),#0400,7):2
  1. .U 0 W !!,"...Disconnected."
  1. ZQ
  1. ERROR1 S $ZT="ERROR^%XMIT" G PORT1 ; resume after <MXSTR>
  1. INT ;FROM TRANSFER UTILS
  1. S %INT=1 B 0 G GO
  1. ;
  1. QUE W !! F %IO=1:1 S %X=$T(TEXT+%IO) Q:%X="" W $P(%X,";",2),!
  1. Q
  1. TEXT ;
  1. ;Enter the port number to be used for the transmission.
  1. ;While the transmission is in progress, all characters except CTRL/A
  1. ;and CTRL/B will be passed through to the port.
  1. ;Use CTRL/B to start or stop recording of the information in the XMIT
  1. ;global, and CTRL/A to exit the program.