_STRUCTURED PROGRAMMING COLUMN_ by Jeff Duntemann [LISTING ONE] {--------------------------------------------------------} { } { JXDESK } { } { Jeff's Experimental Desktop Manager for Turbo Vision } { } { by Jeff Duntemann } { For Turbo Pascal V6.0 } { } {--------------------------------------------------------} PROGRAM JDesk; { These are all Turbo Vision units: } USES Objects, Drivers, Views, Menus, Dialogs, App; CONST SysStatCmd = 102; NullCmd = 101; TYPE PDesk = ^TDesk; TDesk = OBJECT(TApplication) PROCEDURE HandleEvent(VAR Event: TEvent); VIRTUAL; PROCEDURE InitMenuBar; VIRTUAL; PROCEDURE InitStatusLine; VIRTUAL; PROCEDURE SystemStatistics; END; VAR Desk: TDesk; { Allocate an instantiation of TDesk } { TDesk method definitions: } PROCEDURE TDesk.HandleEvent(VAR Event: TEvent); BEGIN TApplication.HandleEvent(Event); IF Event.What = evCommand THEN { If the event was a command } BEGIN CASE Event.Command of { The system invokes a method in response to a command: } SysStatCmd : SystemStatistics; ELSE Exit; { Exit the event handler; i.e., do nothing } END; ClearEvent(Event); END; END; PROCEDURE TDesk.SystemStatistics; VAR R: TRect; D: PDialog; C: Word; BEGIN { Create a new dialog: } R.Assign(25, 5, 55, 14); D := New(PDialog,Init(R,'System Stats')); { Create and insert controls into the dialog: } R.Assign(9, 6, 21, 8); D^.Insert(New(PButton,Init(R,'OK',cmCancel,bfNormal))); { Execute the modal dialog: } C := DeskTop^.ExecView(D); END; PROCEDURE TDesk.InitMenuBar; VAR R: TRect; BEGIN GetExtent(R); R.B.Y := R.A.Y+1; MenuBar := New(PMenuBar,Init(R,NewMenu( NewSubMenu('~p~',hcNoContext,NewMenu( NewItem('~A~bout', '',0,NullCmd,hcNoContext, NewItem('How to ~R~egister','',0,NullCmd,hcNoContext, nil))), NewSubMenu('~S~ystem', hcNoContext, NewMenu( NewItem('~S~tatistics', '',0,SysStatCmd,hcNoContext, NewItem('Set ~T~ime', '',0,NullCmd,hcNoContext, NewItem('Set ~D~ate', '',0,NullCmd,hcNoContext, NewItem('~R~un DOS app...','',0,NullCmd,hcNoContext, NewLine( NewItem('E~x~it','Alt-X',kbAltX,cmQuit,hcNoContext, nil))))))), NewSubMenu('Address ~B~ook',hcNoContext,NewMenu( NewItem('~O~pen book', '',0,NullCmd,hcNoContext, NewItem('~C~reate book','',0,NullCmd,hcNoContext, NewItem('~P~rint book', '',0,NullCmd,hcNoContext, nil)))), NewSubMenu('~T~erm',hcNoContext,NewMenu( NewItem('Link to ~M~CI', '',0,NullCmd,hcNoContext, NewItem('Link to ~C~ompuServe','',0,NullCmd,hcNoContext, NewItem('Link to ~B~ix', '',0,NullCmd,hcNoContext, NewItem('~T~erminal window', '',0,NullCmd,hcNoContext, nil))))), nil))))))); END; PROCEDURE TDesk.InitStatusLine; VAR R: TRect; BEGIN GetExtent(R); R.A.Y := R.B.Y-1; StatusLine := New(PStatusLine, Init(R, NewStatusDef(0, $FFFF, NewStatusKey('~Alt-X~ Exit',kbAltX,cmQuit,nil),nil))); END; BEGIN Desk.Init; Desk.Run; Desk.Done; END.