|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7424 (0x1d00)
Types: TextFile
Names: »DIALOGG.PAS«
└─⟦4fbcde1e4⟧ Bits:30003931/GEM_Development-A.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline)
└─⟦this⟧ »DIALOGG.PAS«
(************************************************************************)
(* File: dialog.pas *)
(************************************************************************)
(* *)
(* GGGGG EEEEEEEE MM MM *)
(* GG EE MMMM MMMM *)
(* GG GGG EEEEE MM MM MM *)
(* GG GG EE MM MM *)
(* GGGGG EEEEEEEE MM MM *)
(* *)
(************************************************************************)
(* *)
(* Author: Mogens Rode *)
(* PRODUCT: GEM Dialogbehandling *)
(* Module: DIALOG *)
(* Version: April 1, 1987 *)
(* *)
(************************************************************************)
(*
\f
Page*)
(*------------------------------*)
(* includes *)
(*------------------------------*)
(*$Igempcon.i*)
(*$Igemptype.i*)
(*$Igempvar.i*)
(*$Ivdibnd.pas*)
(*$Igempatyp.i*)
(*$Igempavar.i*)
(*$Iaesbnd.pas*)
(*$Icstring.pas*)
(*------------------------------*)
(* defines *)
(*------------------------------*)
CONST
(*$Idialog.i*)
ARROW= 0;
HOUR_GLASS= 2;
DESK= 0;
END_UPDATE= 0;
BEG_UPDATE= 1;
LONG0:ADDRESS = (lo:0;hi:0);
(*
\f
Page*)
(************************************************************************)
(************************************************************************)
(**** ****)
(**** Data Structures ****)
(**** ****)
(************************************************************************)
(************************************************************************)
TYPE
GRECT = Record
g_x,g_y,g_w,g_h : integer;
End;
VAR
(*------------------------------*)
(* Local *)
(*------------------------------*)
gl_wchar:integer; (* character width *)
gl_hchar:integer; (* character height *)
gl_wbox:integer; (* box (cell) width *)
gl_hbox:integer; (* box (cell) height *)
gem_handle:integer; (* GEM vdi handle *)
vdi_handle:integer; (* hello vdi handle *)
work_out:ARRAY_57; (* open virt workstation values *)
work_area:GRECT; (* current window work area *)
gl_apid:integer; (* application ID *)
gl_rmsg:ARRAY_8; (* message buffer *)
ad_rmsg:ADDRESS; (* LONG pointer to message bfr *)
gl_itemhello:integer; (* hello menu item *)
gl_xfull:integer; (* full window 'x' *)
gl_yfull:integer; (* full window 'y' *)
gl_wfull:integer; (* full window 'w' width *)
gl_hfull:integer; (* full window 'h' height *)
ev_which:integer; (* event message returned value *)
hello_whndl :integer; (* hello window handle *)
type_size:integer; (* system font cell size *)
dummy:integer;
b:boolean;
gl_dialog:ADDRESS; (* dialog adress *)
rsc:CharString;
rsc_file:ADDRESS;
(*------------------------------*)
(* vdi_fix *)
(*------------------------------*)
PROCEDURE vdi_fix(Var pfd:MFDB;theaddr:gempoint;wb,h:integer);
Begin
pfd.widthword:= wb SHR 1;
pfd.formwidth:= wb SHL 3;
pfd.formheight:=h;
pfd.memplanes:=1;
pfd.mptr:=theaddr;
End;
(*------------------------------*)
(* vdi_trans *)
(*------------------------------*)
PROCEDURE vdi_trans(saddr:gempoint;swb:integer;
daddr:gempoint;dwb:integer;h:integer);
Var
src,dst: MFDB;
Begin
vdi_fix(src,saddr,swb,h);
src.formatflag:=1;
vdi_fix(dst,daddr,dwb,h);
dst.formatflag:=0;
dummy:=vr_trn_fm(vdi_handle,src,dst);
end;
(*------------------------------*)
(* LLGET *)
(*------------------------------*)
PROCEDURE LLGET(var addr:gempoint;t:gempoint;l:integer);
Var a:gempoint;
Begin
a.lo:=t.lo+l;
a.hi:=t.hi;
addr.lo:=a.gwp^;
a.lo:=a.lo+2;
addr.hi:=a.gwp^;
End;
(*------------------------------*)
(* trans_gimage *)
(*------------------------------*)
PROCEDURE trans_gimage(tree:address;obj:integer);
Var
a,b,taddr,obspec:gempoint;
wb,hl,typ : integer;
i : integer;
Begin
a.lo:=tree.lo;
a.hi:=tree.hi;
LLGET(obspec,a,24*obj+12);
a.lo:=tree.lo+(24*obj)+6;
a.hi:=tree.hi;
typ:=a.gwp^;
if (typ=31 (*ICON*)) then
begin
LLGET(taddr,obspec,0);
a.lo:=obspec.lo+22;
a.hi:=obspec.hi;
wb:=a.gwp^;
wb:=wb SHR 3;
a.lo:=obspec.lo+24;
a.hi:=obspec.hi;
hl:=a.gwp^;
vdi_trans(taddr,wb,taddr,wb,hl);
LLGET(taddr,obspec,4);
end
else
begin
LLGET(taddr,obspec,0);
a.lo:=obspec.lo+4;
a.hi:=obspec.hi;
wb:=a.gwp^;
a.lo:=obspec.lo+6;
a.hi:=obspec.hi;
hl:=a.gwp^;
end;
vdi_trans(taddr,wb,taddr,wb,hl);
end;
(*------------------------------*)
(* set_flag *)
(*------------------------------*)
PROCEDURE set_flag(tree:address;obj,flag:integer;xset:boolean);
Var
a : address;
Begin
a.lo:=tree.lo+(24*obj)+8;
a.hi:=tree.hi;
if xset then a.gwp^:=a.gwp^ OR flag
else a.gwp^:=a.gwp^ AND (NOT flag);
End;
(*------------------------------*)
(* dial_loop *)
(*------------------------------*)
PROCEDURE dial_loop;
VAR
x,y,w,h : integer;
ix,iy,iw,ih : integer;
unhidden : integer;
xit : integer;
Begin
dummy:=form_center(gl_dialog,x,y,w,h);
ix:=0;
iy:=0;
iw:=0;
ih:=0;
dummy:=form_dial(0,ix,iy,iw,ih,x,y,w,h);
dummy:=objc_draw(gl_dialog,DIALOG,2,x,y,w,h);
repeat
xit:=form_do(gl_dialog,-1);
dummy:=objc_change(gl_dialog,xit,0,x,y,w,h,0,1);
set_flag(gl_dialog,unhidden,$80(*HIDETREE*),TRUE);
case xit of
LILLE : unhidden:=MUS;
MELLEM : unhidden:=KAT;
STOR : unhidden:=ELEFANT;
OTHERWISE
end;
set_flag(gl_dialog,unhidden,$80(*HIDETREE*),FALSE);
dummy:=objc_draw(gl_dialog,DIALOG,2,x,y,w,h);
until xit=SLUT;
dummy:=evnt_timer(2000,0);
dummy:=form_dial(3,ix,iy,iw,ih,x,y,w,h);
end;
(*------------------------------*)
(* aes_init *)
(*------------------------------*)
procedure aes_init;
var i : integer;
work_in : intin_ARRAY;
begin
gl_apid := appl_init; (* initialize libraries *)
for i:=0 TO 9 do
Begin
work_inÆiÅ:=1;
End;
work_inÆ10Å:=0;
gem_handle := graf_handle(gl_wchar,gl_hchar,gl_wbox,gl_hbox);
vdi_handle := gem_handle;
dummy:=v_opnvwk(work_in,vdi_handle,work_out); (* open virtual work stn*)
if gem_handle=0 then
begin
writeln('Kan ikke åbne Workstation');
exit;
end;
if rsrc_load(rsc_file)=0 then
begin
writeln('Kan ikke åbne resource-fil');
end;
dummy:=rsrc_gaddr(0,dialog,gl_dialog);
for i:=mus to elefant do
begin
trans_gimage(gl_dialog,i);
end;
set_flag(gl_dialog,MUS,$80(*HIDETREE*),TRUE);
set_flag(gl_dialog,KAT,$80(*HIDETREE*),TRUE);
set_flag(gl_dialog,ELEFANT,$80(*HIDETREE*),TRUE);
end;
(*------------------------------*)
(* aes_end *)
(*------------------------------*)
procedure aes_end;
begin
dummy:=rsrc_free;
dummy:=v_clsvwk(vdi_handle);
dummy:=appl_exit;
end;
(*------------------------------*)
(* Main *)
(*------------------------------*)
Begin
MakeCString('DIALOG.RSC',rsc);
rsc_file.hi:=seg(rsc);
rsc_file.lo:=ofs(rsc);
aes_init;
dial_loop;
aes_end;
End.