home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Tex / td187src.lzh / MTRSC.I < prev    next >
Text File  |  1991-06-10  |  5KB  |  179 lines

  1. (*#######################################################################
  2.                            M A G I C R E S O U R C E
  3.   #######################################################################
  4.   V1.01  21.10.90        Peter Hellinger
  5.   V1.00  21.08.90        Peter Hellinger
  6.   #######################################################################*)
  7.  
  8. IMPLEMENTATION MODULE mtRsc;
  9.  
  10. (*------------------------------*)
  11. (*       COMPILERSWITCHES       *)
  12. (*------------------------------*)
  13. (*  TDI-Version:   DEAKTIVIERT  *)
  14. (*------------------------------*)
  15. (* V-  Overflow-Checks          *)
  16. (* R-  Range-Checks             *)
  17. (* S-  Stack-Check              *)
  18. (* N-  NIL-Checks               *)
  19. (* T-  TDI-Compiler vor 3.01    *)
  20. (* Q+  Branch statt Jumps       *)
  21. (*                              *)
  22. (*------------------------------*)
  23. (*  MM2-Version:     AKTIVIERT  *)
  24. (*------------------------------*)
  25. (*$R-   Range-Checks            *)
  26. (*$S-   Stack-Check             *)
  27. (*                              *)
  28. (*------------------------------*)
  29.  
  30. FROM SYSTEM     IMPORT  ADDRESS;
  31. FROM Storage    IMPORT  ALLOCATE, DEALLOCATE;
  32. FROM MagicSys   IMPORT  Null;
  33. FROM MagicAES   IMPORT  AESPB, RsrcLoad, RsrcFree, RsrcGaddr, 
  34.                         RsrcSaddr, RsrcObfix, ShelFind;
  35. FROM MagicStrings  IMPORT  Assign;
  36. FROM mtAppl     IMPORT  InstallTermproc, MouseOn, MouseOff, MouseBusy, MouseArrow;
  37. (**
  38. IMPORT RTD;
  39. **)
  40. TYPE    RESOURCE =      POINTER TO Resource;
  41.         Resource =      RECORD
  42.                          addr:  ADDRESS;
  43.                          next:  RESOURCE;
  44.                          last:  RESOURCE;
  45.                         END;
  46.  
  47. VAR     RscList:        RESOURCE;
  48.  
  49.  
  50.  
  51. PROCEDURE LoadRsc (name: ARRAY OF CHAR; VAR rsc: RESOURCE): BOOLEAN;
  52. VAR p, q: RESOURCE;
  53.     path: ARRAY [0..255] OF CHAR;
  54.     load: BOOLEAN;
  55.     adr:  ADDRESS;
  56.  
  57.  PROCEDURE new (): RESOURCE;
  58.  BEGIN
  59.   IF RscList = NIL THEN
  60.    NEW (RscList);  RscList^.last:= NIL;  RscList^.next:= NIL;
  61.    RETURN RscList;
  62.   ELSE
  63.    p:= RscList;
  64.    WHILE p^.next # NIL DO  p:= p^.next;  END;
  65.    NEW (q);  p^.next:= q;  q^.last:= p;  q^.next:= NIL;
  66.   END;
  67.   RETURN q;
  68.  END new;
  69.  
  70. BEGIN
  71.  MouseBusy;
  72. (** RTD.Write('Load RSC:', name); **)
  73.  Assign (name, path);
  74. (*  RTD.Write('To load:', path); *)
  75.  ShelFind (path); 
  76. (*  RTD.Write('After ShelFind:', path); *)
  77.  adr:= AESPB.cbPglobal^.apPtree;
  78.  AESPB.cbPglobal^.apPtree:= Null;
  79.  load:= RsrcLoad (path);
  80.  MouseArrow;
  81.  IF load = FALSE THEN
  82. (*   RTD.Message('RSC not loaded'); *)
  83.   AESPB.cbPglobal^.apPtree:= adr;
  84.   rsc:= NIL;
  85.   RETURN FALSE;
  86.  END;
  87. (*  RTD.Message('RSC loaded'); *)
  88.  rsc:= new ();
  89.  rsc^.addr:= AESPB.cbPglobal^.apPtree;
  90.  RETURN TRUE;
  91. END LoadRsc;
  92.  
  93.  
  94. PROCEDURE FreeRsc (VAR rsc: RESOURCE);
  95. VAR old: ADDRESS;
  96. BEGIN
  97.  IF rsc # NIL THEN
  98.   old:= AESPB.cbPglobal^.apPtree;
  99.   AESPB.cbPglobal^.apPtree:= rsc^.addr;
  100.   RsrcFree;
  101.   IF old # rsc^.addr THEN
  102.    AESPB.cbPglobal^.apPtree:= old;
  103.   ELSE
  104.    IF rsc^.last # NIL THEN
  105.     AESPB.cbPglobal^.apPtree:= rsc^.last^.addr;
  106.    ELSIF rsc^.next # NIL THEN
  107.     AESPB.cbPglobal^.apPtree:= rsc^.next^.addr;
  108.    ELSE
  109.     AESPB.cbPglobal^.apPtree:= Null;
  110.    END;
  111.   END;
  112.   IF rsc^.last # NIL THEN
  113.    rsc^.last^.next:= rsc^.next;
  114.   ELSE
  115.    RscList:= rsc^.next;
  116.   END;
  117.   DISPOSE (rsc);
  118.  END;
  119. END FreeRsc;
  120.  
  121.  
  122. PROCEDURE FreeAll;
  123. VAR p: RESOURCE;
  124. BEGIN
  125.  IF RscList # NIL THEN
  126.   p:= RscList;
  127.   WHILE p # NIL DO
  128.    AESPB.cbPglobal^.apPtree:= p^.addr;
  129.    RsrcFree;
  130.    p:= p^.next;
  131.   END;
  132.   AESPB.cbPglobal^.apPtree:= Null;
  133.   RscList:= NIL;
  134.  END;
  135. END FreeAll;
  136.  
  137.  
  138. PROCEDURE GaddrRsc (rsc: RESOURCE; type, item: INTEGER): ADDRESS;
  139. VAR old, ret: ADDRESS;
  140. BEGIN
  141.  IF rsc # NIL THEN
  142.   old:= AESPB.cbPglobal^.apPtree;
  143.   AESPB.cbPglobal^.apPtree:= rsc^.addr;
  144.   ret:= RsrcGaddr (type, item);
  145.   AESPB.cbPglobal^.apPtree:= old;
  146.   RETURN ret;
  147.  END;
  148. END GaddrRsc;
  149.  
  150.  
  151. PROCEDURE SaddrRsc (rsc: RESOURCE; type, item: INTEGER; tree: ADDRESS);
  152. VAR old: ADDRESS;
  153. BEGIN
  154.  IF rsc # NIL THEN
  155.   old:= AESPB.cbPglobal^.apPtree;
  156.   AESPB.cbPglobal^.apPtree:= rsc^.addr;
  157.   RsrcSaddr (type, item, tree);
  158.   AESPB.cbPglobal^.apPtree:= old;
  159.  END;
  160. END SaddrRsc;
  161.  
  162.  
  163. PROCEDURE ObfixRsc (rsc: RESOURCE; tree: ADDRESS; object: INTEGER);
  164. VAR old: ADDRESS;
  165. BEGIN
  166.  IF rsc # NIL THEN
  167.   old:= AESPB.cbPglobal^.apPtree;
  168.   AESPB.cbPglobal^.apPtree:= rsc^.addr;
  169.   RsrcObfix (tree, object);
  170.   AESPB.cbPglobal^.apPtree:= old;
  171.  END;
  172. END ObfixRsc;
  173.  
  174.  
  175. BEGIN
  176.  RscList:= NIL;
  177.  InstallTermproc (FreeAll);
  178. END mtRsc.
  179.