PXRMTEXT ; SLC/PKR - Text formatting utility routines. ;07/25/2014
;;2.0;CLINICAL REMINDERS;**6,12,47**;Feb 04, 2005;Build 291
;
;============================================
NEWLINE ;Put TEXT on a new line to the output, make sure it does not end
;with a " ".
N TLEN
;If there is no text in TEXT don't do anything.
I TEXT=INDSTR Q
S TLEN=$L(TEXT)
I $E(TEXT,TLEN)=" " S TEXT=$E(TEXT,1,TLEN-1)
S NOUT=NOUT+1,TEXTOUT(NOUT)=TEXT
S TEXT=INDSTR,CLEN=0
Q
;
;============================================
BLANK ;Add a blank line (line containing just " ") to the output.
S NOUT=NOUT+1,TEXTOUT(NOUT)=" "
S TEXT=INDSTR,CLEN=0
Q
;
;============================================
CHECKLEN(WORD) ;Check to see if adding the next word makes the line too long.
;If it does add it to the output and start a new line.
N LENWORD,SPLEFT,TLEN
S LENWORD=$L(WORD)
S TLEN=CLEN+LENWORD
I TLEN'>WIDTH D Q
. I WORD'[" " S WORD=WORD_" ",LENWORD=LENWORD+1
. S TEXT=TEXT_WORD,CLEN=CLEN+LENWORD
;Width exceeded.
;If at least 70% of the width is filled go ahead and break.
I CLEN>(0.7*WIDTH) D Q
. D NEWLINE
. I WORD'[" " S WORD=WORD_" ",LENWORD=LENWORD+1
. S TEXT=INDSTR_WORD,CLEN=LENWORD
S SPLEFT=WIDTH-CLEN+1
I (LENWORD-SPLEFT)<2 D Q
. D NEWLINE
. I WORD'[" " S WORD=WORD_" ",LENWORD=LENWORD+1
. S TEXT=INDSTR_WORD,CLEN=LENWORD
S TEXT=TEXT_$E(WORD,1,SPLEFT-1)
D NEWLINE
S WORD=$E(WORD,SPLEFT,LENWORD)
D CHECKLEN(WORD)
Q
;
;============================================
COLFMT(FMTSTR,TEXTSTR,PC,NL,OUTPUT) ;Columnar text formatter.
;FMTSTR - format string; ^ separated string for each column in the
;output. 35R2 defines a right justified column 35 characters wide
;with 2 blank spaces following. Columns can be centered (C) left
;justified (L) or right justified (R).
;TEXTSTR - string to be formated, text for each column separated by "^"
;PC - the pad character
;NL - number of lines of output
;OUTPUT - array containing output lines.
N COLOUT,ENTRY,FMT,JND,JUS,IND,LEN,NCOL,NLO,NROW
N SP,TEMP,TEXT,TEXTOUT,WIDTH,WPSP
S NCOL=$L(FMTSTR,U),NROW=1
F IND=1:1:NCOL D
. S FMT=$P(FMTSTR,U,IND)
. S JUS(IND)=$S(FMT["C":"C",FMT["L":"L",FMT["R":"R",1:"C")
. S WIDTH(IND)=$P(FMT,JUS(IND),1)
. S SP(IND)=$P(FMT,JUS(IND),2)
. S WPSP(IND)=WIDTH(IND)+SP(IND)
. S ENTRY(IND)=$S(JUS(IND)="C":"CJ",JUS(IND)="L":"LJ",JUS(IND)="R":"RJ")
F IND=1:1:NCOL D
. S TEMP=$P(TEXTSTR,U,IND)
. S LEN=$L(TEMP)
. I (LEN>WIDTH(IND))!(TEMP["\\") D Q
.. D FORMATS(1,WIDTH(IND),TEMP,.NLO,.TEXTOUT)
.. F JND=1:1:NLO D
... S TEMP=$$@ENTRY(IND)^XLFSTR(TEXTOUT(JND),WIDTH(IND),PC)
... S COLOUT(JND,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
.. I NLO>NROW S NROW=NLO
. I LEN'>WIDTH(IND) D
.. S TEMP=$$@ENTRY(IND)^XLFSTR(TEMP,WIDTH(IND),PC)
.. S COLOUT(1,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
F IND=1:1:NROW D
. S TEXT=""
. F JND=1:1:NCOL D
.. I $D(COLOUT(IND,JND)) S TEXT=TEXT_COLOUT(IND,JND)
.. E S TEXT=TEXT_$$LJ^XLFSTR("",(WPSP(JND))," ")
. S OUTPUT(IND)=TEXT
S NL=NROW
Q
;
;============================================
COLFMTA(FMTSTR,INPUT,PC,NROW,OUTPUT) ;Columnar text formatter.
;Array version of COLFMT. Input array is ^TMP($J,INPUT,M) and
;output is ^TMP($J,OUTPUT,N).
N COLOUT,CURR,ENTRY,FMT,JND,JUS,IND,LEN,LINE,NCOL,NLO,NUM
N SP,T1,TEMP,TEXT,WIDTH,WPSP
S NCOL=$L(FMTSTR,U)
;Setup the formatting parameters.
F IND=1:1:NCOL D
. S FMT=$P(FMTSTR,U,IND)
. S JUS(IND)=$S(FMT["C":"C",FMT["L":"L",FMT["R":"R",1:"C")
. S WIDTH(IND)=$P(FMT,JUS(IND),1)
. S SP(IND)=$P(FMT,JUS(IND),2)
. S WPSP(IND)=WIDTH(IND)+SP(IND)
. S ENTRY(IND)=$S(JUS(IND)="C":"CJ",JUS(IND)="L":"LJ",JUS(IND)="R":"RJ")
. S CURR(IND)=1
;
S NUM=""
F S NUM=$O(^TMP($J,INPUT,NUM)) Q:NUM="" D
. S LINE=^TMP($J,INPUT,NUM)
. F IND=1:1:NCOL D
.. S T1=$P(LINE,U,IND)
.. I $L(T1)=0 Q
.. S TEMP=$G(COLOUT(CURR(IND),IND))_T1
.. S LEN=$L(TEMP)
.. I (LEN>WIDTH(IND))!(TEMP["\\") D Q
... D FORMATS(1,WIDTH(IND),TEMP,.NLO,.TEXTOUT)
... F JND=1:1:(NLO-1) D
.... S COLOUT(CURR(IND),IND)=TEXTOUT(JND)
.... S CURR(IND)=CURR(IND)+1
... S COLOUT(CURR(IND),IND)=TEXTOUT(NLO)_" "
.. I LEN'>WIDTH(IND) S COLOUT(CURR(IND),IND)=TEMP
;Format each row and column entry.
S (JND,NROW)=0
F S JND=$O(COLOUT(JND)) Q:JND="" D
. S NROW=NROW+1
. F IND=1:1:NCOL D
.. S TEMP=$G(COLOUT(JND,IND))
.. I TEMP="" Q
.. S COLOUT(JND,IND)=$$@ENTRY(IND)^XLFSTR(TEMP,WPSP(IND),PC)
F IND=1:1:NROW D
. S TEXT=""
. F JND=1:1:NCOL D
.. I $D(COLOUT(IND,JND)) S TEXT=TEXT_COLOUT(IND,JND)
.. E S TEXT=TEXT_$$LJ^XLFSTR("",(WPSP(JND))," ")
. S ^TMP($J,OUTPUT,IND)=TEXT
Q
;
;============================================
FORMAT(LM,RM,NIN,TEXTIN,NOUT,TEXTOUT) ;Format the text in TEXTIN so it has
;a left margin of LM and a right margin of RM. The formatted text
;is in TEXTOUT. "\\" is the end of line marker. Lines ending with
;"\\" will not have anything appended to them. A blank line can
;be created with a line containing just "\\". Lines containing
;nothing but whitespace will also act like a "\\".
I NIN=0 S NOUT=0 Q
N ACHAR,ALLWSP,CHAR,CLEN,END,IND,INDENT,INDSTR,JND
N LWSP,NWSP,START,TEMP,TEXT,TLEN,WIDTH,W1,W2,WORD
;Catalog the whitespace so we have places to break and look for
;end of line markers.
F IND=1:1:NIN D
. S TEMP=TEXTIN(IND)
. I TEMP="" S TEMP=" "
. S TLEN=$L(TEMP)
. S ALLWSP=1,NWSP=0
. F JND=1:1:TLEN D
.. S CHAR=$E(TEMP,JND)
.. S ACHAR=$A(CHAR)
.. I ACHAR>32 S ALLWSP=0
.. E S NWSP=NWSP+1,LWSP(IND,NWSP)=JND
.;Mark the end of the line unless it is already whitespace.
. I ACHAR>32 S NWSP=NWSP+1,LWSP(IND,NWSP)=TLEN
. S LWSP(IND)=NWSP
. I ALLWSP S LWSP(IND,"ALLWSP")=""
I LM<1 S LM=1
S WIDTH=RM-LM+1
S INDENT=LM-1
S INDSTR=""
F IND=1:1:INDENT S INDSTR=INDSTR_" "
S NOUT=0
S TEXT=INDSTR,CLEN=0
F IND=1:1:NIN D
.;If there is a blank line force whatever is in TEXT to be output by
.;calling NEWLINE and then add the blank.
. I $D(LWSP(IND,"ALLWSP")) D NEWLINE,BLANK Q
. S TEMP=TEXTIN(IND)
. S (END,NWSP)=0
. F NWSP=1:1:LWSP(IND) D
.. S START=END+1,END=LWSP(IND,NWSP)
.. S WORD=$E(TEMP,START,END)
..;PXRMINQ will be set if this is being called from an inquiry.
..;If that is the case just display "\\" do not add a new line.
.. I '$D(PXRMINQ),WORD["\\" D Q
... S W1=$P(WORD,"\\",1)
... D CHECKLEN(W1)
... D NEWLINE
... S W2=$P(WORD,"\\",2)
... I W2'="" D CHECKLEN(W2)
.. D CHECKLEN(WORD)
;Output the last line.
D NEWLINE
Q
;
;============================================
FORMATS(LM,RM,TEXTLINE,NOUT,TEXTOUT) ;Take a single line of input text
;and format it.
N TEXTIN
S TEXTIN(1)=TEXTLINE
D FORMAT(LM,RM,1,.TEXTIN,.NOUT,.TEXTOUT)
Q
;
;============================================
LMFMTSTR(VALMDDF,JSTR) ;The List Manager variable VALMDDF contains the
;list template caption column formatting information. It contains
;the starting column and the width in the form
;VALMDDF(COLUMN NAME)=COLUMN NAME^COLUMN^WIDTH^CAPTION^VIDEO^SCROLL
;LOCK. JUSSTR, which is optional,is the justification for each column;
;(L=left, C=center, R=right) the default is center. Use this information
;to build the format string for the column formatter COLFMT.
N CN,COL,FMTSTR,IND,JC,JUSSTR,PLCOL,SCOL,SP,TEMP,WIDTH
;Sort by columns
S IND=""
F S IND=$O(VALMDDF(IND)) Q:IND="" D
. S TEMP=VALMDDF(IND)
. S COL($P(TEMP,U,2))=$P(TEMP,U,3)
S JUSSTR=$G(JSTR)
S (CN,PLCOL,SCOL,SP)=0
S FMTSTR=""
S SCOL=0
F S SCOL=$O(COL(SCOL)) Q:SCOL="" D
. S CN=CN+1
. S WIDTH=COL(SCOL)
. I CN=1 S PLCOL=WIDTH
. E S SP=SCOL-PLCOL-1,FMTSTR=FMTSTR_SP_U,PLCOL=SCOL+WIDTH-1
. S JC=$E(JUSSTR,CN)
. I JC="" S JC="C"
. S TEMP=WIDTH_JC
. S FMTSTR=FMTSTR_TEMP
Q FMTSTR
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMTEXT 7838 printed Oct 16, 2024@17:50:16 Page 2
PXRMTEXT ; SLC/PKR - Text formatting utility routines. ;07/25/2014
+1 ;;2.0;CLINICAL REMINDERS;**6,12,47**;Feb 04, 2005;Build 291
+2 ;
+3 ;============================================
NEWLINE ;Put TEXT on a new line to the output, make sure it does not end
+1 ;with a " ".
+2 NEW TLEN
+3 ;If there is no text in TEXT don't do anything.
+4 IF TEXT=INDSTR
QUIT
+5 SET TLEN=$LENGTH(TEXT)
+6 IF $EXTRACT(TEXT,TLEN)=" "
SET TEXT=$EXTRACT(TEXT,1,TLEN-1)
+7 SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=TEXT
+8 SET TEXT=INDSTR
SET CLEN=0
+9 QUIT
+10 ;
+11 ;============================================
BLANK ;Add a blank line (line containing just " ") to the output.
+1 SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=" "
+2 SET TEXT=INDSTR
SET CLEN=0
+3 QUIT
+4 ;
+5 ;============================================
CHECKLEN(WORD) ;Check to see if adding the next word makes the line too long.
+1 ;If it does add it to the output and start a new line.
+2 NEW LENWORD,SPLEFT,TLEN
+3 SET LENWORD=$LENGTH(WORD)
+4 SET TLEN=CLEN+LENWORD
+5 IF TLEN'>WIDTH
Begin DoDot:1
+6 IF WORD'[" "
SET WORD=WORD_" "
SET LENWORD=LENWORD+1
+7 SET TEXT=TEXT_WORD
SET CLEN=CLEN+LENWORD
End DoDot:1
QUIT
+8 ;Width exceeded.
+9 ;If at least 70% of the width is filled go ahead and break.
+10 IF CLEN>(0.7*WIDTH)
Begin DoDot:1
+11 DO NEWLINE
+12 IF WORD'[" "
SET WORD=WORD_" "
SET LENWORD=LENWORD+1
+13 SET TEXT=INDSTR_WORD
SET CLEN=LENWORD
End DoDot:1
QUIT
+14 SET SPLEFT=WIDTH-CLEN+1
+15 IF (LENWORD-SPLEFT)<2
Begin DoDot:1
+16 DO NEWLINE
+17 IF WORD'[" "
SET WORD=WORD_" "
SET LENWORD=LENWORD+1
+18 SET TEXT=INDSTR_WORD
SET CLEN=LENWORD
End DoDot:1
QUIT
+19 SET TEXT=TEXT_$EXTRACT(WORD,1,SPLEFT-1)
+20 DO NEWLINE
+21 SET WORD=$EXTRACT(WORD,SPLEFT,LENWORD)
+22 DO CHECKLEN(WORD)
+23 QUIT
+24 ;
+25 ;============================================
COLFMT(FMTSTR,TEXTSTR,PC,NL,OUTPUT) ;Columnar text formatter.
+1 ;FMTSTR - format string; ^ separated string for each column in the
+2 ;output. 35R2 defines a right justified column 35 characters wide
+3 ;with 2 blank spaces following. Columns can be centered (C) left
+4 ;justified (L) or right justified (R).
+5 ;TEXTSTR - string to be formated, text for each column separated by "^"
+6 ;PC - the pad character
+7 ;NL - number of lines of output
+8 ;OUTPUT - array containing output lines.
+9 NEW COLOUT,ENTRY,FMT,JND,JUS,IND,LEN,NCOL,NLO,NROW
+10 NEW SP,TEMP,TEXT,TEXTOUT,WIDTH,WPSP
+11 SET NCOL=$LENGTH(FMTSTR,U)
SET NROW=1
+12 FOR IND=1:1:NCOL
Begin DoDot:1
+13 SET FMT=$PIECE(FMTSTR,U,IND)
+14 SET JUS(IND)=$SELECT(FMT["C":"C",FMT["L":"L",FMT["R":"R",1:"C")
+15 SET WIDTH(IND)=$PIECE(FMT,JUS(IND),1)
+16 SET SP(IND)=$PIECE(FMT,JUS(IND),2)
+17 SET WPSP(IND)=WIDTH(IND)+SP(IND)
+18 SET ENTRY(IND)=$SELECT(JUS(IND)="C":"CJ",JUS(IND)="L":"LJ",JUS(IND)="R":"RJ")
End DoDot:1
+19 FOR IND=1:1:NCOL
Begin DoDot:1
+20 SET TEMP=$PIECE(TEXTSTR,U,IND)
+21 SET LEN=$LENGTH(TEMP)
+22 IF (LEN>WIDTH(IND))!(TEMP["\\")
Begin DoDot:2
+23 DO FORMATS(1,WIDTH(IND),TEMP,.NLO,.TEXTOUT)
+24 FOR JND=1:1:NLO
Begin DoDot:3
+25 SET TEMP=$$@ENTRY(IND)^XLFSTR(TEXTOUT(JND),WIDTH(IND),PC)
+26 SET COLOUT(JND,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
End DoDot:3
+27 IF NLO>NROW
SET NROW=NLO
End DoDot:2
QUIT
+28 IF LEN'>WIDTH(IND)
Begin DoDot:2
+29 SET TEMP=$$@ENTRY(IND)^XLFSTR(TEMP,WIDTH(IND),PC)
+30 SET COLOUT(1,IND)=TEMP_$$LJ^XLFSTR("",SP(IND)," ")
End DoDot:2
End DoDot:1
+31 FOR IND=1:1:NROW
Begin DoDot:1
+32 SET TEXT=""
+33 FOR JND=1:1:NCOL
Begin DoDot:2
+34 IF $DATA(COLOUT(IND,JND))
SET TEXT=TEXT_COLOUT(IND,JND)
+35 IF '$TEST
SET TEXT=TEXT_$$LJ^XLFSTR("",(WPSP(JND))," ")
End DoDot:2
+36 SET OUTPUT(IND)=TEXT
End DoDot:1
+37 SET NL=NROW
+38 QUIT
+39 ;
+40 ;============================================
COLFMTA(FMTSTR,INPUT,PC,NROW,OUTPUT) ;Columnar text formatter.
+1 ;Array version of COLFMT. Input array is ^TMP($J,INPUT,M) and
+2 ;output is ^TMP($J,OUTPUT,N).
+3 NEW COLOUT,CURR,ENTRY,FMT,JND,JUS,IND,LEN,LINE,NCOL,NLO,NUM
+4 NEW SP,T1,TEMP,TEXT,WIDTH,WPSP
+5 SET NCOL=$LENGTH(FMTSTR,U)
+6 ;Setup the formatting parameters.
+7 FOR IND=1:1:NCOL
Begin DoDot:1
+8 SET FMT=$PIECE(FMTSTR,U,IND)
+9 SET JUS(IND)=$SELECT(FMT["C":"C",FMT["L":"L",FMT["R":"R",1:"C")
+10 SET WIDTH(IND)=$PIECE(FMT,JUS(IND),1)
+11 SET SP(IND)=$PIECE(FMT,JUS(IND),2)
+12 SET WPSP(IND)=WIDTH(IND)+SP(IND)
+13 SET ENTRY(IND)=$SELECT(JUS(IND)="C":"CJ",JUS(IND)="L":"LJ",JUS(IND)="R":"RJ")
+14 SET CURR(IND)=1
End DoDot:1
+15 ;
+16 SET NUM=""
+17 FOR
SET NUM=$ORDER(^TMP($JOB,INPUT,NUM))
if NUM=""
QUIT
Begin DoDot:1
+18 SET LINE=^TMP($JOB,INPUT,NUM)
+19 FOR IND=1:1:NCOL
Begin DoDot:2
+20 SET T1=$PIECE(LINE,U,IND)
+21 IF $LENGTH(T1)=0
QUIT
+22 SET TEMP=$GET(COLOUT(CURR(IND),IND))_T1
+23 SET LEN=$LENGTH(TEMP)
+24 IF (LEN>WIDTH(IND))!(TEMP["\\")
Begin DoDot:3
+25 DO FORMATS(1,WIDTH(IND),TEMP,.NLO,.TEXTOUT)
+26 FOR JND=1:1:(NLO-1)
Begin DoDot:4
+27 SET COLOUT(CURR(IND),IND)=TEXTOUT(JND)
+28 SET CURR(IND)=CURR(IND)+1
End DoDot:4
+29 SET COLOUT(CURR(IND),IND)=TEXTOUT(NLO)_" "
End DoDot:3
QUIT
+30 IF LEN'>WIDTH(IND)
SET COLOUT(CURR(IND),IND)=TEMP
End DoDot:2
End DoDot:1
+31 ;Format each row and column entry.
+32 SET (JND,NROW)=0
+33 FOR
SET JND=$ORDER(COLOUT(JND))
if JND=""
QUIT
Begin DoDot:1
+34 SET NROW=NROW+1
+35 FOR IND=1:1:NCOL
Begin DoDot:2
+36 SET TEMP=$GET(COLOUT(JND,IND))
+37 IF TEMP=""
QUIT
+38 SET COLOUT(JND,IND)=$$@ENTRY(IND)^XLFSTR(TEMP,WPSP(IND),PC)
End DoDot:2
End DoDot:1
+39 FOR IND=1:1:NROW
Begin DoDot:1
+40 SET TEXT=""
+41 FOR JND=1:1:NCOL
Begin DoDot:2
+42 IF $DATA(COLOUT(IND,JND))
SET TEXT=TEXT_COLOUT(IND,JND)
+43 IF '$TEST
SET TEXT=TEXT_$$LJ^XLFSTR("",(WPSP(JND))," ")
End DoDot:2
+44 SET ^TMP($JOB,OUTPUT,IND)=TEXT
End DoDot:1
+45 QUIT
+46 ;
+47 ;============================================
FORMAT(LM,RM,NIN,TEXTIN,NOUT,TEXTOUT) ;Format the text in TEXTIN so it has
+1 ;a left margin of LM and a right margin of RM. The formatted text
+2 ;is in TEXTOUT. "\\" is the end of line marker. Lines ending with
+3 ;"\\" will not have anything appended to them. A blank line can
+4 ;be created with a line containing just "\\". Lines containing
+5 ;nothing but whitespace will also act like a "\\".
+6 IF NIN=0
SET NOUT=0
QUIT
+7 NEW ACHAR,ALLWSP,CHAR,CLEN,END,IND,INDENT,INDSTR,JND
+8 NEW LWSP,NWSP,START,TEMP,TEXT,TLEN,WIDTH,W1,W2,WORD
+9 ;Catalog the whitespace so we have places to break and look for
+10 ;end of line markers.
+11 FOR IND=1:1:NIN
Begin DoDot:1
+12 SET TEMP=TEXTIN(IND)
+13 IF TEMP=""
SET TEMP=" "
+14 SET TLEN=$LENGTH(TEMP)
+15 SET ALLWSP=1
SET NWSP=0
+16 FOR JND=1:1:TLEN
Begin DoDot:2
+17 SET CHAR=$EXTRACT(TEMP,JND)
+18 SET ACHAR=$ASCII(CHAR)
+19 IF ACHAR>32
SET ALLWSP=0
+20 IF '$TEST
SET NWSP=NWSP+1
SET LWSP(IND,NWSP)=JND
End DoDot:2
+21 ;Mark the end of the line unless it is already whitespace.
+22 IF ACHAR>32
SET NWSP=NWSP+1
SET LWSP(IND,NWSP)=TLEN
+23 SET LWSP(IND)=NWSP
+24 IF ALLWSP
SET LWSP(IND,"ALLWSP")=""
End DoDot:1
+25 IF LM<1
SET LM=1
+26 SET WIDTH=RM-LM+1
+27 SET INDENT=LM-1
+28 SET INDSTR=""
+29 FOR IND=1:1:INDENT
SET INDSTR=INDSTR_" "
+30 SET NOUT=0
+31 SET TEXT=INDSTR
SET CLEN=0
+32 FOR IND=1:1:NIN
Begin DoDot:1
+33 ;If there is a blank line force whatever is in TEXT to be output by
+34 ;calling NEWLINE and then add the blank.
+35 IF $DATA(LWSP(IND,"ALLWSP"))
DO NEWLINE
DO BLANK
QUIT
+36 SET TEMP=TEXTIN(IND)
+37 SET (END,NWSP)=0
+38 FOR NWSP=1:1:LWSP(IND)
Begin DoDot:2
+39 SET START=END+1
SET END=LWSP(IND,NWSP)
+40 SET WORD=$EXTRACT(TEMP,START,END)
+41 ;PXRMINQ will be set if this is being called from an inquiry.
+42 ;If that is the case just display "\\" do not add a new line.
+43 IF '$DATA(PXRMINQ)
IF WORD["\\"
Begin DoDot:3
+44 SET W1=$PIECE(WORD,"\\",1)
+45 DO CHECKLEN(W1)
+46 DO NEWLINE
+47 SET W2=$PIECE(WORD,"\\",2)
+48 IF W2'=""
DO CHECKLEN(W2)
End DoDot:3
QUIT
+49 DO CHECKLEN(WORD)
End DoDot:2
End DoDot:1
+50 ;Output the last line.
+51 DO NEWLINE
+52 QUIT
+53 ;
+54 ;============================================
FORMATS(LM,RM,TEXTLINE,NOUT,TEXTOUT) ;Take a single line of input text
+1 ;and format it.
+2 NEW TEXTIN
+3 SET TEXTIN(1)=TEXTLINE
+4 DO FORMAT(LM,RM,1,.TEXTIN,.NOUT,.TEXTOUT)
+5 QUIT
+6 ;
+7 ;============================================
LMFMTSTR(VALMDDF,JSTR) ;The List Manager variable VALMDDF contains the
+1 ;list template caption column formatting information. It contains
+2 ;the starting column and the width in the form
+3 ;VALMDDF(COLUMN NAME)=COLUMN NAME^COLUMN^WIDTH^CAPTION^VIDEO^SCROLL
+4 ;LOCK. JUSSTR, which is optional,is the justification for each column;
+5 ;(L=left, C=center, R=right) the default is center. Use this information
+6 ;to build the format string for the column formatter COLFMT.
+7 NEW CN,COL,FMTSTR,IND,JC,JUSSTR,PLCOL,SCOL,SP,TEMP,WIDTH
+8 ;Sort by columns
+9 SET IND=""
+10 FOR
SET IND=$ORDER(VALMDDF(IND))
if IND=""
QUIT
Begin DoDot:1
+11 SET TEMP=VALMDDF(IND)
+12 SET COL($PIECE(TEMP,U,2))=$PIECE(TEMP,U,3)
End DoDot:1
+13 SET JUSSTR=$GET(JSTR)
+14 SET (CN,PLCOL,SCOL,SP)=0
+15 SET FMTSTR=""
+16 SET SCOL=0
+17 FOR
SET SCOL=$ORDER(COL(SCOL))
if SCOL=""
QUIT
Begin DoDot:1
+18 SET CN=CN+1
+19 SET WIDTH=COL(SCOL)
+20 IF CN=1
SET PLCOL=WIDTH
+21 IF '$TEST
SET SP=SCOL-PLCOL-1
SET FMTSTR=FMTSTR_SP_U
SET PLCOL=SCOL+WIDTH-1
+22 SET JC=$EXTRACT(JUSSTR,CN)
+23 IF JC=""
SET JC="C"
+24 SET TEMP=WIDTH_JC
+25 SET FMTSTR=FMTSTR_TEMP
End DoDot:1
+26 QUIT FMTSTR
+27 ;