home *** CD-ROM | disk | FTP | other *** search
-
- (*
- * Copyright 1987, 1989 Samuel H. Smith; All rights reserved
- *
- * This is a component of the ProDoor System.
- * Do not distribute modified versions without my permission.
- * Do not remove or alter this notice or any other copyright notice.
- * If you use this in your own program you must distribute source code.
- * Do not use any of this in a commercial product.
- *
- *)
-
- (*
- * popup - utility library for simple "pop-up" windows (3-1-89)
- *
- *)
-
- type
- videoram = array [0..1999] of word;
- videoptr = ^videoram;
-
- window_save_rec = record
- WindMin: word;
- WindMax: word;
- TextAttr: integer;
- CuX: integer;
- CuY: integer;
- Image: videoram;
- end;
-
- var
- { saved_window: window_save_rec; }
- disp_mem: videoptr;
-
-
- procedure setcolor(fg,bg: integer);
- begin
- bg := bg and 7;
- crt.textcolor(fg);
- crt.textbackground(bg);
- end;
-
- function make_string(c: char; len: integer): string;
- {make a string by repeating a character n times}
- var
- i: integer;
- s: string;
- begin
- for i := 1 to len do
- s[i] := c;
- s[0] := chr(len);
- make_string := s;
- end;
-
-
- procedure disp (s: string);
- begin
- write(s);
- end;
-
- procedure displn(s: string); {fast display and linefeed}
- begin
- writeln(s);
- end;
-
-
- procedure window(x1,y1,x2,y2: integer);
- var
- wx,wy: integer;
- begin
- wx := wherex + lo(crt.WindMin); {get absolute cursor location}
- wy := wherey + hi(crt.WindMin);
- crt.window(x1,y1,x2,y2);
- if (x1=1) and (y1=1) then
- crt.gotoxy(wx,wy);
- end;
-
- procedure save_window(var saved: window_save_rec);
- (* save the current window so it can be restored later *)
- begin
- saved.Image := disp_mem^;
- saved.WindMin := crt.WindMin;
- saved.WindMax := crt.WindMax;
- saved.CuX := crt.WhereX;
- saved.CuY := crt.WhereY;
- saved.TextAttr := crt.TextAttr;
- end;
-
- procedure restore_window(saved: window_save_rec);
- (* restore the windowing settings *)
- begin
- disp_mem^ := saved.Image;
- window(lo(saved.WindMin)+1, hi(saved.WindMin)+1,
- lo(saved.WindMax)+1, hi(saved.WindMax)+1);
- crt.GotoXY(saved.CuX,saved.CuY);
- crt.TextColor(lo(saved.TextAttr));
- crt.TextBackground(hi(saved.TextAttr));
- end;
-
-
- procedure init_pop_up;
- {call once before anything else in this library}
- begin
- if crt.LastMode = crt.Mono then
- disp_mem := ptr($B000,0)
- else
- disp_mem := ptr($B800,0);
-
- window(1,1,80,25);
- end;
-
-
-