home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
037.lha
/
DU
/
MyWindow.mod
< prev
next >
Wrap
Text File
|
1987-05-16
|
11KB
|
399 lines
IMPLEMENTATION MODULE MyWindow;
(*$S-*)(*$T-*)(*$A+*)
(*
PART OF Windowed Development program for Modula 2
This creates, opens and maintains the DirUtil window.
It contains a couple of other importable routines for
user alterations.
Written: 3/21/87 by Greg Browne
Compiles on TDI's Modula-2 Compiler version 2.20a
*)
FROM SYSTEM IMPORT ADR, BYTE, ADDRESS, NULL,TSIZE,CODE;
FROM Intuition IMPORT PropInfo,IntuitionName,IntuitionBase,
WindowFlags,WindowPtr,NewWindow,Border,
IDCMPFlags,IDCMPFlagSet,WindowFlagSet,
WBenchScreen,SmartRefresh,ScreenFlagSet,
Image,SimpleRefresh;
FROM GraphicsLibrary IMPORT GraphicsName, GraphicsBase,Jam1;
FROM Libraries IMPORT OpenLibrary,CloseLibrary;
FROM Windows IMPORT OpenWindow,CloseWindow;
FROM Gadgets IMPORT HighNone,HighComplement,
ModifyProp,BoolGadget,PropGadget,StrGadget;
(*--------------------------------------------------------------------*)
(* ALL CONSTANTS AND MOST VARIABLES/TYPES DEFINED IN MyGlobals.def FILE
FOR IMPORTATION
*)
FROM MyGlobals IMPORT StringBufSize,RegFlags,StringFlags,SliderFlags,
WBColors,GadgetNames,IOStringInfo,MyWindowPtr,
IOString,GadTxt,MyGads,NullReqPtr;
(* REALLY Defined in MyGlobals.def
GadgetNames = (df0,df1,df2,dh0,dh1,ram,vd0,
up1,down1,
filewindow,
arc,bytes,copy,copydel,deldir,delete,
dofr,dorf,edit,hprint,htype,info,link,makedir,
modula,move,parent,print,rename,
retag,root,show,stod,swap,tagall,type,untag,
slider,
brun,bsource,bdest, (* relative order of these six *)
run,source,dest, (* IS IMPORTANT *)
msg);
*)
TYPE
BorderTypes = (filewind,rsd,device,command,message);
VAR
SlideImage : Image;
Borders : ARRAY BorderTypes OF Border;
SlideInfo : PropInfo;
(* ---------------------------*)
(* INTERNAL ONLY PROCEDURES *)
(* ---------------------------*)
PROCEDURE InitWindow(VAR text:ARRAY OF CHAR;FirstGad:ADDRESS):WindowPtr;
VAR w : NewWindow;
BEGIN
WITH w DO
LeftEdge := 0; TopEdge := 0;
Width := 558; Height := 132;
DetailPen := BYTE (ORD(Blue)); BlockPen := BYTE (ORD(White));
Title := ADR(text);
Flags := WindowFlagSet{WindowSizing,WindowDepth,WindowDrag,RMBTrap,
Activate,WindowClose} + SmartRefresh;
IDCMPFlags := IDCMPFlagSet{CloseWindowFlag,MouseButtons,GadgetUp,
ResfreshWindow};
Type := ScreenFlagSet{WBenchScreen};
CheckMark := NULL;
FirstGadget := FirstGad;
Screen := NULL; BitMap := NULL;
MinWidth := 80; MinHeight := 40;
MaxWidth := 558; MaxHeight := 132;
END;
RETURN OpenWindow(w)
END InitWindow;
(* ---------------------------*)
(* Entry/exit code off to create "static" border structures with CODE *)
(* This method saves size since I am keeping it under 32767 for $A+ *)
(* ---------------------------*)
(*$P-*)
PROCEDURE CBorder;
BEGIN
CODE(0FFFFH,0FFFFH,61,0FFFFH,61,9,0FFFFH,9,0FFFFH,0FFFFH);
END CBorder;
(*$P-*)
PROCEDURE DBorder;
BEGIN
CODE(0FFFFH,0FFFFH,39,0FFFFH,39,9,0FFFFH,9,0FFFFH,0FFFFH);
END DBorder;
(*$P-*)
PROCEDURE MBorder;
BEGIN
CODE(0FFFEH,0FFFEH,277,0FFFEH,277,0FFF4H,277,0FFFEH);
CODE(512,0FFFEH,512,8,0FFFEH,8,0FFFEH,0FFFEH);
END MBorder;
(*$P-*)
PROCEDURE RBorder;
BEGIN
CODE(0FFFEH,0FFFEH,232,0FFFEH,232,8,0FFFEH,8,0FFFEH,0FFFEH);
END RBorder;
(*$P-*)
PROCEDURE FBorder;
BEGIN
CODE(0FFFFH,0FFFFH,307,0FFFFH,283,0FFFFH,283,97,0FFFFH,97,0FFFFH,0FFFFH);
END FBorder;
(*$P+*)
(* ---------------------------*)
PROCEDURE SetIText(it :GadgetNames;
VAR text :ARRAY OF CHAR;
Left :INTEGER);
BEGIN
WITH GadTxt[it] DO
FrontPen := BYTE(ORD(White));
BackPen := BYTE(ORD(Blue));
DrawMode := BYTE(Jam1);
LeftEdge := Left; TopEdge := 1;
ITextFont := NULL; IText := ADR(text);
NextText := NULL;
END;
END SetIText;
(* ---------------------------*)
PROCEDURE OneGadget(gadg:GadgetNames; L,T,W,H:INTEGER;
textptr:ADDRESS; Bdr:ADDRESS;
spinfoptr:ADDRESS; GadType:CARDINAL);
BEGIN
WITH MyGads[gadg] DO
NextGadget := NULL;
LeftEdge := L; TopEdge := T;
Width := W; Height := H;
Flags := HighComplement; Activation := RegFlags;
GadgetType := GadType; GadgetRender := Bdr;
SelectRender := NULL; GadgetText := textptr;
MutualExclude := 0; SpecialInfo := spinfoptr;
GadgetID := CARDINAL(ORD(gadg));
UserData := NULL;
END
END OneGadget;
(* ---------------------------*)
PROCEDURE InitGadgets():ADDRESS;
(*
Procedure to initialize all the gadgets and related structures
internal to the module only
*)
VAR i,m:GadgetNames; j,k: CARDINAL;
BEGIN
WITH Borders[command] DO (* Point to the borders *)
LeftEdge := 0; TopEdge := 0; (* And define color/type *)
FrontPen := BYTE(ORD(White)); BackPen := BYTE(ORD(Blue));
DrawMode := BYTE(Jam1); Count := BYTE(5);
XY := ADDRESS(CBorder); NextBorder := NULL
END;
Borders[device] := Borders[command]; (* all same except sizes *)
Borders[device].XY := ADDRESS(DBorder);
Borders[message] := Borders[command];
Borders[message].XY := ADDRESS(MBorder);
Borders[message].Count := BYTE(8);
Borders[rsd] := Borders[command];
Borders[rsd].XY := ADDRESS(RBorder);
Borders[filewind] := Borders[command];
Borders[filewind].XY := ADDRESS(FBorder);
Borders[filewind].Count := BYTE(6);
(* This section sets up the gadget text and colors/rendering *)
SetIText(df0, "df0:",4);
SetIText(df1, "df1:",4);
SetIText(df2, "df2:",4);
SetIText(dh0, "dh0:",4);
SetIText(dh1, "dh1:",4);
SetIText(ram, "ram:",4);
SetIText(vd0, "vd0:",4);
SetIText(up1, "+",5);
SetIText(down1,"-",5);
SetIText(run, "R", -14);
SetIText(source, "S", -14);
SetIText(dest, "D", -14);
SetIText(msg, "M", -14);
SetIText(filewindow,"", 0);
SetIText(arc, "ARC", 18);
SetIText(bytes, "BYTES", 10);
SetIText(copy, "COPY", 14);
SetIText(copydel,"CPYDEL", 6);
SetIText(deldir, "DELDIR", 6);
SetIText(delete, "DELETE", 6);
SetIText(dofr, "DO f+R", 6);
SetIText(dorf, "DO R+f", 6);
SetIText(edit, "EDIT", 14);
SetIText(hprint, "HPRINT", 6);
SetIText(htype, "HTYPE", 10);
SetIText(info, "INFO", 14);
SetIText(link, "LINK", 14);
SetIText(makedir,"MAKDIR", 6);
SetIText(modula, "MODULA", 6);
SetIText(move, "MOVE", 14);
SetIText(parent, "PARENT", 6);
SetIText(print, "PRINT", 10);
SetIText(rename, "RENAME", 6);
SetIText(retag, "RETAG", 10);
SetIText(root, "ROOT", 14);
SetIText(show, "SHOW", 14);
SetIText(stod, "S->D", 14);
SetIText(swap, "SWAP", 14);
SetIText(tagall, "TAGALL", 6);
SetIText(type, "TYPE", 14);
SetIText(untag, "UNTAG", 10);
WITH SlideInfo DO (* Define the slider information *)
Flags := SliderFlags;
VertPot := 8000H;
VertBody := 0FFFFH;
END;
FOR i := run TO msg DO (* Setup and null all IOStringInfos *)
GadTxt[i].FrontPen := BYTE(ORD(Green));
GadTxt[i].TopEdge := 0;
IOString[i] := "";
WITH IOStringInfo[i] DO
Buffer := ADR(IOString[i]); UndoBuffer := NULL;
BufferPos := 0; MaxChars := StringBufSize;
DispPos := 0; NumChars := 0;
END;
END;
(* THIS SECTION NOW DEFINES THE GADGETS AND LINKS UP THE STRUCTURES *)
(*Device gadgets*)
j := 6;
FOR i := df0 TO vd0 DO
GadTxt[i].FrontPen := BYTE(ORD(Black));
OneGadget(i, j, 14, 38, 9,ADR(GadTxt[i]),ADR(Borders[device]),
NULL, BoolGadget);
INC(j,40)
END;
(* String gadgets *)
j := 93;
FOR i := run TO dest DO
OneGadget(i,324,j, 232, 10,ADR(GadTxt[i]), ADR(Borders[rsd]),
ADR(IOStringInfo[i]), StrGadget);
INC(j,10);
END;
(* Blanking gadgets *)
j := 92;
FOR i := brun TO bdest DO
OneGadget(i,307,j, 15, 9,ADR(GadTxt[i]), NULL,
NULL, BoolGadget);
INC(j,10);
END;
(* Message gadget *)
OneGadget(msg,28,123,512,10,ADR(GadTxt[msg]),ADR(Borders[message]),
ADR(IOStringInfo[msg]), StrGadget);
(* Filewindow gadget *)
OneGadget(filewindow,5,24,281,97,NULL,ADR(Borders[filewind]),
NULL,BoolGadget);
MyGads[filewindow].Flags := HighNone;
(* Command gadgets *)
j := 14; k := 306;
FOR i := arc TO untag DO
OneGadget(i, k, j, 60, 9,ADR(GadTxt[i]),ADR(Borders[command]),
NULL, BoolGadget);
INC(j,10);
IF j>74 THEN
j := 14;
INC(k,63);
END;
END;
(* Slider gadget *)
OneGadget(slider, 288, 33, 18, 79,NULL,ADR(SlideImage),
ADR(SlideInfo), PropGadget);
(* Up/Down gadgets *)
OneGadget(up1, 288, 24, 17, 9,ADR(GadTxt[up1]),NULL,
NULL,BoolGadget);
OneGadget(down1, 288, 112, 17, 9,ADR(GadTxt[down1]),NULL,
NULL, BoolGadget);
FOR i := df0 TO dest DO
m := i; INC(m);
MyGads[i].NextGadget := ADR(MyGads[m])
END;
RETURN ADR(MyGads[df0])
END InitGadgets;
(* ---------------------------*)
(* EXTERNAL PROCEDURES *)
(* ---------------------------*)
PROCEDURE SlidePot():CARDINAL;
(*
Function returns the current value of the slider VertPot)
*)
BEGIN
RETURN CARDINAL(SlideInfo.VertPot);
END SlidePot;
PROCEDURE ResetSlider(bod:CARDINAL);
(*
Resets slide gadget size to the size passed in
*)
BEGIN
ModifyProp(MyGads[slider],MyWindowPtr,NullReqPtr^,SliderFlags,0,0,0,bod);
END ResetSlider;
(* ---------------------------*)
PROCEDURE CloseMyWindow;
(*
Closes the window and intuition and graphics bases if they are open
*)
BEGIN
IF (MyWindowPtr # NULL) THEN CloseWindow (MyWindowPtr^) END;
IF IntuitionBase <> 0 THEN CloseLibrary(IntuitionBase) END;
IF GraphicsBase <> 0 THEN CloseLibrary(GraphicsBase) END;
END CloseMyWindow;
(* ---------------------------*)
PROCEDURE OpenMyWindow(VAR name:ARRAY OF CHAR):BOOLEAN;
(*
The external primary procedure - sets up and opens the window
*)
BEGIN
IF (GraphicsBase <> 0) AND (IntuitionBase <> 0) THEN
MyWindowPtr := InitWindow(name,InitGadgets());
RETURN (MyWindowPtr # NULL)
ELSE
RETURN FALSE
END
END OpenMyWindow;
(********)
(* MAIN *)
(********)
BEGIN
IntuitionBase := OpenLibrary (IntuitionName,0);
GraphicsBase := OpenLibrary (GraphicsName,0);
END MyWindow.