DRAW ; Frame Drawing Routines ShowCurs(Value) Q SetCurs(X,Y) ;S FP=(Y*100)+X W @F W @("*27,""["",Y,"";"",X,""f""") S $X=$ZABS(X),$Y=$ZABS(Y) Q SetNorm D SetColor() D SetHigh(0),SetInv(0),SetBlink(0) Q SetInv(Value) I +$G(Value)=1 W @FMTI E W @FMTi Q SetHigh(Value) I +$G(Value)=1 W @($TR(F92," ","")) E W @($TR(F93," ","")) Q SetBlink(Value) I +$G(Value)=1 W @("*27,""[5m""") E W @("*27,""[25m""") Q SetColor(FG,BG) S FG=+$G(FG,39),BG=+$G(BG,49) I (FG<30)!(FG>37) S FG=39 I (BG<40)!(BG>47) S BG=49 W @("*27,""[""_FG_"";""_BG_""m""") Q ; display a test pattern Test W @("*27,""#8""") Q ; set to small screen SmallScr W @("*27,""[80$|"",*27,""[24t""") W @("*27,""[0;0r""") D ClrScr Q ; set to wide screen WideScr W @("*27,""[132$|"",*27,""[48t""") W @("*27,""[0;0r""") D ClrScr Q ; set screen to SetScreen(Width,Height) W @("*27,""["_Width_"$|"",*27,""["_Height_"t""") W @("*27,""[0;0r""") D ClrScr Q ; prepare page SetPage(PageNr) D InitPage(PageNr) Q InitPage(PageNr) W @("*27,""[1;1;48;132;1;1;1;"_PageNr_"$v""") W @("*27,""["_PageNr_" P""") ; move forwards to page Q ; release memory block, return to page 1 ResetPage D ReleasePage Q ReleasePage W @("*27,""[1 P""") ; return to page 1 Q ClrEOL(XPos,YPos) D SetCurs(XPos,YPos) W @F2 Q ClrLine(XMin,XMax,YPos) N Txt S $P(Txt," ",XMax-XMin+1)=" " D SetCurs(XMin,YPos) W Txt Q ClrScr W @($TR(F5," ","")),@($TR(F93," ","")),@F11,@F1 S ($X,$Y)=0 ; patch V1.5 Q ClrWin(XMin,YMin,XMax,YMax) N LineCtr,Width,Txt ; define background char if not yet done I '($D(WinBgCh)#10) D .S WinBgCh=" " .Q I $L(WinBgCh)>1 S WinBgCh=$E(WinBgCh) S Width=XMax-XMin ; compute width and text line S $P(Txt,WinBgCh,Width+1)=WinBgCh F LineCtr=YMin:1:YMax D .D SetCurs(XMin,LineCtr) .W Txt .Q Q LftJunc(X,Y) D SetCurs(X,Y) W @F7,@$P(FG,D,7),@F8 Q RgthJunc(X,Y) D SetCurs(X,Y) W @F7,@$P(FG,D,6),@F8 Q HorizLn(XMin,XMax,YPos) N Ctr D SetCurs(XMin,YPos) W @F7 ; ga naar positie, enter grafische mode F Ctr=XMin:1:XMax D .W @$P(FG,D,9) ; draw horizontal line W @F8 ; quit grafische mode Q HorShLn(XMin,XMax,YPos) N Ctr D SetCurs(XMin,YPos) W @F7 ; ga naar positie F Ctr=XMin+1:1:XMax+1 D .W $C(142,223) ; draw horizontal line W @F8 Q VertLn(YMin,YMax,XPos) N Ctr W @F7 ; enter grafische mode D SetCurs(XPos,YMin) F Ctr=YMin:1:YMax D .W @$P(FG,D,10) ; draw vertical line .D SetCurs(XPos,Ctr) .Q W @F8 ; quit grafische mode Q VerShLn(YMin,YMax,XPos) N Ctr W @F7 D SetCurs(XPos,YMin) F Ctr=YMin+1:1:YMax D .W $C(142,219) ; draw vertical line .D SetCurs(XPos,Ctr) W @F8 Q TopLn(XMin,XMax,YPos) D SetCurs(XMin,YPos) W @F7,@$P(FG,D,1) ; draw upper left char D HorizLn(XMin+1,XMax-1,YPos) ; draw horizontal line W @F7,@$P(FG,D,2) ; draw upper right char W @F8 ; quit grafische mode Q HCtrLn(XMin,XMax,YPos) D SetCurs(XMin,YPos) W @F7,@$P(FG,D,7) ; draw center left char D HorizLn(XMin+1,XMax-1,YPos) ; draw horizontal line W @F7,@$P(FG,D,6) ; draw center right char W @F8 ; quit grafische mode Q VCtrLn(YMin,YMax,XPos) D SetCurs(XPos,YMin) W @F7,@$P(FG,D,5) ; draw center top char D VertLn(YMin+1,YMax,XPos) ; draw vertical line D SetCurs(XPos,YMax) W @F7,@$P(FG,D,8) ; draw center bottom char W @F8 ; quit grafische mode Q BtmLn(XMin,XMax,YPos) D SetCurs(XMin,YPos) W @F7,@$P(FG,D,3) ; draw lower left char D HorizLn(XMin+1,XMax-1,YPos) ; draw horizontal line W @F7,@$P(FG,D,4) ; draw lower right char W @F8 ; quit grafische mode Q TopTabLn(XMin,XMax,YPos,Tabs) N TabCtr D TopLn(XMin,XMax,YPos) ; draw topline W @F7 ; enter grafische mode ; for all defined tabs I $D(Tabs),$L(Tabs) F TabCtr=1:1:($$TabCnt^UTLBIB(Tabs,"^")) D .D SetCurs(XMin+$P(Tabs,"^",TabCtr),YPos) .W @$P(FG,D,5) ; draw toptab char .Q W @F8 ; quit grafische mode Q HCtrTbLn(XMin,XMax,YPos,Tabs) N TabCtr D HCtrLn(XMin,XMax,YPos) ; draw centered line W @F7 ; enter grafische mode ; for all defined tabs I $D(Tabs),$L(Tabs) F TabCtr=1:1:($$TabCnt^UTLBIB(Tabs,"^")) D .D SetCurs(XMin+$P(Tabs,"^",TabCtr),YPos) .W @$P(FG,D,11) ; draw center cross char .Q W @F8 ; quit grafische mode Q VCtrTbLn(YMin,YMax,XPos,Tabs) N TabCtr D VCtrLn(YMin,YMax,XPos) ; draw centered line W @F7 ; enter grafische mode ; for all defined tabs I $D(Tabs),$L(Tabs) F TabCtr=1:1:($$TabCnt^UTLBIB(Tabs,"^")) D .D SetCurs(XPos,YMin+$P(Tabs,"^",TabCtr)) .W @$P(FG,D,11) ; draw center cross char .Q W @F8 ; quit grafische mode Q BtmTabLn(XMin,XMax,YPos,Tabs) N TabCtr D BtmLn(XMin,XMax,YPos) ; draw bottom line W @F7 ; enter grafische mode ; for all defined tabs I $D(Tabs),$L(Tabs) F TabCtr=1:1:($$TabCnt^UTLBIB(Tabs,"^")) D .D SetCurs(XMin+$P(Tabs,"^",TabCtr),YPos) .W @$P(FG,D,8) ; draw bottom tab char .Q W @F8 ; quit grafische mode Q Window(XMin,YMin,XMax,YMax,ClrBg) ; clear background I +$G(ClrBg)=1 D ClrWin(XMin,YMin,XMax,YMax) D TopLn(XMin,XMax,YMin) ; draw top line D VertLn(YMin+1,YMax,XMin) ; draw left vertical line D VertLn(YMin+1,YMax,XMax) ; draw right vertical line D BtmLn(XMin,XMax,YMax) ; draw bottom line Q ShWindow(XMin,YMin,XMax,YMax,ClrBg) ; draw window D Window(XMin,YMin,XMax,YMax,+$G(ClrBg)) D HorShLn(XMin+1,XMax+1,YMax+1) D VerShLn(YMin+1,YMax+1,XMax+1) Q HSWindow(XMin,YMin,XMax,YMax,VTabs,ClrBg) N TabCtr D Window(XMin,YMin,XMax,YMax,+$G(ClrBg)) ; for all defined tabs I $D(VTabs),$L(VTabs) F TabCtr=1:1:($$TabCnt^UTLBIB(VTabs,"^")) D .D HCtrLn(XMin,XMax,YMin+$P(VTabs,"^",TabCtr)) .Q Q VSWindow(XMin,YMin,XMax,YMax,HTabs,ClrBg) N TabCtr D Window(XMin,YMin,XMax,YMax,+$G(ClrBg)) ; for all defined tabs I $D(HTabs),$L(HTabs) F TabCtr=1:1:($$TabCnt^UTLBIB(HTabs,"^")) D .D VCtrLn(YMin,YMax,XMin+$P(HTabs,"^",TabCtr)) .Q Q VHSWin(XMin,YMin,XMax,YMax,HTabs,VTabs,ClrBg) N RelVPos,TmpVTabs,VTabCtr,HTabCtr ; draw horizontal split window D HSWindow(XMin,YMin,XMax,YMax,VTabs,+$G(ClrBg)) ; if any vertical tabs are defined, draw vertical lines starting ; from first vertical tab, not from the top of the list I ($$TabCnt^UTLBIB(VTabs,"^")>0) D .S RelVPos=$P(VTabs,"^",1) ; get first vertical tab .Q ; if more then 1 vertical tab, recalc tab positions ; the vertical lines will start from the first vertical tab I ($$TabCnt^UTLBIB(VTabs,"^")>1) D .F VTabCtr=2:1:($$TabCnt^UTLBIB(VTabs,"^")) D ..S $P(TmpVTabs,"^",VTabCtr-1)=$P(VTabs,"^",VTabCtr)-RelVPos .Q ; draw all vertical lines from first horizontal tab, if any, ; till the bottom I ($$TabCnt^UTLBIB(HTabs,"^")>0) D .F HTabCtr=1:1:($$TabCnt^UTLBIB(HTabs,"^")) D ..I ($$TabCnt^UTLBIB(VTabs,"^"))>1 D ...D VCtrTbLn(YMin+RelVPos,YMax,XMin+$P(HTabs,"^",HTabCtr),TmpVTabs) ...Q ..I ($$TabCnt^UTLBIB(VTabs,"^"))=1 D ...D VCtrLn(YMin+RelVPos,YMax,XMin+$P(HTabs,"^",HTabCtr)) ...Q .Q Q HVSWin(XMin,YMin,XMax,YMax,HTabs,VTabs,ClrBg) N RelHPos,TmpHTabs,HTabCtr,VTabCtr ; draw vertical split window D VSWindow(XMin,YMin,XMax,YMax,HTabs,+$G(ClrBg)) ; if any horizontal tabs are defined, draw Horizontal lines starting ; from first horizontal tab, not from the outerleft side of the list I ($$TabCnt^UTLBIB(HTabs,"^")>0) D .S RelHPos=$P(HTabs,"^",1) ; get first horizontal tab .Q ; if more then 1 horizontal tab, recalc tab positions ; the horizontal lines will start from the first horizontal tab I ($$TabCnt^UTLBIB(HTabs,"^")>1) D .F HTabCtr=2:1:($$TabCnt^UTLBIB(HTabs,"^")) D ..S $P(TmpHTabs,"^",HTabCtr-1)=$P(HTabs,"^",HTabCtr)-RelHPos .Q ; draw all horizontal lines from first vertical tab, if any, ; till the right side I ($$TabCnt^UTLBIB(VTabs,"^")>0) D .F VTabCtr=1:1:($$TabCnt^UTLBIB(VTabs,"^")) D ..I ($$TabCnt^UTLBIB(HTabs,"^"))>1 D ...D HCtrTbLn(XMin+RelHPos,XMax,YMin+$P(VTabs,"^",VTabCtr),TmpHTabs) ...Q ..I ($$TabCnt^UTLBIB(HTabs,"^"))=1 D ...D HCtrLn(XMin+RelHPos,XMax,YMin+$P(VTabs,"^",VTabCtr)) ...Q .Q Q GridWin(XMin,YMin,XMax,YMax,HTabs,VTabs,ClrBg) N VTabCtr ; draw grid window D VSWindow(XMin,YMin,XMax,YMax,HTabs,+$G(ClrBg)) ; draw all horizontal lines I ($$TabCnt^UTLBIB(VTabs,"^")>0) D .F VTabCtr=1:1:($$TabCnt^UTLBIB(VTabs,"^")) D ..I ($$TabCnt^UTLBIB(HTabs,"^"))>1 D ...D HCtrTbLn(XMin,XMax,YMin+$P(VTabs,"^",VTabCtr),HTabs) ...Q ..I ($$TabCnt^UTLBIB(HTabs,"^"))=1 D ...D HCtrLn(XMin,XMax,YMin+$P(VTabs,"^",VTabCtr)) ...Q .Q Q ;verwijdert een regel op ypos en onderste regels schuiven naar boven. DeleteLine(ypos) D SetCurs(1,ypos) W *27,"[1M" Q ;voegt een blanco lijn in op ypos en onderste regels schuiven naar beneden InsertLine(ypos) D SetCurs(1,ypos) W *27,"[1L" Q