[613] | 1 | ZZMKEDIT ;SFISC/MKO-EDIT A ROUTINE ;3:38 PM 22 Aug 2000
|
---|
| 2 | ;;21.0;VA FileMan;;Dec 28, 1994
|
---|
| 3 | N DDWRTN
|
---|
| 4 | G EN
|
---|
| 5 | ;
|
---|
| 6 | EDIT(DDWRTN) ;Use the Screen Editor to edit a routine.
|
---|
| 7 | EN ;Entry point to jump around the EDIT entry point, which requires
|
---|
| 8 | ;parameter passing syntax. (Called from ^ZZMKEDIT.)
|
---|
| 9 | N DDWI,DDWIC,DDWNEW,DDWX,X,Y,%,%X,%Y
|
---|
| 10 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT
|
---|
| 11 | N DIE,XCM,XCN,DTIME
|
---|
| 12 | S DTIME=3600
|
---|
| 13 | ;
|
---|
| 14 | I $G(DDWRTN)]"" D
|
---|
| 15 | . D LOAD(.DDWRTN)
|
---|
| 16 | E D
|
---|
| 17 | . X ^%ZOSF("EON")
|
---|
| 18 | . K DIR
|
---|
| 19 | . S DIR(0)="FO^1:8^K:X?.E1.C.E!'(X?1""%""1.7AN!(X?1A1.7AN)) X"
|
---|
| 20 | . S DIR("A")="Edit routine"
|
---|
| 21 | . S DIR("?")="Enter the name of a routine, without the leading up-arrow"
|
---|
| 22 | . ;
|
---|
| 23 | . F D Q:$G(DDWRTN)]""
|
---|
| 24 | .. W ! D ^DIR I $D(DIRUT) S DDWRTN=U Q
|
---|
| 25 | .. S DDWRTN=X
|
---|
| 26 | .. X ^%ZOSF("TEST") S DDWNEW='$T
|
---|
| 27 | .. I DDWNEW D
|
---|
| 28 | ... D ADD(.DDWRTN) Q:U[$G(DDWRTN)
|
---|
| 29 | ... S DDWIC=$F(^TMP("DDWRTN",$J,1,0),"-")
|
---|
| 30 | .. E D LOAD(.DDWRTN)
|
---|
| 31 | Q:U[$G(DDWRTN)
|
---|
| 32 | ;
|
---|
| 33 | CALL ;Call Screen Editor
|
---|
| 34 | D EDIT^DDW("^TMP(""DDWRTN"",$J)","M",DDWRTN,"Routine: "_DDWRTN,,$G(DDWIC))
|
---|
| 35 | ;
|
---|
| 36 | ;Prompt whether to save changes
|
---|
| 37 | K DIR
|
---|
| 38 | S DIR(0)="YO"
|
---|
| 39 | S DIR("A")="Do you want to save changes to routine "_DDWRTN
|
---|
| 40 | S DIR("?",1)="Enter 'YES' to save your changes."
|
---|
| 41 | S DIR("?",2)="Enter 'NO' or '^' to discard your changes."
|
---|
| 42 | S DIR("?")="Press <RET> to return to the editor."
|
---|
| 43 | W ! D ^DIR
|
---|
| 44 | I Y="" K DUOUT,DIRUT,DIROUT,DTOUT,DIR,X,Y G CALL
|
---|
| 45 | G:$D(DIRUT)!'Y QUIT
|
---|
| 46 | ;
|
---|
| 47 | ;Time stamp routine
|
---|
| 48 | S $P(^TMP("DDWRTN",$J,1,0),";",3)=$$NOW
|
---|
| 49 | ;
|
---|
| 50 | ;Remove extra spaces
|
---|
| 51 | S DDWI=0
|
---|
| 52 | F S DDWI=$O(^TMP("DDWRTN",$J,DDWI)) Q:'DDWI D
|
---|
| 53 | . S DDWX=^TMP("DDWRTN",$J,DDWI,0)
|
---|
| 54 | . S DDWX=$$STRIP(DDWX)
|
---|
| 55 | . S ^TMP("DDWRTN",$J,DDWI,0)=$$LS(DDWX)
|
---|
| 56 | ;
|
---|
| 57 | ;Save routine
|
---|
| 58 | S X=DDWRTN,XCN=0,DIE="^TMP(""DDWRTN"",$J,"
|
---|
| 59 | X ^%ZOSF("SAVE")
|
---|
| 60 | ;
|
---|
| 61 | ;Write routine size
|
---|
| 62 | X "ZL "_DDWRTN_" X ^%ZOSF(""SIZE"")"
|
---|
| 63 | W !!,"Routine size: "_Y
|
---|
| 64 | X "ZL "_DDWRTN_" X ^ZZMKEDIT(""SIZE"")"
|
---|
| 65 | W !,"Routine size (excluding commented lines): "_Y,!
|
---|
| 66 | ;
|
---|
| 67 | QUIT K ^TMP("DDWRTN",$J)
|
---|
| 68 | Q
|
---|
| 69 | ;
|
---|
| 70 | ADD(DDWRTN) ;Add routine
|
---|
| 71 | I $$LOADCHK(DDWRTN) D Q
|
---|
| 72 | . W !!,$C(7)_"Another process has just created routine "_DDWRTN
|
---|
| 73 | . S DDWRTN=""
|
---|
| 74 | ;
|
---|
| 75 | ;Prompt user
|
---|
| 76 | N DIR,DIRUT,DUOUT,DTOUT,DIROUT,INIT,X,Y
|
---|
| 77 | S DIR(0)="Y"
|
---|
| 78 | S DIR("A")="Is "_DDWRTN_" a new routine"
|
---|
| 79 | S DIR("?")="Answer 'YES' if you want to create routine "_DDWRTN_"."
|
---|
| 80 | W ! D ^DIR
|
---|
| 81 | I $D(DIRUT)!'Y S DDWRTN="" Q
|
---|
| 82 | ;
|
---|
| 83 | K DIR
|
---|
| 84 | S DIR(0)="FO^1:15"
|
---|
| 85 | S DIR("A")="Programmer initials"
|
---|
| 86 | S DIR("?")="Enter your initials, which will appear on the first line of the routine."
|
---|
| 87 | W ! D ^DIR
|
---|
| 88 | I $D(DUOUT)!$D(DTOUT) S DDWRTN="" Q
|
---|
| 89 | S INIT=Y
|
---|
| 90 | ;
|
---|
| 91 | K ^TMP("DDWRTN",$J)
|
---|
| 92 | S ^TMP("DDWRTN",$J)=DDWRTN
|
---|
| 93 | ;
|
---|
| 94 | ;Create routine in ^TMP
|
---|
| 95 | S ^TMP("DDWRTN",$J,1,0)=$$SP(DDWRTN_" ;SFISC/"_INIT_"- ;")
|
---|
| 96 | S ^TMP("DDWRTN",$J,2,0)=$$SP(" ;;1.0")
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|
| 99 | LOAD(DDWRTN) ;Load routine into ^TMP
|
---|
| 100 | N DDWI,DDWX
|
---|
| 101 | ;
|
---|
| 102 | ;Check if routine is already loaded in ^TMP
|
---|
| 103 | I $$LOADCHK(DDWRTN) D Q
|
---|
| 104 | . W !,$C(7)_"Another process is already editing routine "_DDWRTN,!
|
---|
| 105 | . S DDWRTN=""
|
---|
| 106 | ;
|
---|
| 107 | ;Load routine into ^TMP
|
---|
| 108 | W !,"Loading ",DDWRTN
|
---|
| 109 | K ^TMP("DDWRTN",$J)
|
---|
| 110 | S ^TMP("DDWRTN",$J)=DDWRTN
|
---|
| 111 | F DDWI=1:1 S DDWX=$T(+DDWI^@DDWRTN) Q:DDWX="" D
|
---|
| 112 | . S ^TMP("DDWRTN",$J,DDWI,0)=$$SP(DDWX)
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | LOADCHK(RTN) ;Check if routine is already loaded by another process
|
---|
| 116 | N J
|
---|
| 117 | S J=""
|
---|
| 118 | F S J=$O(^TMP("DDWRTN",J)) Q:J="" I RTN=^TMP("DDWRTN",J),J'=$J Q
|
---|
| 119 | Q J]""
|
---|
| 120 | ;
|
---|
| 121 | LS(X) ;Replace multiple line start characters with a single space
|
---|
| 122 | N I,P1,P2
|
---|
| 123 | I $G(X)="" S X=" "
|
---|
| 124 | E I X?1." ".E D
|
---|
| 125 | . F I=1:1:$L(X) Q:$E(X,I+1)'=" "
|
---|
| 126 | . S $E(X,1,I)=" "
|
---|
| 127 | E D
|
---|
| 128 | . S P1=$F(X," ")-1
|
---|
| 129 | . I P1<0 S X=X_" " Q
|
---|
| 130 | . F P2=P1:1:$L(X) Q:$E(X,P2+1)'=" "
|
---|
| 131 | . S $E(X,P1,P2)=" "
|
---|
| 132 | Q X
|
---|
| 133 | ;
|
---|
| 134 | SP(X,N) ;Replace line start character with up to N spaces (default=8)
|
---|
| 135 | N BODY,TAG,SP
|
---|
| 136 | S:$G(N)<1 N=8
|
---|
| 137 | S SP=$J("",N)
|
---|
| 138 | I $G(X)="" S X=""
|
---|
| 139 | E I X?1" ".E S $E(X,1)=SP
|
---|
| 140 | E D
|
---|
| 141 | . S TAG=$P(X," "),BODY=$P(X," ",2,999)
|
---|
| 142 | . I $L(TAG)<N S X=TAG_$E(SP,1,N-$L(TAG))_BODY
|
---|
| 143 | . E S X=TAG_" "_BODY
|
---|
| 144 | Q X
|
---|
| 145 | ;
|
---|
| 146 | STRIP(X) ;Strip trailing blanks from X
|
---|
| 147 | Q:X[";;=" X
|
---|
| 148 | N I
|
---|
| 149 | F I=$L(X):-1:0 Q:$E(X,I)'=" "
|
---|
| 150 | S X=$E(X,1,I)
|
---|
| 151 | Q X
|
---|
| 152 | ;
|
---|
| 153 | NOW() ;Return current time in external form
|
---|
| 154 | N %,%I,%H,AP,HR,MIN,MON,TIM,X
|
---|
| 155 | D NOW^%DTC
|
---|
| 156 | S TIM=$P(%,".",2)
|
---|
| 157 | S HR=$E(TIM,1,2)
|
---|
| 158 | S AP=$S(HR<12:"AM",1:"PM")
|
---|
| 159 | S HR=$S(HR<13:+HR,1:HR#12)
|
---|
| 160 | S MIN=$E(TIM_"0000",3,4)
|
---|
| 161 | ;
|
---|
| 162 | S MON=$P("Jan^Feb^Mar^Apr^May^Jun^Jul^Aug^Sep^Oct^Nov^Dec",U,%I(1))
|
---|
| 163 | Q HR_":"_MIN_" "_AP_" "_%I(2)_" "_MON_" "_(%I(3)+1700)
|
---|