- GMRCUTIL ;SLC/DCM - Utilities for formatting word procesing fields and setting into ^TMP("GMRCR" globals for use by List Manager routines ;4/30/98 10:47
- ;;3.0;CONSULT/REQUEST TRACKING;**1,4**;DEC 27, 1997
- GSET(LN,GLOB,J1,FLG) ;Set the word processing formatted local array WP() fields into the ^TMP Global.
- ; LN: Line in the ^TMP global where the data is to be placed. LN is
- ; incremented and passed back to the calling routine so that it
- ; can set data into the next global node as needed.
- ; GLB: The ^TMP global where the data is to be placed.(i.e.,
- ; ^TMP("GMRCR",$J,"CS").
- ; J1: The last entry in the WP array. It is passed back to the
- ; calling routine so that WP(J1) can be concatenated to the next
- ; line, if necessary
- ; FLG: If the first line of the the data in WP needs to be formatted
- ; differently than succeeding lines, FLG signals this fact by
- ; being passed as FLG=1; otherwise, FLG is passed as FLG=0.
- S (J,J1)=0 F S J=$O(WP(J)) Q:J="" S DTA=$S('FLG:$E(TAB,1,17)_WP(J),1:WP(J)) S @GLOB@(LN,0)=DTA,LN=LN+1,J1=J,FLG=0
- K J,DTA
- Q
- WPFMT(LINE,GMRCSL) ;FORMAT GLOBALS TO PRINT OUT IN A WORD PROCESSING FORMAT
- ; LINE: The line of text that needs to be broken into 80 column
- ; or less lines for printing on the screen.
- ; GMRCSL: This is the desired line length, to break LINE into; i.e.
- ; 60, 70, or 80 columns (or smaller/larger) for screen display.
- K WP S WP="" Q:LINE?1.80P F LIN=1:1 D S WP(LIN)=$E(BKLN,1,$L(BKLN)-1) Q:'$L(LINE)
- .S (BKLN,WRD)="" F I=1:1 S WRD=$P(LINE," ",1) Q:($L(BKLN)+$L(WRD)+1)>GMRCSL S BKLN=BKLN_WRD_" ",LINE=$P(LINE," ",2,256),WRD="" Q:$P(LINE," ",1,30)=""
- .I $L(LINE),'$L(BKLN) S BKLN=$E(LINE,1,GMRCSL),LINE=$E(LINE,$L(BKLN),$L(LINE))
- .Q
- K I,LIN,BKLN,WRD Q
- ;
- WPSET(GLOBAL,TMPGBL,LINE,LNO,TAB,FLG) ;Set the lines into a the ^TMP global in word-processing format.
- ; GLOBAL: Global where data is comming from.
- ; TMPGBL: Global where formatted data is being placed
- ; LINE: Line is passed because it may contain some data already.
- ; If it does, it is concatenated to the data from GLOBAL.
- ; LNO: This is a counter to where the next line of data should
- ; be set in TMPGLOBAL. It is incremented and passed back
- ; to the calling routine so it knows where the next piece
- ; of data is to be placed in TMPGBL.
- ; TAB: A string of spaces concatenated to the data in TMPGBL
- ; that acts like a tab character. TAB is passed to GSET.
- ; FLG: If the first line of data is not tabbed, then FLG is
- ; passed as FLG=1 and no tab character is concatenated to
- ; this line. If FLG=0, then the data is tabbed.
- N LN
- S (LN,LN1,J1)=0 F S LN=$O(@(GLOBAL)@(LN)) Q:LN=""!(LN?1A.E) S LINE=LINE_@(GLOBAL)@(LN,0) D
- .I @(GLOBAL)@(LN,0)?1.240" " D WPFMT(LINE,$S('FLG:60,1:70)),GSET(.LNO,TMPGBL,.J1,.FLG) S @(TMPGBL)@(LNO,0)=@(GLOBAL)@(LN,0),LNO=LNO+1 S LINE="" Q
- .I $O(@(GLOBAL)@(LN)),$O(@(GLOBAL)@(LN))'?1A S LN1=$O(@(GLOBAL)@(LN)) I $S((@(GLOBAL)@(LN1,0))?1.240" ":1,(@(GLOBAL)@(LN1,0))="":1,1:0) D WPFMT(LINE,$S('FLG:60,1:70)),GSET(.LNO,TMPGBL,.J1,.FLG) S LN=LN1,LINE="" Q
- .I FLG,$L(LINE)<79,$O(@(GLOBAL)@(LN))]"",$O(@(GLOBAL)@(LN))'?1A.E S LN=$O(@(GLOBAL)@(LN)),LINE=LINE_" "_@(GLOBAL)@(LN,0) D WPFMT(LINE,79),GSET(.LNO,TMPGBL,.J1,.FLG) D
- ..I $O(@(GLOBAL)@(LN))?1A.E S LINE="" Q
- ..I $O(@(GLOBAL)@(LN))]"",$D(WP(J1)),$L(WP(J1))<60 S LINE=WP(J1)_" ",LNO=LNO-1 Q
- ..I $D(WP(J1)),$L(WP(J1))>60 S LINE=WP(J1),LNO=LNO-1 Q
- ..S LINE="" Q
- .Q:LINE=""
- .I $L(LINE)>70,FLG S LINE(0)=$E(LINE,1,$F(LINE," ",69)-1),LINE=$E(LINE,$F(LINE," ",69),$L(LINE)),@(TMPGBL)@(LNO,0)=LINE(0),FLG=$S($L(LINE(0)):0,1:1),LNO=LNO+1
- .D WPFMT(LINE,$S('FLG:60,1:70)),GSET(.LNO,TMPGBL,.J1,.FLG) I $O(@(GLOBAL)@(LN))]"",$D(WP(J1)),$L(WP(J1))<60 S LINE=WP(J1)_" ",LNO=LNO-1,FLG=0
- .E S LINE=""
- .Q
- K J1,LN1,WP Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMRCUTIL 3949 printed Feb 18, 2025@23:14:06 Page 2
- GMRCUTIL ;SLC/DCM - Utilities for formatting word procesing fields and setting into ^TMP("GMRCR" globals for use by List Manager routines ;4/30/98 10:47
- +1 ;;3.0;CONSULT/REQUEST TRACKING;**1,4**;DEC 27, 1997
- GSET(LN,GLOB,J1,FLG) ;Set the word processing formatted local array WP() fields into the ^TMP Global.
- +1 ; LN: Line in the ^TMP global where the data is to be placed. LN is
- +2 ; incremented and passed back to the calling routine so that it
- +3 ; can set data into the next global node as needed.
- +4 ; GLB: The ^TMP global where the data is to be placed.(i.e.,
- +5 ; ^TMP("GMRCR",$J,"CS").
- +6 ; J1: The last entry in the WP array. It is passed back to the
- +7 ; calling routine so that WP(J1) can be concatenated to the next
- +8 ; line, if necessary
- +9 ; FLG: If the first line of the the data in WP needs to be formatted
- +10 ; differently than succeeding lines, FLG signals this fact by
- +11 ; being passed as FLG=1; otherwise, FLG is passed as FLG=0.
- +12 SET (J,J1)=0
- FOR
- SET J=$ORDER(WP(J))
- if J=""
- QUIT
- SET DTA=$SELECT('FLG:$EXTRACT(TAB,1,17)_WP(J),1:WP(J))
- SET @GLOB@(LN,0)=DTA
- SET LN=LN+1
- SET J1=J
- SET FLG=0
- +13 KILL J,DTA
- +14 QUIT
- WPFMT(LINE,GMRCSL) ;FORMAT GLOBALS TO PRINT OUT IN A WORD PROCESSING FORMAT
- +1 ; LINE: The line of text that needs to be broken into 80 column
- +2 ; or less lines for printing on the screen.
- +3 ; GMRCSL: This is the desired line length, to break LINE into; i.e.
- +4 ; 60, 70, or 80 columns (or smaller/larger) for screen display.
- +5 KILL WP
- SET WP=""
- if LINE?1.80P
- QUIT
- FOR LIN=1:1
- Begin DoDot:1
- +6 SET (BKLN,WRD)=""
- FOR I=1:1
- SET WRD=$PIECE(LINE," ",1)
- if ($LENGTH(BKLN)+$LENGTH(WRD)+1)>GMRCSL
- QUIT
- SET BKLN=BKLN_WRD_" "
- SET LINE=$PIECE(LINE," ",2,256)
- SET WRD=""
- if $PIECE(LINE," ",1,30)=""
- QUIT
- +7 IF $LENGTH(LINE)
- IF '$LENGTH(BKLN)
- SET BKLN=$EXTRACT(LINE,1,GMRCSL)
- SET LINE=$EXTRACT(LINE,$LENGTH(BKLN),$LENGTH(LINE))
- +8 QUIT
- End DoDot:1
- SET WP(LIN)=$EXTRACT(BKLN,1,$LENGTH(BKLN)-1)
- if '$LENGTH(LINE)
- QUIT
- +9 KILL I,LIN,BKLN,WRD
- QUIT
- +10 ;
- WPSET(GLOBAL,TMPGBL,LINE,LNO,TAB,FLG) ;Set the lines into a the ^TMP global in word-processing format.
- +1 ; GLOBAL: Global where data is comming from.
- +2 ; TMPGBL: Global where formatted data is being placed
- +3 ; LINE: Line is passed because it may contain some data already.
- +4 ; If it does, it is concatenated to the data from GLOBAL.
- +5 ; LNO: This is a counter to where the next line of data should
- +6 ; be set in TMPGLOBAL. It is incremented and passed back
- +7 ; to the calling routine so it knows where the next piece
- +8 ; of data is to be placed in TMPGBL.
- +9 ; TAB: A string of spaces concatenated to the data in TMPGBL
- +10 ; that acts like a tab character. TAB is passed to GSET.
- +11 ; FLG: If the first line of data is not tabbed, then FLG is
- +12 ; passed as FLG=1 and no tab character is concatenated to
- +13 ; this line. If FLG=0, then the data is tabbed.
- +14 NEW LN
- +15 SET (LN,LN1,J1)=0
- FOR
- SET LN=$ORDER(@(GLOBAL)@(LN))
- if LN=""!(LN?1A.E)
- QUIT
- SET LINE=LINE_@(GLOBAL)@(LN,0)
- Begin DoDot:1
- +16 IF @(GLOBAL)@(LN,0)?1.240" "
- DO WPFMT(LINE,$SELECT('FLG:60,1:70))
- DO GSET(.LNO,TMPGBL,.J1,.FLG)
- SET @(TMPGBL)@(LNO,0)=@(GLOBAL)@(LN,0)
- SET LNO=LNO+1
- SET LINE=""
- QUIT
- +17 IF $ORDER(@(GLOBAL)@(LN))
- IF $ORDER(@(GLOBAL)@(LN))'?1A
- SET LN1=$ORDER(@(GLOBAL)@(LN))
- IF $SELECT((@(GLOBAL)@(LN1,0))?1.240" ":1,(@(GLOBAL)@(LN1,0))="":1,1:0)
- DO WPFMT(LINE,$SELECT('FLG:60,1:70))
- DO GSET(.LNO,TMPGBL,.J1,.FLG)
- SET LN=LN1
- SET LINE=""
- QUIT
- +18 IF FLG
- IF $LENGTH(LINE)<79
- IF $ORDER(@(GLOBAL)@(LN))]""
- IF $ORDER(@(GLOBAL)@(LN))'?1A.E
- SET LN=$ORDER(@(GLOBAL)@(LN))
- SET LINE=LINE_" "_@(GLOBAL)@(LN,0)
- DO WPFMT(LINE,79)
- DO GSET(.LNO,TMPGBL,.J1,.FLG)
- Begin DoDot:2
- +19 IF $ORDER(@(GLOBAL)@(LN))?1A.E
- SET LINE=""
- QUIT
- +20 IF $ORDER(@(GLOBAL)@(LN))]""
- IF $DATA(WP(J1))
- IF $LENGTH(WP(J1))<60
- SET LINE=WP(J1)_" "
- SET LNO=LNO-1
- QUIT
- +21 IF $DATA(WP(J1))
- IF $LENGTH(WP(J1))>60
- SET LINE=WP(J1)
- SET LNO=LNO-1
- QUIT
- +22 SET LINE=""
- QUIT
- End DoDot:2
- +23 if LINE=""
- QUIT
- +24 IF $LENGTH(LINE)>70
- IF FLG
- SET LINE(0)=$EXTRACT(LINE,1,$FIND(LINE," ",69)-1)
- SET LINE=$EXTRACT(LINE,$FIND(LINE," ",69),$LENGTH(LINE))
- SET @(TMPGBL)@(LNO,0)=LINE(0)
- SET FLG=$SELECT($LENGTH(LINE(0)):0,1:1)
- SET LNO=LNO+1
- +25 DO WPFMT(LINE,$SELECT('FLG:60,1:70))
- DO GSET(.LNO,TMPGBL,.J1,.FLG)
- IF $ORDER(@(GLOBAL)@(LN))]""
- IF $DATA(WP(J1))
- IF $LENGTH(WP(J1))<60
- SET LINE=WP(J1)_" "
- SET LNO=LNO-1
- SET FLG=0
- +26 IF '$TEST
- SET LINE=""
- +27 QUIT
- End DoDot:1
- +28 KILL J1,LN1,WP
- QUIT