INHUT2 ; cmi/flag/maw - 16 Oct 98 15:11 GIS utilities ; [ 05/09/2002 11:06 AM ]
;;3.01;BHL IHS Interfaces with GIS;**1**;JUN 01, 2002
;COPYRIGHT 1991-2000 SAIC
;
Q
;
ISNAMSPC(X) ;is the value properly name spaces according to current
;GIS specifications
N NAMSPC,PATMAT,RON,ROF
I " HL HL7 DGM TEST "[(" "_$P(X," ")_" ") Q 1
S RON=$P(DIJC("RON")," ",2),ROF=$P(DIJC("ROF")," ",2)
S @("RON="_RON),@("ROF="_ROF)
;Modified for IHS
W RON_"Invalid Name-space!"_ROF S Y=.01 Q 0
;D MESS^UTWRD(RON_"Invalid Name-space!"_ROF) S Y=.01 Q 0
;
ISNS(X) ;is the input value properly name spaced
;input:
; X --> input value of the .01 field
; "Grandfather" existing Transactions and Destinations
;cmi/flag/maw modified for namespace type
N INAME,INDAD S INDAD=0
F I=1:1 S INAME=$T(EXCLUDE+I) Q:INAME'[";;" D Q:INDAD
.I $P(INAME,";;",2)=X S INDAD=1
Q:INDAD 1
Q:$P(X," ")="" 0
;Q $O(^INRHNS("B",$P(X," "),""))
I $O(^INRHNS("B",$P(X," "),""))="" Q 0
I $O(^INRHNS("B",$P(X," ",3),""))="" Q 0
I $O(^INRHNS("ADS",$P(X," ",2),""))="" Q 0
Q 1
;
EXCLUDE ;List of existing entries to exclude from namespace requirement
;;ANATOMIC PATHOLOGY
;;MASTER FILE NOTIFICATION
;;IV ORDER
;;LAB ORDER
;;PATIENT APPOINTMENT
;;PRESCRIPTION
;;RAD ORDER
;;RADIOLOGY PROCEDURE
;;INCOMING ACK
;
MHC(X) ;Return number embedded in string value of MHCMIS .01 field
;1-Called from ISNS to validate entry to Int. Destination File.
;2-Called from MHCMIS transmitter (INHVMTR) to identify correct dest.
;3-Called from Input Transform of MHCMIS SITE PARAMTER FILE
; INPUT: X=String value of .01 field
; RETURN: Number embedded in the string
;Allow the basic MHCMIS entry for Int. Dest. File.
;Basic MHCMIS entry corrosponds to IEN 1 of MHCMIS SITE PARM FILE
I X="MHCMIS" Q 1
;Force other MHCMIS entries to include a number
S OK=$TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ()/ ","")
Q OK
;
MSG ;message display for Interface Name Space control
N HON,HOF,INI,DWLRF,DWLB,DY
S HON=$P(DIJC("H")," ",2),HOF=$P(DIJC("L")," ",2)
S @("HON="_HON),@("HOF="_HOF)
S INI="",DY=$Y-1,DWLRF="INS",DWLB="2^"_DY_"^10^78",DWL="SWZF"
S @DWLRF@(1)=" Valid Name-spaces:"
F I=2:1 S INI=$O(^INRHNS("B",INI)) Q:INI="" D
.S @DWLRF@(I)=" "_HOF_INI_HON,@DWLRF@(I,0)=""
D ^DWL W HOF
Q
;
UNIQUE(X) ;See if ID is being used already
; Input:
; X --> input value of Unique ID
; Returns 0-ID does not exist
; 1-ID exists
Q '$D(^INRHT("ID",X,DA))
UNQ(DA) ;Set unique ID Called from DD 4000,.01
; DA - IEN
N INCNT,INID,%VOL,X,DR,DIE,INLAST
N DG,DB,DIL,DLB,DIE17,DGO,DOW,DNM,DQ,DIEZ,D0,D1,D2,D3,D4,D5,D6,D7,X
I $P(^INRHT(DA,0),U,4)="" D
.S %VOL=$G(^%ZOSF("VOL")),%VOL=$E(%VOL,$L(%VOL))
.S:%VOL="" %VOL="?"
.S INLAST=%VOL_999
.S INID=$O(^INRHT("ID",INLAST),-1),INCNT=+$E(INID,2,4)+1
.S INCNT=%VOL_$$PAD(INCNT,3,0)
.S DR=".04///^S X=INCNT",DIE="^INRHT("
.D ^DIE
Q
CONV ;Conversion routine to add unique id's
N DA
S DA=0 F S DA=$O(^INRHT(DA)) Q:'DA S $P(^INRHT(DA,0),U,4)=""
S DA=0 F S DA=$O(^INRHT(DA)) Q:'DA D UNQ(DA)
Q
PAD(X,Y,Z) ;Pad front with whatever you want to pad with
; input: X - String you are padding
; Y - Pad to this size
; Z - What to PAD it with
N INHPAD
S INHPAD="",$P(INHPAD,Z,Y+1)="",X=$E(X,1,Y)
Q $E(INHPAD,1,Y-$L(X))_X
FMHELP(DP,D) ;Fileman help utility
; DP - File/Sub file Number
; D - Field Number
N DZ,DQ,DV,DG,%,%X,Z,X,DIE2,DL,Y,DIC,DIE,DU
S (DIC,DIE)=$G(^DIC(DP,0,"GL")),DIC(0)="E"
S (X,DZ)="?",DQ=1,DQ(1)=$G(^DD(DP,D,0))
; If not a multiple
I '$P(DQ(1),U,2) S DV=$P(DQ(1),U,2)
S DU=$P(DQ(1),U,3)
D Q^DIE2
Q
PARSEG(INSRCTL,INSEGNM) ; Parse a segment
; INPUT:
; INSRCTL (required):
; Array containing the raw segment data to be parsed
; located under the HL7 namespaced node represented by
; the second parameter.
; ex. INSRCTL("MSH")=...
; INSEGNM HL7 segment name (required):
; Valid HL7 segment name to be used to identifiy which
; node of the input array will be parsed.
; ex. PARSEG^INHUT2(.INSRCTL,"MSH")
; where INSRCTL("MSH")="MSH^\|~&^^^^..."
;
; OUTPUTS:
; INSRCTL("Segment Name"_"Field number"): Field value found in segment
; NOTE: This output is raw HL7 format, not FileMan/CHCS format.
;
Q:'$L($G(INSEGNM))
Q:'$D(INSRCTL(INSEGNM))
N INDELIM,INCOMP,INSUBCOM,INREP,INOFFSET,INSEG
S INDELIM=$G(INSCTRL("INDELIM")),INCOMP=$G(INSRCTL("INCOMP"))
S INSUBCOM=$G(INSRCTL("INSUBCOM")),INREP=$G(INSRCTL("INREP"))
;If delimiters are not defined get them
I INDELIM=""!(INCOMP="")!(INSUBCOM="")!(INREP="") D ;
. I $D(INSRCTL("MSH")) S INDELIM=$E(INSRCTL("MSH"),4),INCOMP=$E(INSRCTL("MSH"),5),INSUBCOM=$E(INSRCTL("MSH"),6),INREP=$E(INSRCTL("MSH"),7)
. E S INDELIM=$$FIELD^INHUT,INCOMP=$$COMP^INHUT,INSUBCOM=$$SUBCOMP^INHUT,INREP=$$REP^INHUT
. S INSRCTL("INDELIM")=INDELIM,INSRCTL("INCOMP")=INCOMP,INSRCTL("INSUBCOM")=INSUBCOM,INSRCTL("INREP")=INREP
Q:INDELIM=""!(INCOMP="")
;If MSH, field numbering is a tiny bit different.
S INOFFSET=$S(INSEGNM="MSH":2,1:1),INFIELDS=$L(INSRCTL(INSEGNM),INDELIM)
M INSEG=INSRCTL(INSEGNM)
F INFLD=INOFFSET:1:INFIELDS S INSRCTL(INSEGNM_INFLD)=$$PIECE^INHU(.INSEG,INDELIM,.INFLD)
D:$D(INSRCTL(INSEGNM))>9 ;
. F I=1:1 Q:'$D(INSRCTL(INSEGNM,I)) D
. . S INFIELDS=$L(INSRCTL(INSEGNM,I),INDELIM)+INFLD
. . F INFLD=INFLD:1:INFIELDS S INSRCTL(INSEGNM_INFLD)=$$PIECE^INHU(.INSEG,INDELIM,.INFLD)
M INSRCTL(INSEGNM)=INSEG
Q
GETSEG(UIF,INSEGNM,INSTANCE) ; Get segment from UIF
; Called by S INSRCTL("MSH")=$$GETSEG^INHUT(12345,"MSH")
;
; INPUTS:
; UIF (required): The IEN of the UIF from which to extract the segment.
; INSEGNM (required):
; The valid HL7 segment name to be used to identify
; which node of the UIF is requested.
; INSTANCE (optional, default=1)
; The instance of the segment desired.
;
; OUTPUT:
; 0 If segment not found,
; 1 if segment found in message,
;
; INSRECTL(INSEGNM)
; Returns the Segment requested. (With overflow) in the INSRCTL array.
;
Q:$G(UIF)="" 0 Q:$G(INSEGNM)="" 0
N INLINE,INDATA,INCR,INCNT
K INSRCTL(INSEGNM)
S INLINE=0,INCNT=0 S:'$G(INSTANCE) INSTANCE=1
F D GETLINE^INHOU(UIF,.INLINE,.INDATA,0,.INCR) Q:'$D(INDATA) D
. I $E(INDATA,1,3)=INSEGNM S INCNT=INCNT+1 M:INCNT=INSTANCE INSRCTL(INSEGNM)=INDATA Q
Q (0<$D(INSRCTL(INSEGNM)))
BPSTAT(INBKGNM,INSRVR) ;-determine status of GIS background process, given name
;Input: INBKGNM - name of background process to determine status
; INSRVR - server number (not currently supported)
;Output: Status message string of given background process name
; piece 1 => status (1 - running ; 0 - not running)
; piece 2 => status message
; piece 3 => last run update ($H format)
; piece 4 => last time a message was processed ($H format)
; piece 5 => ien of background process
;
N INBKGIEN,INBKGST,INBGKSTR
I $G(INBKGNM)="" Q "0^Process name not specified"
S INBKGIEN=$O(^INTHPC("B",INBKGNM,0))
I 'INBKGIEN Q "0^Unknown Process"
I '$P($G(^INTHPC(INBKGIEN,0)),U,2) Q "0^Process inactive^^^"_INBKGIEN
S INBKGST=$$VER^INHB(INBKGIEN)
S INBKGSTR=$S(INBKGST=1:"1^Running",INBKGST=-1:"0^Signaled to Terminate",1:"0^Not Running")
S INBKGSTR=INBKGSTR_U_$P($G(^INRHB("RUN",INBKGIEN)),U,1)_U_$P($G(^INRHB("RUN",INBKGIEN)),U,3)_U_INBKGIEN
Q INBKGSTR
;
INHUT2 ; cmi/flag/maw - 16 Oct 98 15:11 GIS utilities ; [ 05/09/2002 11:06 AM ]
+1 ;;3.01;BHL IHS Interfaces with GIS;**1**;JUN 01, 2002
+2 ;COPYRIGHT 1991-2000 SAIC
+3 ;
+4 QUIT
+5 ;
ISNAMSPC(X) ;is the value properly name spaces according to current
+1 ;GIS specifications
+2 NEW NAMSPC,PATMAT,RON,ROF
+3 IF " HL HL7 DGM TEST "[(" "_$PIECE(X," ")_" ")
QUIT 1
+4 SET RON=$PIECE(DIJC("RON")," ",2)
SET ROF=$PIECE(DIJC("ROF")," ",2)
+5 SET @("RON="_RON)
SET @("ROF="_ROF)
+6 ;Modified for IHS
+7 WRITE RON_"Invalid Name-space!"_ROF
SET Y=.01
QUIT 0
+8 ;D MESS^UTWRD(RON_"Invalid Name-space!"_ROF) S Y=.01 Q 0
+9 ;
ISNS(X) ;is the input value properly name spaced
+1 ;input:
+2 ; X --> input value of the .01 field
+3 ; "Grandfather" existing Transactions and Destinations
+4 ;cmi/flag/maw modified for namespace type
+5 NEW INAME,INDAD
SET INDAD=0
+6 FOR I=1:1
SET INAME=$TEXT(EXCLUDE+I)
IF INAME'[";;"
QUIT
Begin DoDot:1
+7 IF $PIECE(INAME,";;",2)=X
SET INDAD=1
End DoDot:1
IF INDAD
QUIT
+8 IF INDAD
QUIT 1
+9 IF $PIECE(X," ")=""
QUIT 0
+10 ;Q $O(^INRHNS("B",$P(X," "),""))
+11 IF $ORDER(^INRHNS("B",$PIECE(X," "),""))=""
QUIT 0
+12 IF $ORDER(^INRHNS("B",$PIECE(X," ",3),""))=""
QUIT 0
+13 IF $ORDER(^INRHNS("ADS",$PIECE(X," ",2),""))=""
QUIT 0
+14 QUIT 1
+15 ;
EXCLUDE ;List of existing entries to exclude from namespace requirement
+1 ;;ANATOMIC PATHOLOGY
+2 ;;MASTER FILE NOTIFICATION
+3 ;;IV ORDER
+4 ;;LAB ORDER
+5 ;;PATIENT APPOINTMENT
+6 ;;PRESCRIPTION
+7 ;;RAD ORDER
+8 ;;RADIOLOGY PROCEDURE
+9 ;;INCOMING ACK
+10 ;
MHC(X) ;Return number embedded in string value of MHCMIS .01 field
+1 ;1-Called from ISNS to validate entry to Int. Destination File.
+2 ;2-Called from MHCMIS transmitter (INHVMTR) to identify correct dest.
+3 ;3-Called from Input Transform of MHCMIS SITE PARAMTER FILE
+4 ; INPUT: X=String value of .01 field
+5 ; RETURN: Number embedded in the string
+6 ;Allow the basic MHCMIS entry for Int. Dest. File.
+7 ;Basic MHCMIS entry corrosponds to IEN 1 of MHCMIS SITE PARM FILE
+8 IF X="MHCMIS"
QUIT 1
+9 ;Force other MHCMIS entries to include a number
+10 SET OK=$TRANSLATE(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ()/ ","")
+11 QUIT OK
+12 ;
MSG ;message display for Interface Name Space control
+1 NEW HON,HOF,INI,DWLRF,DWLB,DY
+2 SET HON=$PIECE(DIJC("H")," ",2)
SET HOF=$PIECE(DIJC("L")," ",2)
+3 SET @("HON="_HON)
SET @("HOF="_HOF)
+4 SET INI=""
SET DY=$Y-1
SET DWLRF="INS"
SET DWLB="2^"_DY_"^10^78"
SET DWL="SWZF"
+5 SET @DWLRF@(1)=" Valid Name-spaces:"
+6 FOR I=2:1
SET INI=$ORDER(^INRHNS("B",INI))
IF INI=""
QUIT
Begin DoDot:1
+7 SET @DWLRF@(I)=" "_HOF_INI_HON
SET @DWLRF@(I,0)=""
End DoDot:1
+8 DO ^DWL
WRITE HOF
+9 QUIT
+10 ;
UNIQUE(X) ;See if ID is being used already
+1 ; Input:
+2 ; X --> input value of Unique ID
+3 ; Returns 0-ID does not exist
+4 ; 1-ID exists
+5 QUIT '$DATA(^INRHT("ID",X,DA))
UNQ(DA) ;Set unique ID Called from DD 4000,.01
+1 ; DA - IEN
+2 NEW INCNT,INID,%VOL,X,DR,DIE,INLAST
+3 NEW DG,DB,DIL,DLB,DIE17,DGO,DOW,DNM,DQ,DIEZ,D0,D1,D2,D3,D4,D5,D6,D7,X
+4 IF $PIECE(^INRHT(DA,0),U,4)=""
Begin DoDot:1
+5 SET %VOL=$GET(^%ZOSF("VOL"))
SET %VOL=$EXTRACT(%VOL,$LENGTH(%VOL))
+6 IF %VOL=""
SET %VOL="?"
+7 SET INLAST=%VOL_999
+8 SET INID=$ORDER(^INRHT("ID",INLAST),-1)
SET INCNT=+$EXTRACT(INID,2,4)+1
+9 SET INCNT=%VOL_$$PAD(INCNT,3,0)
+10 SET DR=".04///^S X=INCNT"
SET DIE="^INRHT("
+11 DO ^DIE
End DoDot:1
+12 QUIT
CONV ;Conversion routine to add unique id's
+1 NEW DA
+2 SET DA=0
FOR
SET DA=$ORDER(^INRHT(DA))
IF 'DA
QUIT
SET $PIECE(^INRHT(DA,0),U,4)=""
+3 SET DA=0
FOR
SET DA=$ORDER(^INRHT(DA))
IF 'DA
QUIT
DO UNQ(DA)
+4 QUIT
PAD(X,Y,Z) ;Pad front with whatever you want to pad with
+1 ; input: X - String you are padding
+2 ; Y - Pad to this size
+3 ; Z - What to PAD it with
+4 NEW INHPAD
+5 SET INHPAD=""
SET $PIECE(INHPAD,Z,Y+1)=""
SET X=$EXTRACT(X,1,Y)
+6 QUIT $EXTRACT(INHPAD,1,Y-$LENGTH(X))_X
FMHELP(DP,D) ;Fileman help utility
+1 ; DP - File/Sub file Number
+2 ; D - Field Number
+3 NEW DZ,DQ,DV,DG,%,%X,Z,X,DIE2,DL,Y,DIC,DIE,DU
+4 SET (DIC,DIE)=$GET(^DIC(DP,0,"GL"))
SET DIC(0)="E"
+5 SET (X,DZ)="?"
SET DQ=1
SET DQ(1)=$GET(^DD(DP,D,0))
+6 ; If not a multiple
+7 IF '$PIECE(DQ(1),U,2)
SET DV=$PIECE(DQ(1),U,2)
+8 SET DU=$PIECE(DQ(1),U,3)
+9 DO Q^DIE2
+10 QUIT
PARSEG(INSRCTL,INSEGNM) ; Parse a segment
+1 ; INPUT:
+2 ; INSRCTL (required):
+3 ; Array containing the raw segment data to be parsed
+4 ; located under the HL7 namespaced node represented by
+5 ; the second parameter.
+6 ; ex. INSRCTL("MSH")=...
+7 ; INSEGNM HL7 segment name (required):
+8 ; Valid HL7 segment name to be used to identifiy which
+9 ; node of the input array will be parsed.
+10 ; ex. PARSEG^INHUT2(.INSRCTL,"MSH")
+11 ; where INSRCTL("MSH")="MSH^\|~&^^^^..."
+12 ;
+13 ; OUTPUTS:
+14 ; INSRCTL("Segment Name"_"Field number"): Field value found in segment
+15 ; NOTE: This output is raw HL7 format, not FileMan/CHCS format.
+16 ;
+17 IF '$LENGTH($GET(INSEGNM))
QUIT
+18 IF '$DATA(INSRCTL(INSEGNM))
QUIT
+19 NEW INDELIM,INCOMP,INSUBCOM,INREP,INOFFSET,INSEG
+20 SET INDELIM=$GET(INSCTRL("INDELIM"))
SET INCOMP=$GET(INSRCTL("INCOMP"))
+21 SET INSUBCOM=$GET(INSRCTL("INSUBCOM"))
SET INREP=$GET(INSRCTL("INREP"))
+22 ;If delimiters are not defined get them
+23 ;
IF INDELIM=""!(INCOMP="")!(INSUBCOM="")!(INREP="")
Begin DoDot:1
+24 IF $DATA(INSRCTL("MSH"))
SET INDELIM=$EXTRACT(INSRCTL("MSH"),4)
SET INCOMP=$EXTRACT(INSRCTL("MSH"),5)
SET INSUBCOM=$EXTRACT(INSRCTL("MSH"),6)
SET INREP=$EXTRACT(INSRCTL("MSH"),7)
+25 IF '$TEST
SET INDELIM=$$FIELD^INHUT
SET INCOMP=$$COMP^INHUT
SET INSUBCOM=$$SUBCOMP^INHUT
SET INREP=$$REP^INHUT
+26 SET INSRCTL("INDELIM")=INDELIM
SET INSRCTL("INCOMP")=INCOMP
SET INSRCTL("INSUBCOM")=INSUBCOM
SET INSRCTL("INREP")=INREP
End DoDot:1
+27 IF INDELIM=""!(INCOMP="")
QUIT
+28 ;If MSH, field numbering is a tiny bit different.
+29 SET INOFFSET=$SELECT(INSEGNM="MSH":2,1:1)
SET INFIELDS=$LENGTH(INSRCTL(INSEGNM),INDELIM)
+30 MERGE INSEG=INSRCTL(INSEGNM)
+31 FOR INFLD=INOFFSET:1:INFIELDS
SET INSRCTL(INSEGNM_INFLD)=$$PIECE^INHU(.INSEG,INDELIM,.INFLD)
+32 ;
IF $DATA(INSRCTL(INSEGNM))>9
Begin DoDot:1
+33 FOR I=1:1
IF '$DATA(INSRCTL(INSEGNM,I))
QUIT
Begin DoDot:2
+34 SET INFIELDS=$LENGTH(INSRCTL(INSEGNM,I),INDELIM)+INFLD
+35 FOR INFLD=INFLD:1:INFIELDS
SET INSRCTL(INSEGNM_INFLD)=$$PIECE^INHU(.INSEG,INDELIM,.INFLD)
End DoDot:2
End DoDot:1
+36 MERGE INSRCTL(INSEGNM)=INSEG
+37 QUIT
GETSEG(UIF,INSEGNM,INSTANCE) ; Get segment from UIF
+1 ; Called by S INSRCTL("MSH")=$$GETSEG^INHUT(12345,"MSH")
+2 ;
+3 ; INPUTS:
+4 ; UIF (required): The IEN of the UIF from which to extract the segment.
+5 ; INSEGNM (required):
+6 ; The valid HL7 segment name to be used to identify
+7 ; which node of the UIF is requested.
+8 ; INSTANCE (optional, default=1)
+9 ; The instance of the segment desired.
+10 ;
+11 ; OUTPUT:
+12 ; 0 If segment not found,
+13 ; 1 if segment found in message,
+14 ;
+15 ; INSRECTL(INSEGNM)
+16 ; Returns the Segment requested. (With overflow) in the INSRCTL array.
+17 ;
+18 IF $GET(UIF)=""
QUIT 0
IF $GET(INSEGNM)=""
QUIT 0
+19 NEW INLINE,INDATA,INCR,INCNT
+20 KILL INSRCTL(INSEGNM)
+21 SET INLINE=0
SET INCNT=0
IF '$GET(INSTANCE)
SET INSTANCE=1
+22 FOR
DO GETLINE^INHOU(UIF,.INLINE,.INDATA,0,.INCR)
IF '$DATA(INDATA)
QUIT
Begin DoDot:1
+23 IF $EXTRACT(INDATA,1,3)=INSEGNM
SET INCNT=INCNT+1
IF INCNT=INSTANCE
MERGE INSRCTL(INSEGNM)=INDATA
QUIT
End DoDot:1
+24 QUIT (0<$DATA(INSRCTL(INSEGNM)))
BPSTAT(INBKGNM,INSRVR) ;-determine status of GIS background process, given name
+1 ;Input: INBKGNM - name of background process to determine status
+2 ; INSRVR - server number (not currently supported)
+3 ;Output: Status message string of given background process name
+4 ; piece 1 => status (1 - running ; 0 - not running)
+5 ; piece 2 => status message
+6 ; piece 3 => last run update ($H format)
+7 ; piece 4 => last time a message was processed ($H format)
+8 ; piece 5 => ien of background process
+9 ;
+10 NEW INBKGIEN,INBKGST,INBGKSTR
+11 IF $GET(INBKGNM)=""
QUIT "0^Process name not specified"
+12 SET INBKGIEN=$ORDER(^INTHPC("B",INBKGNM,0))
+13 IF 'INBKGIEN
QUIT "0^Unknown Process"
+14 IF '$PIECE($GET(^INTHPC(INBKGIEN,0)),U,2)
QUIT "0^Process inactive^^^"_INBKGIEN
+15 SET INBKGST=$$VER^INHB(INBKGIEN)
+16 SET INBKGSTR=$SELECT(INBKGST=1:"1^Running",INBKGST=-1:"0^Signaled to Terminate",1:"0^Not Running")
+17 SET INBKGSTR=INBKGSTR_U_$PIECE($GET(^INRHB("RUN",INBKGIEN)),U,1)_U_$PIECE($GET(^INRHB("RUN",INBKGIEN)),U,3)_U_INBKGIEN
+18 QUIT INBKGSTR
+19 ;