home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / tegl_ii / intro / teglunit.doc < prev    next >
Text File  |  1991-08-16  |  15KB  |  330 lines

  1. {-----------------------------------------------------------------------------}
  2. {               TEGL Windows ToolKit II                  }
  3. {          Copyright (C) 1990, 1991 TEGL Systems Corporation              }
  4. {                All Rights Reserved.                  }
  5. {-----------------------------------------------------------------------------}
  6. {$I switches.inc}
  7.  
  8. Unit TEGLUnit;
  9.  
  10. INTERFACE
  11.  
  12. USES
  13.      Crt,                {clear keyboard}
  14.      Errorlog,
  15.      VirtMem,                {virtual Memory}
  16.      IPStacks,
  17.      TEGLIntr,                {keyboard/mouse}
  18.      FastGrph;
  19.  
  20. const
  21.    MSSense = TRUE;
  22.    MSClick = FALSE;
  23.  
  24.    Vertslice : boolean = false;
  25.  
  26. TYPE
  27.  
  28. { The four pointers below provides the total integration of TEGL, of which the
  29.   ImageStkPtr is the main structure that ties everything together. The
  30.   hierarchy is such that the MsClickPtrs and KeyClickPtrs are pointer chained
  31.   within an Imagestkptr.  }
  32.  
  33.    TimeTickPtr = ^TimeTickStk;
  34.    KeyClickPtr = ^KeyClickStk;
  35.    MsClickPtr  = ^MSClickStk;
  36.    ImageStkPtr = ^ImageStack;
  37.  
  38.  
  39. {      Global  Keyclickptr --> Keyclickptr --> Keyclickptr
  40.            |              \
  41.            |                \
  42.            |                  \
  43.            ImageStkPtr --> ImageStkPtr --> ImageStkPtr
  44.          |    |        |    |        |     |
  45.     Local Keyclickptr |     Keyclickptr |    Keyclickptr |
  46.          msclickptr        msclickptr    msclickptr
  47.                 /
  48.               /
  49.             /
  50.            TimeTickPtr --> TimeTickPtr --> TimeTickPtr
  51.  
  52. }
  53.  
  54.    Callproc    = Function(FS:ImageStkPtr; MS: MsClickPtr):Word;
  55.    Dataproc    = Function(FS:ImageStkPtr; Userkey:word; Var DataArea):Word;
  56.  
  57.  
  58.    XYX1Y1Rec = RECORD
  59.     x,y,x1,y1      : Word;        {coordinate structure for msclick}
  60.         END;
  61.  
  62.    TimeTickStk = RECORD
  63.     nexttimetick   : TimeTickptr;    {chain of timer tick events}
  64.     timepiece      : timerecptr;    {timer counter, flag}
  65.     signature      : longint;    {signature for dropping timer ticks}
  66.     entrycallproc  : callproc;    {timer event - when flag is true}
  67.     fs           : ImageStkPtr;    {related fs/ms for event}
  68.     ms           : MsClickPtr;
  69.          END;
  70.  
  71.    KeyClickStk = RECORD
  72.     nextkeyclick   : Keyclickptr;    {chain of keyboard click areas}
  73.     keycode        : Word;        {scancode for capturing}
  74.     entrycallproc  : callproc;    {event for scancode activation}
  75.     fs           : ImageStkPtr;    {related fs/ms for event}
  76.     ms           : MsClickPtr;
  77.          END;
  78.  
  79.    MSClickStk = RECORD
  80.     nextmsclick    : MsClickPtr;    {mouse click chains}
  81.     ClickNumber    : Word;        {assignable key for mouse click}
  82.     ms           : XYX1Y1Rec;    {mouse x,y,x1,y1 region}
  83.     msactive       : Boolean;    {sets inactive mode of mouse}
  84.     entrycallproc  : callproc;    {normal mouse click call event}
  85.     senseactivate  : Boolean;    {true-sense,false-mouse click}
  86.     sensehighlight : Boolean;    {enables supervisor to auto  }
  87.                     {highlight a mouse click area}
  88.  
  89.     MouseButtons   : word;        {Defines the active mouse button}
  90.                     {2-right mouse button}
  91.  
  92.     DoubleCallproc : callproc;    {double click event}
  93.  
  94.     MouseMask      : maskptr;    {autochanging of mouse mask}
  95.     xHotSpot       : word;        {mouse hot spot of mouse mask}
  96.     yHotSpot       : word;
  97.     IPPtr           : imagepartial;    {Mouse click image partials}
  98.                     {used in sliders and pop-off buttons}
  99.         END;
  100.  
  101.    FrameChangePtr = ^FrameChange;
  102.    FrameChange = Record
  103.     FrameEnter     : callproc;    {Frame Enter Event}
  104.     FrameExit      : callproc;    {Frame Exit Event}
  105.     EnterMask      : maskptr;    {Enter frame Mouse Mask}
  106.     XEHS,YEHS      : word;        {Enter frame Mouse Hotspots}
  107.     ExitMask       : maskptr;    {Exit  frame Mouse Mask}
  108.     XXHS,YXHS      : word;        {Exit  frame Mouse Hotspots}
  109.         end;
  110.  
  111.  
  112.    UserRecPtr = ^UserRecord;
  113.    UserRecord = Record
  114.     NxtUserPtr     : UserRecPtr;    {user data area chains}
  115.     UserKey        : word;        {user assigned key for retrieving data}
  116.     UserDataArea   : pointer;    {pointer to userdata}
  117.     UserTerminate  : dataproc;    {terminating call event}
  118.         end;
  119.  
  120.  
  121.    PendingPtr = ^PendRecord;
  122.    PendRecord = Record
  123.     NxtPendPtr     : PendingPtr;    {pending event chains}
  124.     PendCallproc   : callproc;    {pending call proc}
  125.     PendingFS      : imagestkptr;    {pending matching FS}
  126.     PendingClose   : boolean;    {ignore close pending if false}
  127.         end;
  128.  
  129.    moveptr    = ^moverecord;
  130.    moverecord = record
  131.     nxtmove        : moveptr;
  132.     movecallproc   : callproc;    {a user definable event when frame is
  133.                     {moved}
  134.         end;
  135.  
  136.  
  137.    ImageStack = RECORD
  138.     nxtptr           : ImageStkPtr;    {forward chain of Frames}
  139.     lstptr           : ImageStkPtr;    {backward chain for frame stack}
  140.     signature      : longint;    {time code signature}
  141.     FrameActive    : Word;        {set by resetframeactive for locking}
  142.                     {events from occuring}
  143.     x,y,x1,y1      : Word;        {frame coordinates}
  144.     movable        : Boolean;    {flag indicating mobility of frame}
  145.     movecallproc   : moveptr;    {move event chain}
  146.     iconframe      : pointer;    {icon for putpict when moving frame}
  147.     iconcolor      : word;        {icon color}
  148.     emptyframe     : boolean;    {flag indicating empty frame}
  149.     autorotate     : boolean;    {indicator if frame can be rotated up}
  150.     RestrictMoveF  : XYX1Y1Rec;    {move area restriction}
  151.     MinMaxStretch  : XYX1Y1Rec;    {minimum/maximum resize}
  152.     Resizecallproc : callproc;    {required event for re-drawing frame}
  153.                     {after frame has been re-sized}
  154.     ImageActive    : Boolean;    {frame hiding/showing flag}
  155.     relatedstack   : ImageStkPtr;    {related fs for use in Menus and explodes}
  156.     relatedmsclick : MsClickPtr;    {related ms for use in Menus and explodes}
  157.     relatedsignate : longint;    {related signate for use in pending}
  158.     chainedstack   : ImageStkPtr;    {chained fs sub menu}
  159.     chainedmsclick : MsClickPtr;    {chained ms sub menu}
  160.     IPPtr           : imagepartial;    {image partial chain}
  161.     IPTop           : imagepartial;    {image partial top of chain}
  162.     keyPtr           : KeyClickPtr;    {key chain for local keyclicks}
  163.     MsPtr           : MsClickPtr;    {ms chain for mouse click areas}
  164.     MsClickCount   : Word;        {ms clicks counts}
  165.     fschangePtr    : Framechangeptr;{frame enter/exit events}
  166.     UserDataPtr    : UserRecPtr;    {user data chain}
  167.         END;
  168.  
  169. const
  170. {*------------------------------------------------------------------------*
  171.  |  Window Stack                              |
  172.  *------------------------------------------------------------------------*}
  173.    StackPtr       : ImageStkPtr = NIL;     {Central Image Stack}
  174.    KeyStackPtr       : KeyClickPtr = NIL;     {Global Key Stack}
  175.    TimeStackPtr    : TimeTickPtr = NIL;     {Global Time Stack Ptr}
  176.    PendStackPtr    : PendingPtr  = NIL;     {Global Pending Stack Ptr}
  177.  
  178.    FunctionKeyCode : Word = 0;            {last TEGLKeypress}
  179.    AutoRotateUp    : Boolean = FALSE;        {set on for autorotate}
  180.  
  181.    LastFSDetect    : ImageStkPtr = NIL;     {last detect fs/ms values}
  182.    LastMSDetect    : MsClickPtr  = NIL;     {used in cursor mask changes}
  183.    StandardMask    : Maskptr = nil;        {and mouse click highlighting}
  184.    Standardxhs       : word = 0;
  185.    Standardyhs       : word = 0;
  186.    CurrentMask       : Maskptr = nil;
  187.    Currentxhs       : word = 0;
  188.    Currentyhs       : word = 0;
  189.  
  190.    MaxWindowSize   : longint = $00020000;    {Maximum size for frame partial}
  191.                         { $7fffffff - no size limit}
  192.                         { $00008000 - 32k limit}
  193.                         { $00004000 - 16k limit}
  194.  
  195.  
  196. VAR
  197.    CtrlBreakProc   : CallProc;
  198.  
  199.  
  200. {*------------------------------------------------------------------------*
  201.  |  Image Stack routines                          |
  202.  *------------------------------------------------------------------------*}
  203. Function  FrameExist(fs:ImageStkPtr) : Boolean;
  204. Function  CountFrames : Word;
  205. Procedure PushImage(x,y,x1,y1 : Word);
  206. Procedure PushEmptyImage(x,y,x1,y1 : Word);
  207. Procedure PopImage;
  208. Procedure PrepareForPartialUpdate(FS:ImageStkPtr; x,y,x1,y1: Word);
  209. Procedure PrepareForUpdate(FS:ImageStkPtr);
  210. Procedure CommitUpdate;
  211. Procedure SetFrameAutoRotate(fs:imagestkptr; Autorotate:boolean);
  212. Procedure RotateStackImage(FS1,FS2 :ImageStkPtr);
  213. Procedure RotateUnderStackImage(FS1,FS2 :ImageStkPtr);
  214. Procedure MoveFrame(VAR fx,fy,fx1,fy1 : Integer; rx,ry,rx1,ry1: Integer; Color : Integer);
  215. Function  FrameSelectAndMove(mxpos,mypos : Word) : ImageStkPtr;
  216. Function  SelectandMoveFrame(fs:ImageStkPtr; MouseClickPos: MsClickPtr) : Word;
  217. Procedure SetMoveRestrictions(fs:ImageStkPtr; x,y,x1,y1:Word);
  218. Procedure SetFrameMobility(fs:ImageStkPtr;  movable : Boolean);
  219. Procedure DropMoveFrameCallProc(fs:ImageStkPtr; EntryCallProc:callproc);
  220. Procedure SetMoveFrameCallProc(fs:ImageStkPtr;    EntryCallProc:callproc);
  221. Procedure LinkFS(nfs,cfs:ImageStkPtr);
  222. Procedure LinkUnderFS(nfs,cfs:ImageStkPtr);
  223. Procedure UnLinkFS(fs:ImageStkPtr);
  224. Procedure HideImage(fs:ImageStkPtr);
  225. Procedure ShowImage(fs:ImageStkPtr; x,y:Word);
  226. Procedure MoveStackImage(fs:ImageStkPtr; x,y : Word);
  227. Procedure DropStackImage(fs:ImageStkPtr);
  228. Procedure CreateImageBuffer(VAR fs:ImageStkPtr; x,y,x1,y1 : Word);
  229. Procedure DropImageBuffer(fs:ImageStkPtr);
  230. Procedure FreeImageBuffer(fs:ImageStkPtr);
  231. Function  GetFrontImage(fs:ImageStkPtr):ImageStkPtr;
  232. Function  GetPartialFrontImage(FS:ImageStkPtr; x,y,x1,y1:Word):ImageStkPtr;
  233. Function  GetPartialBackImage(FS:ImageStkPtr; x,y,x1,y1:Word):ImageStkPtr;
  234. Function  GetBackImage(fs:ImageStkPtr):ImageStkPtr;
  235. Procedure GetFSImage(x,y:Word; fs:ImageStkPtr);
  236. Procedure PutFSImage(x,y:Word; fs:ImageStkPtr; RmwBits:Word);
  237. function  SliceImagePartials(lastip:imagepartial; x,y,x1,y1:word):imagepartial;
  238. Procedure ReSizeFrame(fs:ImageStkPtr; x,y,x1,y1:Word);
  239. Procedure SetImageActive(fs:imagestkptr; ImageActive:boolean);
  240. Procedure SetFrameEnterCallProc(fs:ImageStkPtr; EntryCallProc:callproc);
  241. Procedure SetFrameExitCallProc(fs:ImageStkPtr; EntryCallProc:callproc);
  242. Function  ChangeUserDataKey(fs:ImageStkPtr; Userkey,NewKey:word) : boolean;
  243. procedure GetUserDataArea(fs:imagestkptr; Userkey:word; Var Userdata);
  244. Procedure SetUserDataArea(fs:ImageStkPtr; Userkey:word; Var Userdata; TerminatedataProc:dataproc);
  245. Procedure DropUserDatabykey(fs:imagestkptr; Userkey:word);
  246. Procedure DropUserDataArea(fs:imagestkptr; UD:userrecptr);
  247. function  GetfirstUserDataArea(fs:imagestkptr;TerminatedataProc:dataproc; Var Userdata):UserRecPtr;
  248. function  GetnextUserDataArea(UD:userrecptr; Var Userdata):UserRecPtr;
  249.  
  250. Procedure SetEnterExitMouseMask(fs:ImageStkPtr; EnterMask:maskptr; XEHS,YEHS:word;
  251.                                ExitMask:maskptr; XXHS,YXHS:word);
  252. Procedure SetStandardMouseMask(MouseMask:maskptr; Xhotspot,Yhotspot:word);
  253. procedure SetFSIPCoords(fs:imagestkptr; x,y:word);
  254. function  FramesOverlapped(fs1,fs2:imagestkptr) : boolean;
  255.  
  256. {*------------------------------------------------------------------------*
  257.  |  Utility Routines                              |
  258.  *------------------------------------------------------------------------*}
  259. Procedure ClearKeyBoardBuf;
  260. Procedure ClearTEGLKeyBoardBuf;
  261. Procedure SetAutoRotate(onoff:Boolean);
  262. function  UserRelease : boolean;
  263. procedure WaitForUserRelease;
  264.  
  265. {*------------------------------------------------------------------------*
  266.  |  Find Mouse Screen positions                       |
  267.  *------------------------------------------------------------------------*}
  268. Function  FindFrame(mxpos,mypos : Word) :ImageStkPtr;
  269. Procedure ResetFrameActive(fs:ImageStkPtr; active:Boolean);
  270.  
  271. {*------------------------------------------------------------------------*
  272.  |  Mouse Click defines                           |
  273.  *------------------------------------------------------------------------*}
  274. Function  FindMouseClickPtr(fs:ImageStkPtr; Clicknumber:Word) : MsClickPtr;
  275. Function  MouseClickExist(fs:ImageStkPtr; ms:msclickptr) : Boolean;
  276. Procedure ResetMouseClicks(fs:ImageStkPtr; ClickPtr:MsClickPtr);
  277. Procedure ResetMSClickSense(fs:ImageStkPtr; NewSense:Boolean);
  278. Procedure ResetMSClickCallProc(fs:ImageStkPtr; MouseClickNumber:Word; EntryCallProc:Callproc);
  279. Procedure ResetMSClickActive(fs:ImageStkPtr; MouseClickNumber:Word; active : Boolean);
  280. Procedure DefineMouseClickArea(fs:ImageStkPtr; x,y,x1,y1:Word; active:Boolean; EntryCallProc:callproc; sense:Boolean);
  281. Procedure DropMouseClick(fs:ImageStkPtr; ms:MsClickPtr);
  282. Function  CheckMouseClickPos(fs:ImageStkPtr; mxpos,mypos:Word):MsClickPtr;
  283. procedure ResetMSAssignmentNum(fs:imagestkptr; Startcount:word);
  284. procedure AssignMouseClickNumber(fs:imagestkptr; ms:msclickptr; Clicknumber:word);
  285. function  GetLastMSPtr(fs:imagestkptr):msclickptr;
  286.  
  287. Procedure AddMouseClickMask(ms:MsClickPtr; MouseMask:maskptr; xhs,yhs:word);
  288. Procedure DefineMaskClickArea(fs:ImageStkPtr; x,y,x1,y1:Word; active:Boolean;
  289.        EntryCallProc:callproc; sense:Boolean; MouseMask:maskptr; xhs,yhs:word);
  290.  
  291. Procedure AddDoubleClickCallproc(ms:MsClickPtr; DoubleCallProc:callproc);
  292. Procedure DefineDoubleClickArea(fs:ImageStkPtr; x,y,x1,y1:Word; active:Boolean;
  293.        EntryCallProc:callproc; DoubleCallProc:callproc; sense:Boolean);
  294.  
  295. Procedure SetMSSenseHighlight(ms:MsClickPtr; AutoHighlight:boolean);
  296. Procedure SetMouseButton(ms:MsClickPtr; mousebutton:word);
  297. Procedure DefineIconFrame(x,y:word; Iconimage:pointer; iconcolor:word; active:Boolean; EntryCallProc:callproc; sense:Boolean);
  298.  
  299. {*------------------------------------------------------------------------*
  300.  |  Key Click defines                              |
  301.  *------------------------------------------------------------------------*}
  302. Procedure DefineGlobalKeyClickArea(fs:ImageStkPtr; ms:MsClickPtr; Keycode:Word; Repeatkey:Boolean; EntryCallProc:callproc);
  303. Procedure DefineLocalKeyClickArea(fs:ImageStkPtr; ms:MsClickPtr; Keycode:Word; Repeatkey:Boolean; EntryCallProc:callproc);
  304. Function  FindKeyClickPtr(fs:ImageStkPtr; Keycode:Word) : KeyClickPtr;
  305. Procedure DropKeyClick(fs:ImageStkPtr; Keycode:Word; EntryCallProc:callproc);
  306. Procedure ResetKeyClickCallProc(fs:ImageStkPtr; KeyCode:Word; EntryCallProc:Callproc);
  307. Procedure ResetLocalKeyClicks(fs:ImageStkPtr);
  308.  
  309. {*------------------------------------------------------------------------*
  310.  |  Supervisor Loop                              |
  311.  *------------------------------------------------------------------------*}
  312. Procedure ToggleOptionBar(fs:ImageStkPtr; opt,lastopt : MsClickPtr);
  313. Function  EventManager(VAR fs:ImageStkPtr; VAR ms:MsClickPtr):Word;
  314. Procedure SetPendingEvent(fs:ImageStkPtr; pendcallproc: callproc);
  315. Procedure ResetPendingCallProc(fs:ImageStkPtr; pendcallproc: callproc);
  316. Procedure SetPendingClose(fs:ImageStkPtr; pendingclose: boolean);
  317. function  GetFSMS(var fs:imagestkptr; var ms:msclickptr) : word;
  318.  
  319. {*------------------------------------------------------------------------*
  320.  |  Chain functions                              |
  321.  *------------------------------------------------------------------------*}
  322. Procedure CheckCtrlBreak;
  323. Procedure SetCtrlBreakFS(CBrkProc : callproc);
  324. Procedure SetTimerTick(TimerInterrupt:Word; EntrycallProc:callproc; fs:ImageStkPtr; ms:MsClickPtr);
  325. Procedure DropTimerTick(TimerInterrupt:Word; EntrycallProc:callproc);
  326. Function  NilUnitProc(fs:ImageStkPtr; ms:MsClickPtr):Word;
  327. function  NilDataProc(fs:ImageStkPtr; Userkey:word; Var DataArea):Word;
  328.  
  329. IMPLEMENTATION
  330.