IMPLEMENTATION MODULE Globals; (* Copyright (C) 1988,1989 Jensen & Partners International *) IMPORT Lib, Window, IO, Btree, Str, Misc; VAR LastH, LastM : CARDINAL; PROCEDURE Beep(); BEGIN Lib.Speaker(1500,10); END Beep; PROCEDURE WriteAt( row, col : CARDINAL; txt : ARRAY OF CHAR); BEGIN Window.GotoXY(col,row); IO.WrStr(txt); END WriteAt; PROCEDURE GetMenu ( Prompt : ARRAY OF CHAR; OKChars : CharSet; VAR ch : CHAR); VAR OK : BOOLEAN; oldWin, MenuWin : Window.WinType; i : CARDINAL; BEGIN oldWin := Window.Used(); MenuWin := Window.Open( Window.WinDef( 0, 22, 79, 24, Window.White,Window.Black,TRUE,FALSE,TRUE,TRUE, Window.SingleFrame,Window.White,Window.Black) ); i := Str.Length(Prompt); Window.Change(MenuWin,((80-i) DIV 2) -2,22, ((80-i) DIV 2) + i + 3, 24); Window.SetFrame(MenuWin,Window.SingleFrame,DisplayBorder,Window.Black); Window.Use(MenuWin); Window.PutOnTop(MenuWin); Window.TextColor(DisplayFore); Window.TextBackground(DisplayBack); IO.WrStr(" "); IO.WrStr(Prompt); OK := FALSE; REPEAT REPEAT UpdateTitle(FALSE); UNTIL IO.KeyPressed(); ch := CAP(IO.RdKey()); IF ch IN OKChars THEN OK := TRUE; ELSE Beep(); END; UNTIL OK; Window.Close(MenuWin); Window.Use(oldWin); Window.PutOnTop(oldWin); END GetMenu; PROCEDURE Compare(key1,key2: ADDRESS ): Btree.CmpRes; BEGIN RETURN Btree.CmpRes(Str.Compare(FileKey(key1^),FileKey(key2^))+1); END Compare; PROCEDURE UpdateTitle( All : BOOLEAN ); VAR y, m, d : CARDINAL; dow : Lib.DayType; H, M, S, h : CARDINAL; Am : BOOLEAN; BEGIN oldWin := Window.Used(); Window.Use(TitleWin); Window.CursorOff(); Window.PutOnTop(TitleWin); IF All THEN Lib.GetDate(y, m, d, dow); Window.GotoXY(1,1); IO.WrCard(m,2); IO.WrChar('/'); IO.WrCard(d,2); IO.WrChar('/'); IO.WrCard(y,2); IF StoreName[0] > ' ' THEN h := Str.Length(StoreName); Window.GotoXY((79-h) DIV 2,1); IO.WrStr(StoreName); END; END; Lib.GetTime(H,M,S,h); IF (LastH # H) OR (LastM # M) THEN Window.GotoXY(70,1); IF H<12 THEN Am := TRUE; ELSE Am := FALSE; IF h # 12 THEN H := H - 12; END; END; IO.WrCard(H,2); IO.WrChar(':'); IO.WrCard(M,2); IF Am THEN IO.WrStr(" am"); ELSE IO.WrStr(" pm"); END; IF M<10 THEN Window.GotoXY(73,1); IO.WrChar('0'); END; LastM := M; LastH := H; END; Window.Use(oldWin); Window.CursorOn(); Window.PutOnTop(oldWin); END UpdateTitle; BEGIN (* set up default colors *) DisplayFore := Window.White; DisplayBack := Window.Blue; DataFore := Window.Black; DataBack := Window.Cyan; DisplayBorder := Window.LightRed; PromptFore := Window.Yellow; PromptBack := Window.Brown; TaxRate := 5.0; TitleWin := Window.Open( Window.WinDef( 0, 0, 79, 2, Window.White, Window.Black, TRUE, FALSE, TRUE, TRUE, Window.DoubleFrame, Window.White, Window.Black) ); Window.SetFrame(TitleWin, Window.DoubleFrame, PromptFore, PromptBack); Window.Use(TitleWin); Window.Clear(); DisplayWin := Window.Open( Window.WinDef( 0, 3, 79, 22, Window.White, Window.Black, TRUE, FALSE, TRUE, TRUE, Window.DoubleFrame, Window.White, Window.Black) ); Window.SetFrame(DisplayWin, Window.DoubleFrame, DisplayBorder, DisplayBack); Window.Use(DisplayWin); Window.TextColor(DisplayFore); Window.TextBackground(DisplayBack); Window.Clear(); LastH := 0; LastM := 0; END Globals.