Annotation of freem_fileman/DIR01.m, revision 1.1.1.1
1.1 snw 1: DIR01 ;SFISC/MKO-FIELD EDITOR ;02:39 PM 12 Oct 1994
2: ;;21.0;VA FileMan;;Dec 28, 1994
3: ;Per VHA Directive 10-93-142, this routine should not be modified.
4: I DIR0A]"" D F X IOXY Q:DIR0QT
5: F D E X IOXY Q:DIR0QT
6: Q
7: ;
8: F D READ(.DIR0CH)
9: I "?^"'[DIR0CH=$L(DIR0CH) S DIR0A="" D REP,DEOF Q
10: D:DIR0CH]"" E1
11: Q
12: ;
13: E I $G(DIR0("REP"))&DIR0C>1!(DIR0C>$L(DIR0A)),DIR0F>DX,DIR0M>$L(DIR0A),'$D(DIR0KD) D
14: . D PREAD($$MIN(DIR0F-DX,DIR0M-DIR0C+1),.DIR0ST,.DIR0CH)
15: . Q:DIR0ST=""
16: . S DIR0CHG=1
17: . I '$G(DIR0("REP")) S DIR0A=DIR0A_DIR0ST
18: . E S $E(DIR0A,DIR0C,DIR0C+$L(DIR0ST)-1)=DIR0ST
19: . S DX=DX+$L(DIR0ST),DIR0C=DIR0C+$L(DIR0ST)
20: E D READ(.DIR0CH)
21: Q:DIR0CH=""
22: ;
23: E1 I "?^"[DIR0CH,DIR0C=1,'DIR0QU S DIR0A="",DIR0QU=1 D REP,DEOF Q
24: D @$S($L(DIR0CH)>1:DIR0CH,$G(DIR0("REP")):"REP",1:"INS")
25: I DIR0QU,"?^"'[$E(DIR0A)!'$L(DIR0A) S DIR0QU=0,DIR0A="" D CLR
26: Q
27: ;
28: REP I DIR0C>DIR0M W $C(7) Q
29: S DIR0CHG=1
30: S $E(DIR0A,DIR0C)=DIR0CH,DIR0C=DIR0C+1
31: I DIR0F>DX S DX=DX+1 W DIR0CH Q
32: N DIX
33: S DIX=DIR0C-(DIR0L\2)
34: S:$L(DIR0A)-DIX+1<DIR0L DIX=$L(DIR0A)-DIR0L+1
35: S DX=DIR0S X IOXY
36: W $E(DIR0A,DIX,DIX+DIR0L-1) S DX=DIR0S+DIR0C-DIX
37: Q
38: ;
39: INS I $L(DIR0A)'<DIR0M W $C(7) Q
40: S DIR0CHG=1
41: S DIR0A=$E(DIR0A,1,DIR0C-1)_DIR0CH_$E(DIR0A,DIR0C,999),DIR0C=DIR0C+1
42: I DIR0F>DX S DX=DX+1 W $E(DIR0A,DIR0C-1,DIR0C+DIR0F-DX-1) Q
43: S DX=DIR0S X IOXY W $E(DIR0A,DIR0C-DIR0L,DIR0C-1) S DX=DIR0F
44: Q
45: ;
46: RIGHT Q:DIR0C>$L(DIR0A)
47: I DX<DIR0F S DX=DX+1,DIR0C=DIR0C+1 Q
48: S DIR0C=DIR0C+1,DX=DIR0S X IOXY
49: W $E(DIR0A,DIR0C-DIR0L,DIR0C-1)
50: S DX=DIR0F
51: Q
52: ;
53: LEFT Q:DIR0C'>1
54: I DX>DIR0S S DX=DX-1,DIR0C=DIR0C-1 Q
55: S DIR0C=DIR0C-1 W $E(DIR0A,DIR0C,DIR0C+DIR0L-1)
56: Q
57: ;
58: JRT Q:DIR0C>$L(DIR0A)
59: I DIR0F=DX D Q
60: . S DIR0C=DIR0C+DIR0L S:DIR0C+1>$L(DIR0A) DIR0C=$L(DIR0A)+1
61: . S DX=DIR0S X IOXY W $E(DIR0A,DIR0C-DIR0L,DIR0C-1)
62: . S DX=DIR0F
63: N DIX
64: S DIX=$L(DIR0A)-DIR0C+1
65: I DIR0F-DX>DIX S DX=DX+DIX,DIR0C=DIR0C+DIX Q
66: S DIR0C=DIR0C+DIR0F-DX,DX=DIR0F
67: Q
68: ;
69: JLT Q:DIR0C'>1
70: I DX=DIR0S D Q
71: . S DIR0C=DIR0C-DIR0L S:DIR0C<1 DIR0C=1
72: . W $E(DIR0A,DIR0C,DIR0C+DIR0L-1)
73: S DIR0C=DIR0C-DX+DIR0S,DX=DIR0S
74: Q
75: ;
76: FDE Q:DIR0C>$L(DIR0A)
77: I DX+$L(DIR0A)-DIR0C-DIR0L<DIR0S D Q
78: . S DX=DX+$L(DIR0A)-DIR0C+1,DIR0C=$L(DIR0A)+1
79: S DIR0C=$L(DIR0A)+1,DX=DIR0S X IOXY
80: W $E(DIR0A,DIR0C-DIR0L,DIR0C)
81: S DX=DIR0F
82: Q
83: ;
84: FDB Q:DIR0C'>1
85: I DX-DIR0C+1<DIR0S S DX=DIR0S X IOXY W $E(DIR0A,1,DIR0L)
86: S DX=DIR0S,DIR0C=1
87: Q
88: ;
89: BS Q:DIR0C'>1
90: S DIR0CHG=1
91: S DIR0C=DIR0C-1,DIR0A=$E(DIR0A,1,DIR0C-1)_$E(DIR0A,DIR0C+1,999)
92: I DX>DIR0S D Q
93: . S DX=DX-1 X IOXY
94: . W $E(DIR0A_$E(DIR0SP),DIR0C,DIR0C+DIR0F-DX-1)
95: N DIX
96: S DIX=DIR0C-(DIR0L\2)
97: S:$L(DIR0A)-DIX+1<DIR0L DIX=$L(DIR0A)-DIR0L+1
98: S:DIX<1 DIX=1
99: W $E(DIR0A,DIX,DIX+DIR0L-1) S DX=DIR0S+DIR0C-DIX
100: Q
101: ;
102: DEL Q:DIR0C>$L(DIR0A)!(DIR0F'>DX)
103: S DIR0CHG=1
104: S DIR0A=$E(DIR0A,1,DIR0C-1)_$E(DIR0A,DIR0C+1,999)
105: W $E(DIR0A_$E(DIR0SP),DIR0C,DIR0C+DIR0F-DX-1)
106: Q
107: ;
108: CLR S DIR0CHG=1
109: S DIR0C=1,DX=DIR0S X IOXY
110: I DIR0A]"",DIR0A'=DIR0D S DIR0SV=DIR0A
111: S DIR0A=$S(DIR0A=DIR0D:DIR0SV,DIR0A="":DIR0D,1:"")
112: W $E(DIR0A,1,DIR0L)_$E(DIR0SP,$L(DIR0A)+1,999)
113: Q
114: ;
115: DEOF S DIR0CHG=1
116: W $E(DIR0SP,DX-DIR0S+1,999)
117: S DIR0A=$E(DIR0A,1,DIR0C-1)
118: Q
119: ;
120: RPM N DX,DY
121: I $D(DDS) S DX=IOM-8,DY=IOSL-1 X IOXY
122: I $G(DIR0("REP")) W:$D(DDS) "Insert " K DIR0("REP")
123: E W:$D(DDS) "Replace" S DIR0("REP")=1
124: Q
125: ;
126: KPM I $G(DDGLKPNM) K DDGLKPNM W $P(DDGLED,DDGLDEL,9)
127: E S DDGLKPNM=1 W $P(DDGLED,DDGLDEL,10)
128: Q
129: ;
130: WRT G WRT^DIR0W
131: WLT G WLT^DIR0W
132: DLW G DLW^DIR0W
133: HLP G ^DIR0H
134: ZM G SM^DIR02
135: ;
136: TO S DTOUT=1,DIR0A=DIR0D
137: UP ;
138: DOWN ;
139: TAB ;
140: FDL ;
141: CR ;
142: NB ;
143: NP ;
144: PP ;
145: SEL ;
146: EX ;
147: QT ;
148: CL ;
149: SV ;
150: RF ;
151: S DIR0QT=1
152: Q
153: NOP W $C(7)
154: Q
155: ;
156: READ(Y) ;Out: Y=char or mnemonic
157: F D Q:Y'=-1
158: . R *Y:DTIME
159: . I Y>31,Y<127 S Y=$C(Y) Q
160: . I Y<0 S Y="TO" Q
161: . D MNE(.Y)
162: I Y'="TO",$D(DIR0KD) D @DIR0KD
163: Q
164: ;
165: PREAD(DIR0LEN,DIR0ST,Y) ;
166: ; Y = Mnem, Null if DIR0LEN chars read or invalid
167: X DDGLZOSF("EON")
168: R DIR0ST#DIR0LEN:DTIME E S Y="TO" Q
169: X DDGLZOSF("EOFF"),DDGLZOSF("TRMRD")
170: I $C(Y)?1C,Y D
171: . D MNE(.Y) S:Y=-1 Y=""
172: E S Y=""
173: Q
174: ;
175: MNE(Y) ;Out: Y=mnemonic, or -1 if invalid
176: N S,F
177: S S="",F=0
178: F D MNELOOP Q:F
179: Q
180: ;
181: MNELOOP ;
182: S S=S_$C(Y)
183: I DIR0(DIR0P_"IN")'[(U_S) D I Y=-1 D FLUSH Q
184: . I $C(Y)'?1L S Y=-1 Q
185: . S S=$E(S,1,$L(S)-1)_$C(Y-32)
186: . S:DIR0(DIR0P_"IN")'[(U_S_U) Y=-1
187: ;
188: I DIR0(DIR0P_"IN")[(U_S_U),S'=$C(27) D
189: . S Y=$P(DIR0(DIR0P_"OUT"),";",$L($P(DIR0(DIR0P_"IN"),U_S_U),U)),F=1
190: E R *Y:5 D:Y=-1 FLUSH
191: Q
192: ;
193: FLUSH N X
194: S F=1 W $C(7) F R *X:0 E Q
195: Q
196: ;
197: MIN(X,Y) ;
198: Q $S(X<Y:X,1:Y)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>