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

ABSPOSUT.m

Go to the documentation of this file.
  1. ABSPOSUT ; IHS/FCS/DRS - POS utilities - testing modem ;
  1. ;;1.0;PHARMACY POINT OF SALE;;JUN 21, 2001
  1. Q
  1. ; D DIR to get a directory of available tests
  1. DIR ;
  1. N I,X F I=1:1 S X=$T(+I) Q:X="" D
  1. . I X'?1"TEST".E Q
  1. . I $P(X," ")="TESTINIT" Q
  1. . I $P(X," ")="TESTDONE" Q
  1. . I $P(X,"(")="TESTID" Q
  1. . W X,!
  1. Q
  1. ; DEST = pointer to dial out, 9002313.55
  1. ; IO = the IO device associated with DEST
  1. ; SLOT = pointer to logging in ^ABSPECP("LOG",...)
  1. ; ISOPEN is true if device is open (and close needed on exit)
  1. ; ECHO is true so LOG^ABSPOSL(SLOT) echoes to your screen as well
  1. ; D PRINT in this routine prints what's in SLOT
  1. ; or later you can DO PRINTLOG^ABSPOSL(SLOT)
  1. ; All tests finish via TESTDONE label.
  1. GETDEST ;
  1. N DIC,X,Y,DTIME,DLAYGO,DINUM
  1. S DIC=9002313.55,DIC(0)="AENZ"
  1. D ^DIC W !
  1. I Y<0 S DEST="" Q
  1. S DEST=+Y
  1. S IO=$$IO^ABSPOSA(DEST)
  1. Q
  1. TESTINIT I '$D(DEST) D GETDEST Q:'DEST
  1. S ECHO=1,ISOPEN=0
  1. D INIT^ABSPOSL()
  1. S SLOT=$$GETSLOT^ABSPOSL
  1. W "Logging is to slot ",SLOT,"; D PRINT to display it again",!
  1. D LOG("Testing dial out #"_DEST_" "_$P(^ABSP(9002313.55,DEST,0),U)_" on device "_IO)
  1. S SLOT=$$GETSLOT^ABSPOSL
  1. Q
  1. TESTID(X) D LOG("This is "_X_U_$T(+0)_": "_$P($T(@X)," ",2,255)) Q
  1. OPEN ; do all the OPENing here so it sets ISOPEN
  1. ; sets X = zero if success, nonzero if failure
  1. I ISOPEN D
  1. . D LOG("apparently the device we're opening is already open")
  1. . D LOG("So close it first...")
  1. . D CLOSE
  1. S X=$$OPEN^ABSPOSAB(DEST)
  1. I 'X S ISOPEN=1
  1. E D LOG("OPEN failed, error code ="_X)
  1. Q
  1. CLOSE S X=$$CLOSE^ABSPOSAB(DEST)
  1. I 'X S ISOPEN=0
  1. E D LOG("CLOSE failed, error code ="_X)
  1. Q
  1. PRINT D PRINTLOG^ABSPOSL(SLOT)
  1. W "(This came from the log file in ^ABSPECP(""LOG"",",SLOT,")",!
  1. Q
  1. LOG(X) D LOG^ABSPOSL(X,ECHO) Q
  1. GETCMD(X) ;
  1. I X="ECHO OFF" Q "E0"
  1. I X="RESET"!(X="ATZ") Q "Z"
  1. I X="GET STATUS" Q "I0"
  1. D IMPOSS^ABSPOSUE("P","TI","Bad command "_X,,"GETCMD",$T(+0))
  1. Q
  1. COMMAND(X) ;issue a command directly to the modem
  1. I X'?1"AT".E S X="AT"_X
  1. D LOG("Issue modem command "_X)
  1. U IO W X,$C(13)
  1. Q
  1. READ(TIMEOUT,EXPECT) ; read result of a modem command
  1. ; returns true if expected string found, false if not
  1. ; and sets X=0 if expected string found, nonzero if not found
  1. ; (beware - opposite meanings!)
  1. I '$D(EXPECT) S EXPECT=""
  1. S X='$$READ1(EXPECT)
  1. I EXPECT]"",X D LOG("Did not receive expected string "_EXPECT_" in timeout "_TIMEOUT)
  1. Q:$Q 'X Q
  1. READ1(EXPECT) ; expecting EXPECT string (null if nothing particular)
  1. N RESULT ; TRUE if expected string seen, FALSE if not
  1. N X,I,J,T,FIRST S FIRST=1
  1. S X(0)="start at ",T(0)=$H
  1. F I=1:1:100 R X(I):TIMEOUT Q:'$T S T(I)=$H
  1. K X(I) S I=I-1 ; the one it timed out on
  1. F J=1:1:I D
  1. . I X(J)="" S X(J)="null"
  1. . S X="at "_T(J)_": "_X(J)
  1. . N I F I=$L(X):-1:1 I $E(X,I)?1C D
  1. . . S X=$E(X,1,I-1)_"\"_$A(X,I)_$E(X,I+1,$L(X))
  1. . D LOG("X("_J_")="_X)
  1. I I=100 D LOG("OVERFLOW reading modem's response to command!")
  1. N % S %="" F J=1:1:I S %=%_X(J)
  1. Q %[EXPECT
  1. TESTDONE I ISOPEN D CLOSE^ABSPOSAB(DEST)
  1. N MSG I X D
  1. . S MSG="Test FAILED, X="_X
  1. E S MSG="Test SUCCEEDED"
  1. D LOG(MSG)
  1. D RELSLOT^ABSPOSL
  1. U $P W "D PRINT",U,$T(+0)," or D PRINTLOG^ABSPOSL(",SLOT,") to see log file again.",!
  1. Q
  1. TEST1 ; open / use / close
  1. D TESTINIT Q:'DEST
  1. D TESTID("TEST1")
  1. D OPEN I X G TESTDONE
  1. D LOG("Testing the USE command")
  1. U IO
  1. D LOG^ABSPOSL("The USE command works okay")
  1. D CLOSE
  1. G TESTDONE
  1. Q
  1. TEST2 ; test a simple command - ATE0, echo off
  1. D TESTINIT Q:'DEST D TESTID("TEST2")
  1. D OPEN I X G TESTDONE
  1. D COMMAND("E0"),READ(10,"OK")
  1. G TESTDONE
  1. TEST3 ; test the software reset using the ATZ
  1. D TESTINIT Q:'DEST D TESTID("TEST3")
  1. D OPEN I X G TESTDONE
  1. S X=$$ATZ^ABSPOSAB(DEST)
  1. G TESTDONE
  1. TEST4 ; test the modem status command
  1. D TESTINIT Q:'DEST D TESTID("TEST4")
  1. D OPEN I X G TESTDONE
  1. S X=$$MODEMSTS^ABSPOSAB(DEST)
  1. G TESTDONE
  1. TEST5 ; test dialing and connecting
  1. D TESTINIT Q:'DEST D TESTID("TEST5")
  1. S X=$$CONNECT^ABSPOSAA(DEST) I X G TESTDONE
  1. S ISOPEN=1
  1. S X=$$WAITCHAR^ABSPOSAW(DEST,$C(5),30) ; ENQ expected
  1. G TESTDONE