home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1986-11-20 | 8.0 KB | 234 lines |
- IMPLEMENTATION MODULE IntuiCommon;
-
- (* * * * * * * * * * * * * * * * * * * * * * *)
- (* Common Intuition-related routines. *)
- (* Originally written for the TDI package, *)
- (* but was quickly modified for the Oxxi *)
- (* compiler. *)
- (* *)
- (* (c) Copyright 1987 by Steve Faiwiszewski. *)
- (* This program may be freely distributed, *)
- (* but it is not to be sold. *)
- (* Please leave this notice intact. *)
- (* * * * * * * * * * * * * * * * * * * * * * *)
-
- FROM Rasters IMPORT DrawModeSet;
- FROM Intuition IMPORT Border, BorderPtr, Gadget, GadgetPtr, GadgetFlagsSet,
- GadgetActivationSet, GadgetMutualExcludeSet,
- GadgetTypeSet,
- Requester, IntuiText, MenuItemMutualExcludeSet,
- IntuiTextPtr, Menu, MenuPtr, MenuItem,
- MenuItemPtr, MenuFlagsSet, CommSeq, MenuEnabled,
- MenuItemFlagsSet, ItemText, ItemEnabled, HighComp,
- RememberPtr, AllocRemember, FreeRemember, InitRequester;
- FROM Memory IMPORT MemReqSet, MemChip, MemPublic;
- FROM SYSTEM IMPORT BYTE, ADDRESS, ADR, TSIZE;
-
-
- PROCEDURE ReleaseAllocations;
- BEGIN
- FreeRemember(RKey, TRUE);
- END ReleaseAllocations;
-
- PROCEDURE InitMenuRec (VAR Amenu : Menu;
- left, top, width, height : INTEGER;
- text : ADDRESS) : MenuPtr;
- (* Initialize a menu record. *)
- BEGIN
- WITH Amenu DO
- NextMenu := NIL;
- LeftEdge := left; TopEdge := top;
- Width := width; Height := height;
- Flags := MenuFlagsSet{MenuEnabled};
- MenuName := text;
- FirstItem := NIL
- END;
- RETURN (ADR(Amenu))
- END InitMenuRec;
-
- PROCEDURE InitItemRec (VAR mi : MenuItem;
- left, top, width, height : INTEGER;
- Cmd : CHAR; ItemFillPtr : ADDRESS) : MenuItemPtr;
- (* Initialize an item record. *)
- BEGIN
- WITH mi DO
- NextItem := NIL;
- LeftEdge := left; TopEdge := top;
- Width := width; Height := height;
- Flags := MenuItemFlagsSet{ItemText, ItemEnabled} + HighComp;
- MutualExclude := MenuItemMutualExcludeSet{};
- ItemFill := ItemFillPtr;
- SelectFill := NIL;
- Command := BYTE(Cmd);
- IF Cmd <> 0C THEN Flags := Flags + MenuItemFlagsSet{CommSeq} END;
- SubItem := NIL;
- NextSelect := 0;
- END;
- RETURN(ADR(mi))
- END InitItemRec;
-
- PROCEDURE InitTextRec (VAR it : IntuiText;
- left, top : INTEGER;
- front, back : BYTE;
- Mode : DrawModeSet;
- text : ADDRESS) : IntuiTextPtr;
- (* Initialize menu text record. *)
- BEGIN
- WITH it DO
- FrontPen := front; BackPen := back;
- LeftEdge := left; TopEdge := top;
- DrawMode := Mode;
- ITextFont := NIL;
- IText := text;
- NextText := NIL
- END;
- RETURN(ADR(it));
- END InitTextRec;
-
- PROCEDURE InitBorder(VAR border : Border;
- Left, Top : INTEGER;
- Front, Back,
- count : BYTE;
- Mode : DrawModeSet;
- Coords : ADDRESS;
- Next : BorderPtr);
- BEGIN
- WITH border DO
- LeftEdge := Left; TopEdge := Top;
- FrontPen := Front; BackPen := Back;
- DrawMode := Mode; Count := count;
- XY := Coords; NextBorder := Next;
- END;
- END InitBorder;
-
-
- PROCEDURE InitGadget(VAR gadget : Gadget;
- Left, Top : INTEGER;
- width, height : INTEGER;
- flags : GadgetFlagsSet;
- Activate : GadgetActivationSet;
- Type : GadgetTypeSet;
- Render : ADDRESS;
- Select : ADDRESS;
- Special: ADDRESS;
- ID : CARDINAL;
- User : ADDRESS;
- Text : IntuiTextPtr) : GadgetPtr;
- BEGIN
- WITH gadget DO
- NextGadget := NIL;
- LeftEdge := Left;
- TopEdge := Top;
- Width := width; Height := height;
- Flags := flags;
- Activation := Activate;
- GadgetType := Type;
- GadgetRender := Render;
- SelectRender := Select;
- GadgetText := Text;
- MutualExclude := GadgetMutualExcludeSet{};
- SpecialInfo := Special;
- GadgetID := ID; UserData := User
- END;
- RETURN(ADR(gadget));
- END InitGadget;
-
- PROCEDURE InitReq(VAR requester : Requester;
- Left, Top : INTEGER;
- width, height : INTEGER;
- gadget : GadgetPtr;
- border : BorderPtr;
- Text : IntuiTextPtr;
- Fill : BYTE);
- BEGIN
- InitRequester(requester);
- WITH requester DO
- LeftEdge := Left; TopEdge := Top;
- Width := width; Height := height;
- ReqGadget := gadget;
- ReqText := Text;
- ReqBorder := border;
- BackFill := Fill;
- END;
- END InitReq;
-
- PROCEDURE InitCoordEntry(VAR coords : ARRAY OF CoordinateType;
- offset : CARDINAL;
- left, top : INTEGER);
- BEGIN
- WITH coords[offset] DO Left := left; Top := top END;
- END InitCoordEntry;
-
- PROCEDURE SetUpAborder(VAR Coords: ARRAY OF CoordinateType;
- GadWidth, GadHeight : CARDINAL;
- VAR border : Border;
- Left, Top : INTEGER;
- Front, Back,
- count : BYTE;
- Mode : DrawModeSet;
- NextBorder : BorderPtr);
- BEGIN
- InitCoordEntry(Coords,0,0,0);
- InitCoordEntry(Coords,1,GadWidth+1,0);
- InitCoordEntry(Coords,2,GadWidth+1,GadHeight+1);
- InitCoordEntry(Coords,3,0,GadHeight+1);
- InitCoordEntry(Coords,4,0,0);
- InitBorder(border,Left,Top,Front,Back,count,Mode,ADR(Coords),NIL);
- END SetUpAborder;
-
- PROCEDURE AllocateStandardBorder(Width, Height : CARDINAL;
- Front, Back : BYTE; Mode : DrawModeSet): BorderPtr;
-
- VAR
- BorderP : BorderPtr;
- CoordPtr: POINTER TO StandardCoordType;
- BEGIN
- CoordPtr := AllocRemember(RKey, TSIZE(StandardCoordType),
- MemReqSet{});
- BorderP := AllocRemember(RKey, TSIZE(Border), MemReqSet{});
- SetUpAborder(CoordPtr^,Width,Height,
- BorderP^,-1,-1,Front,Back,BYTE(5),Mode,NIL);
- RETURN(BorderP);
- END AllocateStandardBorder;
-
- PROCEDURE AllocateReqBorder(Width, Height : CARDINAL;
- Front, Back : BYTE; Mode : DrawModeSet): BorderPtr;
- VAR
- BorderP : BorderPtr;
- CoordPtr: POINTER TO StandardCoordType;
- BEGIN
- CoordPtr := AllocRemember(RKey, TSIZE(StandardCoordType),
- MemReqSet{});
- BorderP := AllocRemember(RKey, TSIZE(Border), MemReqSet{});
- SetUpAborder(CoordPtr^,Width-2,Height-2,
- BorderP^,0,0,Front,Back,BYTE(5),Mode,NIL);
- RETURN(BorderP);
- END AllocateReqBorder;
-
- PROCEDURE AddGadgetToList(VAR GadList : GadgetPtr;
- Left, Top : INTEGER;
- width, height : INTEGER;
- flags : GadgetFlagsSet;
- Activate : GadgetActivationSet;
- Type : GadgetTypeSet;
- Render : ADDRESS;
- Select : ADDRESS;
- Special: ADDRESS;
- ID : CARDINAL;
- User : ADDRESS;
- Text : IntuiTextPtr) : GadgetPtr;
- VAR
- GadP, tmp : GadgetPtr;
- BEGIN
- GadP := AllocRemember(RKey, TSIZE(Gadget), MemReqSet{});
- tmp := InitGadget(GadP^, Left, Top, width, height, flags, Activate,
- Type, Render, Select, Special, ID, User, Text);
- GadP^.NextGadget := GadList;
- GadList := GadP;
- RETURN(GadP);
- END AddGadgetToList;
-
- BEGIN
- RKey := NIL;
- END IntuiCommon.
-