! EDWIN driver for VAX GPX screen. ! ! 002 9-Jan-89 AET Made changes for DRAFT screen refresh and text sizes ! 001 10-May-88 ANY fixed Line Style invalid value bug ! 000 05-May-88 AET modified the way key events are used from Edwin include Device, Specs, Icodes from IMP include Ascii, DSC DEF, Lognames, Maths, AST, processes include UISENTRY,UISUSRDEF,UISMSG external string (31) spec Fname, Version, Release, Revision external byte spec Imp Int Flag alias "IMP___INT_FLAG" external integer spec Font Width alias "CharX" external integer spec Font Height alias "CharY" external integer spec Font Descender alias "OffY" routine swap (integer name A,B) integer C C=A;A=B;B=C end external routine spec User Refresh {Specify your own and it does it too } external routine spec Disable UIS Display List Addition external routine spec Disable UIS KB AST external routine spec Enable UIS KB AST record format List Fm (integer zero,real one,integer two,real three, integer four) own record (List Fm) WinPos const integer MaxCount = 512,No=0,Yes=1 !%const %real Lo = 0.75,Hi=1 ! Imp compiler does not allow you to initialise own real arrays with ! const reals Curse you Ian! own string (255) Title String = "Edwin VAX UIS Window" own string (255) Text Font File, Fill Pattern File own integer array name Edwin Colours own integer array EightCols (0:7) = 0,7,4,1,2,6,3,5 own real array Eight Cols R(0:7) = 0,0,0.75,0.75,0,0,0.75,0.75 own real array Eight Cols G(0:7) = 0,0.75,0,0.75,0,0.75,0,0.75 own real array Eight Cols B(0:7) = 0,0,0,0,0.75,0.75,0.75,0.75 own integer array Sixteen Cols (0:15) = 0,15, 4, 1, 2, 6, 8, 5, 3, 7, 9,10,11,12,13,14 own real array Sixteen Cols R(0:15) = 0,0,0.75,0.75,0,0,0.75,0.75, 0,0,1,1,0,0,1,1 own real array Sixteen Cols G(0:15) = 0,0.75,0,0.75,0,0.75,0,0.75, 0,1,0,1,0,1,0,1 own real array Sixteen Cols B(0:15) = 0,0,0,0,0.75,0.75,0.75,0.75, 0,0,0,0,1,1,1,1 own integer name Integer Blank == 0 own real name Real Blank == 0 own record (DSC FM) name Descriptor Blank == 0 own record(AST FM) name AST Blank == 0 own real Real Zero = 0 own integer Integer Zero=0, VD ID = 0, WD ID, KB ID, Virtual Colour Map, TEXT ATB=1, GRAPH ATB=2, Shade Mode=Patt C Foreground, Current Writing Mode=0, Char Quality=0, Drawing Mode=0, Count=0, Dummy, Colour=1, One=1, Screen Type, Colour Indices, Number of Colours, rbits,gbits,bbits, ibits,res indices,vcm size, hibernating = no, sampling=no, requesting=no, Last Input = 0, Old Sample x = 0, Old Sample y = 0, KB Enabled = No own integer Draft Redraw = 0 own integer name VCM ID own real Screen Width,Screen Height,x1,y1,x2,y2,Char Height,Char Rot=0 own real xtemp,ytemp own real Char Slant = 0,Aspect Ratio,rx1,ry1,rx2,ry2,Char Size=12 own integer Xpix,YPix,Lx,Ly own integer XL = 0 own integer XR = 511 { Right hand side of device window own integer YB = 0 own integer YT = 511 own real VXMax,VYMax,Window Width,Window Height,CX=0,CY=0,resolx,resoly own string(255) Device Name = "SYS$WORKSTATION" own record (DSC FM) Devnam external routine VAX UIS alias "EDWIN___C" (integer COM, X, Y) switch SW(0:Max Com) own real array XPoints (1:MaxCount) own real array YPoints (1:MaxCount) own integer array Shades (1:10) = Patt C Foreground, Patt C Horiz1 3, Patt C Vert1 3, Patt C Downdiag1 3, Patt C Updiag1 3, Patt C Basket Weave, {cross hatch} Patt C Grid4, Patt C Grey1 16, {stipple} Patt C Grid8, {Checker board} Patt C Brick Horiz own integer array Line Style (0:4) = 16_FFFFFFFF, 16_AAAAAAAA, 16_FFCCFFCC, 16_FFF6FFF6, 16_FFF0FFF0 own integer array Colour Modes (0:4) = UIS C MODE REPL, UIS C MODE BICN, UIS C MODE OVER, UIS C MODE COMP, UIS C MODE XOR own string(255) Text String = "" const integer Max Font=28 ownstring(31)array Fonts(0:MaxFont)="", "DTABER0003WK00PG0001UZZZZ02A000", "DTABER0I03WK00GG0001UZZZZ02A000", "DTABER0M03CK00GG0001UZZZZ02A000", "DTABER0R03WK00GG0001UZZZZ02A000", "DTABER0R07SK00GG0001UZZZZ02A000", "DTERMING03CK00PG0001UZZZZ02A000", "DTERMINM06OK00PG0001UZZZZ02A000", "DTABER0003WK00GG0001UZZZZ02A000", "DTABER0G03CK00GG0001UZZZZ02A000", "DTABER0I03WK00PG0001UZZZZ02A000", "DTABER0M06OK00GG0001UZZZZ02A000", "DTABER0R03WK00PG0001UZZZZ02A000", "DTABER0R07SK00PG0001UZZZZ02A000", "DTERMINM03CK00PG0001UZZZZ02A000", "DVWSVT0G03CK00GG0001QZZZZ02A000", "DVWSVT0G03CK00PG0001QZZZZ02A000", "DVWSVT0I03WK00GG0001QZZZZ02A000", "DVWSVT0I03WK00PG0001QZZZZ02A000", "DVWSVT0N03CK00GG0001QZZZZ02A000", "DVWSVT0N03CK00PG0001QZZZZ02A000", "DVWSVT0N06OK00GG0001QZZZZ02A000", "DVWSVT0N06OK00PG0001QZZZZ02A000", "DVWSVT0R03WK00GG0001QZZZZ02A000", "DVWSVT0R03WK00PG0001QZZZZ02A000", "DVWSVT0R07SK00GG0001QZZZZ02A000", "DVWSVT0R07SK00PG0001QZZZZ02A000", "DVWSVT1G03CK00GG0001UZZZZ02A000", "DVWSVT1I03WK00GG0001UZZZZ02A000" own record (DSC FM) Title,Text Font,Shade Patterns,space routine Get Size (string (127) Value, real name Thing, real default) string (127) T Value on 3,4,9 start Oper Message ("Invalid setting for ".Value) signal 14, 1 finish TValue = Translate (Value) Thing = Default and return if TValue = Value Thing = S to I (TValue) / 10 end own integer Retstate,Dummy,Buttonstate, Counter=0, temp x, temp y own record (AST Fm) name Pointer AST,Button AST routine BTN AST (integer Dummy) integer Temp, Font const byte array Button Map (0:3) = 4,1,2,8 const byte array Button State Map (0:15)= 0,0,0,0, 0,0,0,8, 0,0,0,4, 0,1,2,0 if UIS Get Buttons(WD ID, Buttonstate) start Temp = Button Map (Retstate & 2_11) if ButtonstateMap(Buttonstate & 2_1111)= Temp start Last Input = Temp if UIS Get Pointer Position(VD ID,WD ID,xtemp,ytemp) start Old Sample X = Trunc(Xtemp) Old Sample Y = Trunc(Ytemp) finish if sampling = yes or requesting = yes start if Hibernating = Yes then Dummy = Wake(0,"") Hibernating = No Sampling = No Requesting = No finish finish finish end routine PTR AST (integer Dummy) if Sampling = Yes start if UIS Get Pointer Position(VD ID,WD ID,xtemp,ytemp) start Old Sample X = Trunc(Xtemp) Old Sample Y = Trunc(Ytemp) finish if Hibernating = Yes then Dummy = Wake(0,"") Sampling = No Requesting = No Hibernating = No finish end routine FIX ASTS Button AST == New AST 1(BTN AST) UIS Set Button AST(VD ID,WD ID,Button AST,AST Blank,retstate, Real Blank,Real Blank, Real Blank,Real Blank) Pointer AST == New AST 1(PTR AST) UIS Set Pointer AST(VD ID,WD ID,Pointer AST,AST Blank, Real Blank,Real Blank, Real Blank,Real Blank, AST Blank,AST Blank) end routine Resize Window(integer Dummy) real New Aspect Ratio = Window Height/Window Width real New VXMax,New VYMax integer Font if New Aspect Ratio < Aspect Ratio start New VXMax=VYMax/New Aspect Ratio New VYMax=VYMax else New VYMax=VXMax*New Aspect Ratio New VXmax=VXMax finish UIS Resize Window (VD ID,WD ID,Real Blank,Real Blank, Real Blank,Real Blank, Real Zero,Real Zero, New VXmax,New VYMax) VAX UIS (3, 0, 0) { This will re-size the viewport for EDWIN & clear it } { It also restores the AST's if Interrupted start; finish { This makes sure the handler is established } Imp Int Flag = 1 { This forces an interrupt to the user if Trunc(New VXMax) < 523 start Font = 9 Font Width = 6 else Font = 2 Font Width = 8 finish Text Font_Pointer = Addr(Fonts(Font))+1 Text Font_Length = Length(Fonts(Font)) UIS Set Font(VD ID,Text ATB,Text ATB,Text Font) if Fname = "DRAFT" start if Hibernating = Yes start User Refresh else Draft Redraw = 1 finish else User Refresh if Hibernating = Yes then Dummy = Wake(0,"") finish end own record(AST FM) name Thingy routine Do Polygon integer I, Local Count ! The reason for Local Count is that Count may be reset by AST Handler Local Count = Count return if Count <= 2 if Current Writing Mode = Colour Modes(0) or Current Writing Mode = Colour Modes(2) start UIS Line Array (VD ID,Graph ATB,Count,XPoints(1),YPoints(1)) finish for I = 2,2,Local Count cycle XPoints(I//2) = XPoints(I) YPoints(I//2) = YPoints(I) repeat Local Count = Local Count//2 UIS Plot Array (VD ID, Graph ATB, Local Count, XPoints(1), YPoints(1)) Count = 0 end routine Flush Lines return if Count = 0 UIS LINE ARRAY (VD ID,GRAPH ATB,Count,XPoints(1),YPoints(1)) Count = 0 end routine Flush Text real XPos,YPos record(DSC FM) Text if Text String # "" start XPos=CX YPos=CY Text_Pointer=Addr(Text String)+1 Text_Length=Length(Text String) Text_DType = DSC DTYPE T UIS Set Position(VD ID,XPos,YPos) UIS Text (VD ID,Text Atb,Text,Real Blank,Real Blank, Integer Blank,Integer Blank) UIS Get Position(VD ID,XPos,YPos) CX = Trunc(XPos);CY=Trunc(YPos) Text String="" finish end routine CHANGE ATTRIBUTE (integer WHICH, TO) Flush Lines;Flush Text switch AS(0:ATT MAXIMUM) -> AS(WHICH) AS(att colour): Colour=To if Screen Type = UIS C DEV Mono start if Colour > 1 then Colour = 1 else if Colour >= VCM Size start Colour = 1 finish Colour = Edwin Colours (Colour) finish UIS Set Writing Index(VD ID,Graph Atb,Graph Atb,Colour) UIS Set Writing Index(VD ID,Text Atb,Text Atb,Colour) return AS(att line style): To = 0 unless 0 <= To <= 4 UIS Set Line Style (VD ID,Graph Atb,Graph Atb,Line Style(To)) return AS(att char quality): if To > 0 start UIS Set Char Size(VD ID,Text ATB,Text Atb,DescriptorBlank, Char Size,Real Blank) else UIS Set Char Size(VD ID,Text ATB,Text Atb,DescriptorBlank, Real Blank,Real Blank) finish Char Quality = To return AS(att char size): Char Size = To if Char Quality > 0 then start UIS Set Char Size(VD ID,Text ATB,Text Atb,DescriptorBlank, Char Size,Real Blank) finish return AS(att char font): while To > MaxFont cycle To = To - MaxFont repeat Text Font_Pointer = Addr(Fonts(To))+1 Text Font_Length = Length(Fonts(To)) UIS Set Font (VD ID,Text Atb,Text Atb,Text Font) if Char Quality > 0 then start UIS Set Char Size(VD ID,Text ATB,Text Atb,DescriptorBlank, Char Size,Real Blank) finish return AS(att char rot): x1 = To UIS Set Text Slope (VD ID,Text Atb,Text Atb,x1) Char Rot = To/DTOR return AS(att char slant): x1 = To UIS Set Char Slant (VD ID,Text ATB,Text ATB,x1) Char Slant = To/DTOR return AS(att colour mode): if To > 4 then To = 0 To = Colour Modes(To) UIS Set Writing Mode(VD ID,Graph Atb,Graph Atb,To) UIS Set Writing Mode(VD ID,Text Atb,Text Atb,To) Current Writing Mode = To return AS(att shade mode): if To = 0 start UIS Set Fill Pattern(VD ID,Graph Atb,Graph Atb,Integer Blank) return else if To <= 10 Shade Mode = Shades(To) else Shade Mode = To - 10 while Shade Mode >= Patt C Max Pattern cycle Shade Mode = Shade Mode - Patt C Max Pattern repeat finish UIS Set Fill Pattern (VD ID,Graph Atb,Graph Atb,Shade Mode) return AS(*): ! Ignore all other attributes end Counter = counter + 1 if Counter > 100 start Last input = 0 and Imp Int Flag = 1 if Last input = Etx or Last input = Del Counter = 0 finish -> SW(COM) SW(0): ! Initialise if VD ID = 0 start Text Font File = Fonts(2) Fill Pattern File = Translate("UIS$FILL_PATTERNS") Fonts(0) = Text Font File Devnam_Length = Length(Device Name) Devnam_Pointer = Addr(Device Name)+1 Text Font_Length = Length(Text Font File) Text Font_Pointer = Addr(Text Font File) + 1 Shade Patterns_Length = Length(Fill Pattern File) Shade Patterns_Pointer = Addr(Fill Pattern File) + 1 UIS Get Display Size (Devnam,Screen Width,Screen Height, ResolX,ResolY, XPix,Ypix) UIS Get HW Color Info (Devnam,Screen Type,Colour Indices, Number of Colours, Integer Blank, rbits,gbits,bbits, ibits,res indices, integer blank) VCM ID == Virtual Colour Map if Screen Type = UIS C DEV COLOR or Screen Type = UIS C DEV INTENSITY start ! %if Colour Indices - Res Indices < 16 %start VCM SIZE = 8 ! %else ! VCM SIZE = 16 ! %finish VCM ID = UIS CREATE COLOR MAP(VCM SIZE,Descriptor Blank,Integer Blank) else VCM ID == Integer Blank finish Aspect Ratio = SQRT(2)/2 Window Width = Screen Width Window Height = Screen Height VXMax=Resolx * Window Width VYMax=ResolY * Window Height Get Size ("EDWIN_UIS_LEFT", winpos_one, -1) Get Size ("EDWIN_UIS_BOTTOM", winpos_three, -1) Get Size ("EDWIN_UIS_WIDTH", Window Width, Window Width) Get Size ("EDWIN_UIS_HEIGHT", Window Height, Window Height) Title String = Fname." ".Version.".".Release Title String = Title String.".".Revision unless Revision = "0" Title_Length = Length(Title String) Title_Pointer = Addr(Title String)+1 Winpos_zero = WDPL C ABS POS X WINPOS_two = WDPL C ABS POS Y Winpos_four = WDPL C END OF LIST if winpos_one = -1 or winpos_three = -1 then Winpos_zero = WDPL C END OF LIST VD ID = UIS Create Display (Real Zero,Real Zero,VX Max,VY Max, Window Width,Window Height,VCM ID) WD ID = UIS Create Window (VD ID,Devnam,Title, Real Blank,Real Blank, Real Blank,Real Blank, Real Blank,Real Blank, Winpos_Zero) else UIS Expand Icon (WD ID, Integer Blank, Integer Blank) finish FIX ASTS if Screen Type = UIS C DEV COLOR or Screen Type = UIS C DEV INTENSITY start ! Changed to use only 8 colours to match intensities of SCRDRIVE ! %if Colour Indices - Res Indices < 16 %start Edwin Colours == EightCols Uis Set Colors (VD ID,Integer Zero,VCM Size, Eight Cols R (0), Eight Cols G (0), Eight Cols B (0)) Dev data_max Colour = 7 ! %else ! Edwin Colours == Sixteen Cols ! Uis Set Colors (VD ID,Integer Zero,VCM Size, ! Sixteen Cols R (0), Sixteen Cols G (0), Sixteen Cols B (0)) ! %finish finish UIS Get Viewport Size (WD ID,Window Width,Window Height) Aspect Ratio = Window Height / Window Width VX Max = ResolX * Window Width VY Max = ResolY * Window Height UIS Move Window (VD ID,WD ID,Real Zero,Real Zero,VX Max,VY Max) dev data_Mvx = Trunc(VX Max) dev data_Mvy = Trunc(VY Max) dev data_dvy = dev data_Mvy dev data_dvx = dev data_Mvy dev data_name = "a VAX UIS Graphics Window" Disable UIS Display List Addition UIS Set Font(VD ID,Integer Zero,Graph ATB,Shade Patterns) UIS Set Fill Pattern(VD ID,Graph ATB,Graph ATB,Shade Mode) UIS Set Font(VD ID,Integer Zero,Text ATB,Text Font) UIS Set Char Size(VD ID,Text ATB,Text Atb,Descriptor Blank,Real Blank, Real Blank) Thingy == New AST 1 (Resize Window) UIS Set Resize Ast(VD ID,WD ID,Thingy,AST Blank,Real Blank,Real Blank, Window Width,Window Height, Real Blank,real Blank, Real Blank,Real Blank) if fname = "DRAFT" start Font Width = 8 Font Height = 16 Font Descender = 4 ! enable keypad input ttput (27) ttput ('=') Flush Output Enable UIS KB AST finish Count = 0 Text String="" return SW(1): !Terminate Flush Lines Flush Text Disable UIS KB AST if fname = "DRAFT" start ! Disable keypad input ttput (27) ttput ('>') flush output finish !! UIS Delete Display (VD ID) UIS Shrink to Icon (WD ID, Integer Blank, Integer Blank, Integer Blank, Integer Blank) return SW(2): ! Update Flush Lines;Flush Text return SW(3): ! New frame Count = 0 Text String="" UIS Erase (VD ID,Real Blank,Real Blank,Real Blank,Real Blank) Fix ASTs UIS Get ViewPort Size (WD ID,Window Width,Window Height) Aspect Ratio = Window Height/Window Width VX Max = Resolx * Window Width VY Max = ResolY * Window Height Dev Data_Mvy = Trunc(VY Max) Dev Data_Mvx = Trunc(VX Max) UIS Move Window (VD ID,WD ID, Real Zero,Real Zero, VX Max,VY Max) Viewport (0,Dev Data_Mvx,0,Dev Data_Mvy) return SW(4): ! Move Abs Flush Text CX = X;CY = Y return SW(5): ! Line Abs Count = Count + 1 XPoints(Count) = CX;YPoints(Count) = CY CX = X;CY = Y Count = Count+1 Xpoints(Count) = CX;YPoints(Count) = CY if Count = MaxCount start if Drawing Mode=3 start Do Polygon else Flush Lines finish finish return SW(6): ! Character Text String = Text String.X return SW(7): ! Attribute Change Change Attribute(X,Y) return SW(8): ! Lower window bounds XL = X; YB = Y return SW(9): ! Upper window bounds XR = X; YT = Y return SW(10): ! Drawing Mode if Drawing Mode = 3 start Do Polygon else Flush Lines; Flush Text finish Drawing Mode=X return SW(11): ! Was overwrite mode return SW(12): ! Lower box bounds LX = X;LY = Y return SW(13): ! Upper box bounds Flush Lines;Flush Text if LX > X then Swap(X,LX) if LY > Y then Swap(Y,LY) if LX > XR or LY > YT or X < XL or Y < YB then return if LX < XL then LX = XL if LY < YB then LY = YB if X > XR then X = XR if Y > YT then Y = YT X1 = LX;X2=X;Y1=LY;Y2=Y UIS Plot (VD ID,Graph Atb,X1,Y1,X2,Y1,X2,Y2,X1,Y2) if Current Writing Mode = Colour Modes(0) or Current Writing Mode = Colour Modes(2) start UIS Line (VD ID,Graph Atb, X1,Y1,X2,Y1, X2,Y1,X2,Y2, X2,Y2,X1,Y2, X1,Y2,X1,Y1) finish return SW(*): end external routine Sample alias "EDWIN___C_SAM" (integer name CH, X, Y) if Draft Redraw # 0 start User Refresh Draft Redraw = 0 finish VAX UIS(2,0,0) if Last Input = 0 start Sampling = Yes Hibernating = Yes Hiber finish x = Old Sample X y = Old Sample Y CH = Last Input Last Input = 0 end external routine R REQ alias "EDWIN___C_REQ" (integer name CH, X, Y) if Draft Redraw # 0 start User Refresh Draft Redraw = 0 finish VAX UIS(2,0,0) if Last Input = 0 start Requesting = Yes Hibernating = Yes Hiber finish x = Old Sample X y = Old Sample Y CH = Last Input Last Input = 0 end external integer fn Screen TTget alias "EDWIN_SCREEN_TTGET" integer CH if Draft Redraw # 0 start User Refresh Draft Redraw = 0 finish VAX UIS(2,0,0) if KB Enabled = No start result = TTGET else if Last Input = 0 start Hibernating = Yes Hiber finish CH = Last Input Last Input = 0 result = CH finish end !%external %routine draw dots %alias "EDWIN_DRAW_DOTS" ( - ! %integer lx,ly,hx,hy,gap) ! %integer Dummy,temp1,temp2,cx=lx,vlx=lx,vly=ly,vhx=hx,vhy=hy ! Map To Device Coords(lx,ly) ! Map To Device Coords(hx,hy) !! Draw vertical lines in black ! Vax UIS(7,9,0) ! Vax UIS(7,0,1) {overwrite black} ! %own %real rcx,rlx,rly,rhx,rhy,rgap ! rcx=lx;rlx=lx;rly=ly;rhx=hx;rhy=hy;rgap=gap ! %own %integer count ! count = ((vhx-vlx)//gap + 1)*2 ! %if Count<2 %then Count = 2 ! %begin ! %integer I ! %own %real %array xpoints (1:2048) ! %own %real %array ypoints (1:2048) ! %for I = 1,2,Count-1 %cycle ! ypoints(I)=rly ! ypoints(I+1)=rhy ! %repeat ! I = 1 ! %while I < Count %cycle ! Temp1=cx ! Dummy=0 ! Map To Device Coords(Temp1,Dummy) ! xpoints(I)=Temp1 ! I = I + 1 ! xpoints(I)=Temp1 ! I = I + 1 ! cx = cx + gap ! %repeat ! UIS Line Array (VD ID,Graph Atb,Count,xpoints(1),ypoints(1)) ! %end !! Draw white horizontal boxes ! %own %integer cy ! %own %real rcy,x1,x2,y1,y2 ! cy=vly ! Vax UIS(7,10,1) {filled box} ! Vax UIS(7,0,0) {white or blank} ! x1=rlx ! x2=rhx ! %while cy < vhy %cycle ! Temp1=cy ! Dummy=0 ! Map To Device Coords(dummy,Temp1) ! y1=Temp1+1 ! Temp1=cy+gap ! Dummy=0 ! Map To Device Coords(dummy,Temp1) ! y2=Temp1-1 ! %if y2 > rhy %then y2=rhy ! UIS Plot(VD ID,Graph Atb,x1,y1,x1,y2,x2,y2,x2,y1) ! cy = cy + gap ! %repeat ! VAX UIS(7,0,1) {black} !%end ! !%external %routine set uis title (%string(255) Title) ! Title String = Title !%end external routine Begin UIS Segment (integer name SEG ID) SEG ID = UIS Begin Segment(VD ID) end external routine End UIS Segment VAX UIS(2,0,0) {update} UIS End Segment(VD ID) end external routine Delete UIS Segment(integer SEG ID) own integer Flags=UIS M DL UPDATE WINDOW UIS Disable Display List(VD ID,Flags) UIS Delete Object(SEG ID) UIS Enable Display List(VD ID,Flags) end external routine Enable UIS KB AST own integer Keybuf record (AST FM) name Key AST routine KB AST (integer Dummy) integer Thing Thing=Keybuf & 16_FFFF Last Input = Thing if Hibernating = Yes then Dummy = Wake(0,"") Hibernating = No Requesting = No Sampling = No end return if KB Enabled=Yes KB Enabled = Yes KB ID = UIS Create KB(devnam) uis enable kb(kb id,wd id) Key AST == New AST 1(KB AST) UIS Set KB AST(KB ID,Key AST,AST Blank,keybuf) end external routine Disable UIS KB AST return if KB Enabled=No KB Enabled=No UIS Set KB AST(KB ID,AST Blank,AST Blank,Integer Blank) UIS Delete KB(KB ID) end external routine Disable UIS Display List Addition own integer Flags = UIS M DL ENHANCE LIST UIS Disable Display List(VD ID,Flags) end external routine Enable UIS Display List Addition own integer Flags = UIS M DL ENHANCE LIST UIS Enable Display List(VD ID,Flags) end end of file