imk0tter

mSL++ Revamped

May 10th, 2021 (edited)
1,254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
mIRC 30.13 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Description: This is the base class, which every   ;
  3. ; class inherits from...                             ;
  4. ;                                                    ;
  5. ; Usage: $Class(<uID>,<Params>,...).<Member>         ;
  6. ; Example: var %x $Class                             ;
  7. ; Example: $Class.Delete(%x)                         ;
  8. ; Example: $Class(%x,Name,Some Text).set             ;
  9. ; Example: $Class(%x,Name).get                       ;
  10. ; Example: $Class(%x,Name).unset                     ;
  11. ; Example: $Class(%x).FREE                           ;
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. ;;;;;;;;;;;;
  14. ; Triggers ;
  15. ;;;;;;;;;;;;
  16.  
  17. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  18. ; START                                   ;
  19. ;                                         ;
  20. ; Make sure all of the objects from the-  ;
  21. ; previous instance of MIRC get loaded    ;
  22. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  23. on 1:start: {
  24.   if (!$window(@DEBUG)) window -e @DEBUG
  25.  
  26.   var %objectDir $mircdir $+ MSL++
  27.   var %objectsFile $+(%objectDir,\,MSL++.main)
  28.  
  29.   if ($exists(%objectsFile)) {
  30.     hmake MSL++
  31.     .hload -b MSL++ %objectsFile
  32.     var %numberOfItems $hget(MSL++, 0).item
  33.     var %x 1
  34.     while (%x <= %numberOfItems) {
  35.       var %currentObject $hget(MSL++, %x).item
  36.  
  37.       if ($right(%currentObject,5) == _INIT) {
  38.         var %object $left(%currentObject,-5)
  39.  
  40.         if $exists($+(%objectDir,\,%object,.obj)) {
  41.           + $Class(%object).IMPORT
  42.         }
  43.       }
  44.       inc %x
  45.     }
  46.   }
  47. }
  48.  
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50. ; EXIT                                     ;
  51. ;                                          ;
  52. ; Make sure all of the objects from memory ;
  53. ; get exported before mIRC closes          ;
  54. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  55. on 1:exit: {
  56.   .ExportAllObjects
  57. }
  58.  
  59. alias ExportAllObjects {
  60.   var %objectDir $mircdir $+ MSL++
  61.   if !$exists(%objectDir) { mkdir %objectDir }
  62.   if ($hget(MSL++)) {
  63.     .hsave -b MSL++ $+(%objectDir,\,MSL++ $+ .main)
  64.     var %numberOfItems $hget(MSL++, 0).item
  65.     var %x 1
  66.  
  67.     while (%x <= %numberOfItems) {
  68.       var %currentObject $hget(MSL++,%x).item
  69.       if $right(%currentObject,5) == _INIT {
  70.         var %object $hget($left(%currentObject,-5))
  71.  
  72.         if (%object != $null) {
  73.           + $Class(%object).EXPORT
  74.         }
  75.       }
  76.       inc %x
  77.     }
  78.   }
  79. }
  80. ;;;;;;;;;;;;;;;;
  81. ; END TRIGGERS ;
  82. ;;;;;;;;;;;;;;;;
  83.  
  84.  
  85. ;;;;;;;;;;;;;;;;;;;;;;;
  86. ; Public Declarations ;
  87. ;;;;;;;;;;;;;;;;;;;;;;;
  88.  
  89. alias Class.FREE.Public
  90.  
  91. alias Class.GET.Public
  92.  
  93. alias Class.SET.Public
  94. alias Class.UNSET.Public
  95.  
  96. alias Class.EXPORT.Public
  97. alias Class.IMPORT.Public
  98. alias Class.CLONE.Public
  99.  
  100. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  101. ; Exception Declarations ;
  102. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  103.  
  104. alias Class.EXCEPTION.Null {
  105.   var %params $1, %object $2, %error $3, %message $6, %scriptLine $4, %scriptDir $5
  106.   if ($hget(MAKETOK)) hfree MAKETOK
  107.   return Exception Caught on line $+($chr(40),%scriptLine,:,%scriptDir,$chr(41)) from Object ( $+ %object $+ : $+ $IsInstance(%object) $+ ): %error $+  - %message
  108. }
  109. alias Class.EXCEPTION.NoOperation {
  110.   var %params $1, %object $2, %error $3, %message $6, %scriptLine $4, %scriptDir $5
  111.   if ($hget(MAKETOK)) hfree MAKETOK
  112.   return Exception Caught on line $+($chr(40),%scriptLine,:,%scriptDir,$chr(41)) from Object ( $+ %object $+ : $+ $IsInstance(%object) $+ ): %error $+  - %message
  113. }
  114. alias Class.EXCEPTION.MemberErr {
  115.   var %params $1, %object $2, %error $3, %message $6, %scriptLine $4, %scriptDir $5
  116.   if ($hget(MAKETOK)) hfree MAKETOK
  117.   return Exception Caught on line $+($chr(40),%scriptLine,:,%scriptDir,$chr(41)) from Object ( $+ %object $+ : $+ $IsInstance(%object) $+ ): %error $+  - %message
  118. }
  119.  
  120. alias Class.EXCEPTION.ParamErr {
  121.   var %params $1, %object $2, %error $3, %message $6, %scriptLine $4, %scriptDir $5
  122.   if ($hget(MAKETOK)) hfree MAKETOK
  123.   return Exception Caught on line $+($chr(40),%scriptLine,:,%scriptDir,$chr(41)) from Object ( $+ %object $+ : $+ $IsInstance(%object) $+ ): %error $+  - %message
  124. }
  125.  
  126. ;;;;;;;;;;;;;;;
  127. ; Class Alias ;
  128. ;;;;;;;;;;;;;;;
  129.  
  130. alias Class {
  131.   var %class Class
  132.   var %prop $mprop($prop)
  133.   if !$mprop($prop) {
  134.     if ($IsPrivate(%class,INIT)) {
  135.  
  136.       var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  137.       maketok MAKETOK V Class
  138.       maketok MAKETOK V INIT
  139.       var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  140.  
  141.       var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  142.       var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  143.  
  144.       var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  145.       maketok MAKETOK V $*
  146.       var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  147.  
  148.       var %object $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  149.       - $inheritsFrom(%object,%class)
  150.       if ($hget(MAKETOK)) hfree MAKETOK
  151.       return %object
  152.     }
  153.     if ($hget(MAKETOK)) hfree MAKETOK
  154.   }
  155.   else if $IsPublic(%class,$fprop($mprop($prop))) {
  156.     var %object $1
  157.  
  158.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  159.     maketok MAKETOK V Class
  160.     maketok MAKETOK V $prop
  161.     maketok MAKETOK V %object
  162.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  163.  
  164.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  165.     ;;maketok MAKETOK V $fprop($mprop($prop), 2-)
  166.     maketok MAKETOK V %object
  167.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  168.  
  169.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 2
  170.     maketok MAKETOK V $*
  171.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  172.  
  173.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  174.   }
  175.   else {
  176.     if ($hget(MAKETOK)) hfree MAKETOK
  177.     if $isinstance($1) {
  178.       return $catch($1,MemberErr, $scriptline, $token($script,-1,92), $qt($fprop($mprop($prop))) is not a public member of class $qt(%Class))
  179.     }
  180.     else {
  181.       return $catch(%class,MemberErr, $scriptline, $token($script,-1,92), $qt($fprop($mprop($prop))) is not a public member of class $qt(%Class)).class  
  182.     }
  183.   }
  184. }
  185.  
  186. ;;;;;;;;;;;;;;;;;
  187. ; Class Methods ;
  188. ;;;;;;;;;;;;;;;;;
  189. alias Class.INIT {
  190.   var %params $1
  191.   var %htable MSL++
  192.   hinc -m %htable OBJECT_NUMBER
  193.   var %object $+(%htable,_,$hget(%htable,OBJECT_NUMBER))
  194.  
  195.   hadd -m %htable $+(%object,_,INIT)
  196.   return %object
  197. }
  198. alias Class.SET {
  199.   var %params $1
  200.   var %object $2
  201.   var %variable $3
  202.   var %value $$4
  203.  
  204.   if ($isInstance(%object)) {
  205.     var %prop $mprop(%params)
  206.     if $cprop(%prop,BVAR) || $cprop(%prop, B) {
  207.       hadd -mb %object %variable %value
  208.  
  209.       if $prop {
  210.         var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  211.         maketok MAKETOK V Class
  212.         maketok MAKETOK V $prop
  213.         maketok MAKETOK V %object
  214.         maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  215.         var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  216.  
  217.         var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  218.         ;maketok MAKETOK V %object
  219.         var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  220.  
  221.         var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 5
  222.         maketok MAKETOK V $*
  223.         var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  224.  
  225.         return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  226.       }
  227.     }
  228.     else {
  229.       echo -a Object: %object Varname: %variable Value: %value
  230.       hadd -m %object %variable %value
  231.       if $prop {
  232.         var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  233.         maketok MAKETOK V Class
  234.         maketok MAKETOK V $prop
  235.         maketok MAKETOK V %object
  236.         maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  237.         var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  238.  
  239.         var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  240.         ;maketok MAKETOK V %object
  241.         var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  242.  
  243.  
  244.         var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 5
  245.         maketok MAKETOK V $*
  246.         var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  247.  
  248.         return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  249.       }
  250.     }
  251.   }
  252.   if ($hget(MAKETOK)) hfree MAKETOK
  253. }
  254.  
  255. alias Class.GET {
  256.   var %params $1
  257.   var %object $2
  258.   var %variableName $3
  259.   var %bvar $4
  260.   if $cprop(%params,BVAR) || $cprop(%params,B) {
  261.     var %hget $hget(%object,%variableName,%bvar)
  262.  
  263.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  264.     maketok MAKETOK V Class
  265.     maketok MAKETOK V $prop
  266.     maketok MAKETOK V %object
  267.     maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  268.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  269.    
  270.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  271.     ;maketok MAKETOK V %object
  272.     $iif($cprop(%params,stack),maketok MAKETOK B %hget)
  273.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  274.  
  275.  
  276.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 5
  277.     maketok MAKETOK V $*
  278.     $iif(!$cprop(%params,stack), maketok MAKETOK B %hget)
  279.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  280.  
  281.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  282.   }
  283.   else {
  284.     - DEBUG: $1- TOKENS: $0 OBJECT: %object VARIABLE_NAME: %variableName BVAR: $4 STACK: $cprop(%params,STACK)
  285.     var %hget $hget(%object,%variableName)
  286.     if $prop {
  287.       var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  288.       maketok MAKETOK V Class
  289.       maketok MAKETOK V $prop
  290.       maketok MAKETOK V %object
  291.       maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  292.       var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  293.  
  294.       var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  295.       ;maketok MAKETOK V %object
  296.       $iif($cprop(%params,STACK),maketok MAKETOK V %hget)
  297.       var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  298.  
  299.  
  300.       var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 4
  301.       maketok MAKETOK V $*
  302.       $iif(!$cprop(%params,STACK), maketok MAKETOK V %hget)
  303.       var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  304.  
  305.       return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  306.     }
  307.     else {
  308.       if ($hget(MAKETOK)) hfree MAKETOK
  309.       return %hget
  310.     }
  311.   }
  312. }
  313.  
  314. alias Class.UNSET {
  315.   var %params $1
  316.   var %object $2
  317.   hdel %object $$3
  318.   if $prop {
  319.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  320.     maketok MAKETOK V Class
  321.     maketok MAKETOK V $prop
  322.     maketok MAKETOK V %object
  323.     maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  324.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  325.  
  326.  
  327.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  328.     ;maketok MAKETOK V %object
  329.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  330.  
  331.  
  332.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 4
  333.     maketok MAKETOK V $*
  334.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  335.  
  336.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  337.   }
  338.   if ($hget(MAKETOK)) hfree MAKETOK
  339. }
  340.  
  341.  
  342. alias Class_FREE_STACK {
  343.   if !$hfind(CLASS_FREE_STACK, $1-) {
  344.     hadd -m CLASS_FREE_STACK $1- 1
  345.     return 1
  346.   }
  347.   return 0
  348. }
  349. alias Class.FREE {
  350.   ;;;;;;;;;;;;;;;;;;;;;;
  351.   ; Do Destroying here ;
  352.   ;;;;;;;;;;;;;;;;;;;;;;
  353.   var %params $1
  354.   var %object $2
  355.   var %prop $mprop($prop)
  356.   if $cprop(%params,ALL) || $cprop(%params,A) {
  357.     if $hget(%object) {
  358.       var %y $hget(%object,0).item
  359.       while %y {
  360.         var %currentObject $hget(%object, $hget(%object,%y).ITEM)
  361.  
  362.         var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  363.         maketok MAKETOK V Class
  364.         maketok MAKETOK V FREE#ALL
  365.         maketok MAKETOK V %object
  366.         maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  367.         var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  368.  
  369.         var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  370.         maketok MAKETOK V %currentObject
  371.         var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  372.  
  373.         var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  374.         maketok MAKETOK V $*
  375.         var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  376.  
  377.         if $CLASS_FREE_STACK(%currentObject) {
  378.           - $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  379.         }
  380.         dec %y
  381.       }
  382.       if ($hget(CLASS_FREE_STACK)) hfree CLASS_FREE_STACK
  383.     }
  384.     hdel MSL++ %object $+ _INIT
  385.     if ($hget(%object)) hfree %object
  386.   }
  387.   else if $prop {
  388.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  389.     maketok MAKETOK V Class
  390.     maketok MAKETOK V $prop
  391.     maketok MAKETOK V %object
  392.     maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  393.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  394.  
  395.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  396.     maketok MAKETOK V %object
  397.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  398.  
  399.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  400.     maketok MAKETOK V $*
  401.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  402.  
  403.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  404.   }
  405.   if ($hget(MSL++,%object $+ _INIT)) hdel MSL++ %object $+ _INIT
  406.   if ($hget(%object)) hfree %object
  407.   if ($hget(MAKETOK)) hfree MAKETOK
  408. }
  409.  
  410.  
  411. ;;;;;;;;;;;;;;;;;
  412. ; Class Methods ;
  413. ;;;;;;;;;;;;;;;;;
  414.  
  415. alias Class.IMPORT {
  416.   var %params $1
  417.   var %objectDir $mircdir $+ MSL++
  418.   var %objectName $2
  419.   if !$exists(%objectDir) { mkdir %objectDir }
  420.   if $hget(%objectName) { return }
  421.   hmake %objectName
  422.   hload -b %objectName $+(%objectDir,\,%objectName,.obj)
  423.   if $hget(%objectName) {
  424.     if $prop {
  425.       var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  426.       maketok MAKETOK V Class
  427.       maketok MAKETOK V $prop
  428.       maketok MAKETOK V %objectName
  429.       maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  430.       var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  431.  
  432.       var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  433.       maketok MAKETOK V %objectName
  434.       var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  435.  
  436.       var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  437.       maketok MAKETOK V $*
  438.       var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  439.  
  440.       return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  441.  
  442.     }
  443.   }
  444.   if $prop {
  445.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  446.     maketok MAKETOK V Class
  447.     maketok MAKETOK V $prop
  448.     maketok MAKETOK V %objectName
  449.     maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  450.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  451.  
  452.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  453.     maketok MAKETOK V %objectName
  454.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  455.  
  456.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  457.     maketok MAKETOK V $*
  458.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  459.  
  460.     return  $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  461.   }
  462.   if ($hget(MAKETOK)) hfree MAKETOK
  463. }
  464.  
  465. alias Class.EXPORT {
  466.   var %params $1
  467.   var %objectDir $mircdir $+ MSL++
  468.   var %objectName $2
  469.   if !$exists(%objectDir) { mkdir %objectDir }
  470.   hsave -b %objectName $+(%objectDir,\,%objectName $+ .obj)
  471.   if $prop {
  472.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  473.     maketok MAKETOK V Class
  474.     maketok MAKETOK V $prop
  475.     maketok MAKETOK V %objectName
  476.     maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  477.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  478.  
  479.  
  480.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  481.     maketok MAKETOK V %objectName
  482.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  483.  
  484.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  485.     maketok MAKETOK V $*
  486.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  487.  
  488.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  489.   }
  490.   else {
  491.     if ($hget(MAKETOK)) hfree MAKETOK
  492.   }
  493. }
  494.  
  495. alias Class.CLONE {
  496.   var %params $1
  497.   var %objectDir $mircdir $+ MSL++
  498.   var %objectName $2
  499.   if !$exists(%objectDir) { mkdir %objectDir }
  500.   if $IsInstance(%objectName) {
  501.     var %object $Class
  502.     hsave -b %objectName $+(%objectDir,\,%objectName,.cpy)
  503.  
  504.     hload -mb %object $+(%objectDir,\,%objectName,.cpy)
  505.  
  506.     .remove $+(%objectDir,\,%objectName,.cpy)
  507.     if ($hget(MAKETOK)) hfree MAKETOK
  508.     return %object
  509.   }
  510.   if $prop {
  511.     var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  512.     maketok MAKETOK V Class
  513.     maketok MAKETOK V $prop
  514.     maketok MAKETOK V %objectName
  515.     maketok MAKETOK V $cprop(%params,IS_OBJECT_CALL)
  516.     var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  517.  
  518.     var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  519.     maketok MAKETOK V %objectName
  520.     var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  521.  
  522.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  523.     maketok MAKETOK V $*
  524.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  525.  
  526.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  527.   }
  528.  
  529.   if ($hget(MAKETOK)) hfree MAKETOK
  530. }
  531.  
  532. ;;;;;;;;;;;;;
  533. ; End Class ;
  534. ;;;;;;;;;;;;;
  535.  
  536. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  537. ; Description: Returns whether or not a class member ;
  538. ; is public.                                         ;
  539. ;                                                    ;
  540. ; Usage: $IsPublic(<Class>,<Member>)                 ;
  541. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  542. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  543. alias IsPublic return $isalias($+($1.,$2.,PUBLIC))
  544.  
  545. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  546. ; Description: Returns whether or not a class member ;
  547. ; is private.                                        ;
  548. ;                                                    ;
  549. ; Usage: $IsPrivate(<Class>,<Member>)                ;
  550. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  551. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  552. alias IsPrivate return $isalias($+($1.,$2))
  553.  
  554. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  555. ; Description: Returns whether or not an instance    ;
  556. ; exists in memory                                   ;
  557. ;                                                    ;
  558. ; Usage: $IsInstance(<Instance>)                     ;
  559. ; Example: if (!$IsInstance(%x)) %x = $Player        ;
  560. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  561. alias IsClass return $isalias($1)
  562.  
  563.  
  564. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  565. ; Description: Called from the class constructor to  ;
  566. ; let the object know that the specified object      ;
  567. ; inherits from the specified class                  ;
  568. ;                                                    ;
  569. ; Usage: $InheritsFrom(<Object>,<Class>)             ;
  570. ; Example: $InheritsFrom(%instance,Player)           ;
  571. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  572. alias InheritsFrom hadd -m MSL++ $+($1_,INIT) $2 $hget(MSL++,$+($1.,INIT))
  573.  
  574. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  575. ; Description: Returns whether or not an instance is ;
  576. ; an instance of the specified class                 ;
  577. ;                                                    ;
  578. ; Usage: $IsInstanceOf(<Instance>,<Class>)           ;
  579. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  580. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  581. alias IsInstanceOf return $findtok($hget(MSL++,$1_INIT),$2,0,32)
  582.  
  583.  
  584. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  585. ; Description: Returns whether or not an instance    ;
  586. ; exists in memory                                   ;
  587. ;                                                    ;
  588. ; Usage: $IsInstance(<Instance>)                     ;
  589. ; Example: if (!$IsInstance(%x)) %x = $Player        ;
  590. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  591. alias IsInstance return $token($hget(MSL++, $1_INIT),$iif($2 != $null,$2,1),32)
  592.  
  593.  
  594. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  595. ; Description: Called when ever an error is caught   ;
  596. ;                                                    ;
  597. ; Usage: $catch(<Instance>,<Error>,<Message>)        ;
  598. ; Example: if (!$IsInstanceOf(%Player,Player)) {     ;
  599. ; $catch(%Player,InstanceErr,Object %player is not   ;
  600. ;  an instance of class Player)                      ;
  601. ; }                                                  ;
  602. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  603. alias CATCH {
  604.   var %error $2,%message $5,%instanceOrClass $1,%scriptLine $3, %scriptDir $4, %isClass $iif($mprop($prop) == class, $true,$false)
  605.  
  606.   if $isInstance(%instanceOrClass) && !%isClass {
  607.     var %x 1
  608.     var %inheritance $hget(MSL++,$+(%instanceOrClass,_,INIT))
  609.     while $token(%inheritance,%x,32) {
  610.       var %currentClass $v1
  611.       var %currentClassException $+(%currentClass,.EXCEPTION.,%error)
  612.       if $isalias(%currentClassException) {
  613.         var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  614.         maketok MAKETOK V %currentClass $+ .EXCEPTION
  615.         maketok MAKETOK V $+(%error,.,$prop)
  616.         maketok MAKETOK V %instanceOrClass
  617.         var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  618.  
  619.         var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  620.         var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  621.  
  622.         var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  623.         maketok MAKETOK V $*
  624.         var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  625.  
  626.         return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  627.       }
  628.       inc %x
  629.     }
  630.   }
  631.   else if %isClass && $isClass(%instanceOrClass) {
  632.     if $isalias($+(%instanceOrClass,.EXCEPTION.,%error)) {
  633.       var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  634.       maketok MAKETOK V %instanceOrClass $+ .EXCEPTION
  635.       maketok MAKETOK V $+(%error,.,$mprop($prop,1))
  636.       var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  637.  
  638.       var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  639.       var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  640.  
  641.       var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  642.       maketok MAKETOK V $*
  643.       var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  644.  
  645.       return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  646.     }
  647.   }
  648.   if ($hget(MAKETOK)) hfree MAKETOK
  649. }
  650. ;;;;;;;;;;;;;
  651. ; End Catch ;
  652. ;;;;;;;;;;;;;
  653.  
  654. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  655. ; Description: Used to call the first found method   ;
  656. ; associated with an objects inheritance tree...     ;
  657. ;                                                    ;
  658. ; Usage: $Object(<Instance>,..).<Method>             ;
  659. ; Example: $Object(%stack,$2).add                    ;
  660. ; Equivelent: $List(%stack,$2).add                   ;
  661. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  662. alias OBJECT {
  663.   var %object $1
  664.   var %inheritance $hget(MSL++,$+(%object,_,INIT))
  665.   var %iterator 1
  666.   if $mprop($prop) {
  667.     while $token(%inheritance,%iterator,32) {
  668.       var %currentClass $v1
  669.       if $isalias(%currentClass $+ . $+ $fprop($mprop($prop)) $+ .PUBLIC) {
  670.         var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  671.         maketok MAKETOK V %currentClass
  672.         ;echo -a PROP IS: $+($mprop($prop),$chr(35),IS_OBJECT_CALL,$iif($mprop($prop,1),. $+ $v1))
  673.         maketok MAKETOK V $+($mprop($prop),$chr(35),IS_OBJECT_CALL,$iif($mprop($prop,1),. $+ $v1))
  674.         maketok MAKETOK V %object
  675.         var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  676.  
  677.         var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  678.         var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  679.  
  680.         var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  681.         maketok MAKETOK V $*
  682.         var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  683.  
  684.         return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  685.       }
  686.       inc %iterator
  687.     }
  688.   }
  689.   else {
  690.     if ($hget(MAKETOK)) hfree MAKETOK
  691.     return $catch(%object,NoOperation,$scriptline, $token($script,-1,92),there is no operation specified for this object call!)
  692.   }
  693.   if ($hget(MAKETOK)) hfree MAKETOK
  694.   return $catch($%object,MemberErr,$scriptline, $token($script,-1,92),$mprop($prop) is not a public member of $isinstance($1))
  695. }
  696.  
  697. ;;;;;;;;;;;;;;
  698. ; End Object ;
  699. ;;;;;;;;;;;;;;
  700.  
  701. ;;;;;;;;;;;;;;;;;;;;
  702. ; Helper Functions ;
  703. ;;;;;;;;;;;;;;;;;;;;
  704. alias - { !noop $1- }
  705. alias + { $iif($Window(@Debug),echo @Debug,!noop) $iif($1-,$v1,$crlf) }
  706.  
  707. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  708. ; Code for passing dynamic variables to the $meval function ;
  709. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  710. ;      var %astart $iif($hget(MAKETOK, COUNT),$v1,0)         ; For passing variables to the $meval function (or your own function)                      ;
  711. ;      maketok MAKETOK V ClassName                           ;                                                                                          ;
  712. ;      maketok MAKETOK V $prop                               ;                                                                                          ;
  713. ;      var %aend $iif($hget(MAKETOK, COUNT),$v1,0)           ;                                                                                          ;
  714. ;                                                            ;                                                                                          ;
  715. ;      var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)         ; For passing variables before the $N- tokens are passed (any number of variables allowed  ;
  716. ;      maketok MAKETOK V SomeValue                           ;    these variables will be before the $N- tokens.                                        ;
  717. ;      maketok MAKETOK V SomeValue2                          ;                                                                                          ;
  718. ;      var %bend $iif($hget(MAKETOK, COUNT),$v1,0)           ;                                                                                          ;
  719. ;                                                            ;                                                                                          ;
  720. ;      var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 1      ; Starting token number (if trying to pass $2- to a function you put + 2 instead of  +1    ;
  721. ;      maketok MAKETOK V $*                                  ;    (which is for tokens $1-)                                                             ;
  722. ;      var %cend $iif($hget(MAKETOK,COUNT),$v1,0)            ;                                                                                          ;
  723. ;                                                           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;            
  724. ;      return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend) ;
  725. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  726. alias meval {
  727.   var %tokentable $1
  728.  
  729.   var %astart $2 + 1
  730.   var %aend $3
  731.   var %acount $calc(%aend - %astart + 1)
  732.  
  733.   var %bstart $4 + 1
  734.   var %bend $5
  735.   var %bcount $calc(%bend - %bstart + 1)
  736.  
  737.   var %cstart $6
  738.   var %cend $$7
  739.   var %ccount $calc(%cend - %cstart + 1)
  740.  
  741.   var %aregex $regsubex($str(.,%acount),/(.)/g,$+($,hget,$chr(40),%tokentable,$chr(44),$calc(\n + %astart - 1),$chr(41),$chr(35)))
  742.   var %bregex $regsubex($str(.,%bcount),/(.)/g,$+($,hget,$chr(40),%tokentable,$chr(44),$calc(\n + %bstart - 1),$chr(41),$chr(35)))
  743.   var %cregex $regsubex($str(.,%ccount),/(.)/g,$+($,hget,$chr(40),%tokentable,$chr(44),$calc(\n + %cstart - 1),$chr(41),$chr(35)))
  744.  
  745.   tokenize 35 %aregex
  746.  
  747.   var %class [ [ $1 ] ]
  748.   var %prop [ [ $2 ] ]
  749.   var %object [ [ $3 ] ]
  750.   var %isObjectCall [ [ $4 ] ]
  751.   - CLASS: %class PROP: %prop OBJECT: %object FPROP: $fprop($mprop(%prop)) ISOBJECTCALL: %isObjectCall
  752.  
  753.   if !%isObjectCall {
  754.     if $isPublic(%class,$fprop($mprop(%prop))) || ($isPrivate(%class,$fprop($mprop(%prop))) && ($fprop($mprop(%prop)) == INIT || $token(%class,2,46) == EXCEPTION))  {
  755.       var %regex $+($,%class,.,$fprop($mprop(%prop)),$chr(40),$iif($fprop($mprop(%prop),2-),$v1 $+ $chr(44),$null $+ $chr(44)), $left($replace(%bregex %cregex,$chr(35),$chr(32) $chr(44) $chr(32)),-5),$chr(41),$iif($mprop(%prop,1),$+(.,$v1)))
  756.       - REGEX1 %regex MAKETOK COUNT: $hget(MAKETOK,COUNT)
  757.       return [ [ %regex ] ]
  758.     }
  759.   }
  760.   else {
  761.     var %regex $+($,OBJECT,$chr(40),$left($replace(%bregex %cregex,$chr(35),$chr(32) $chr(44) $chr(32)),-5),$chr(41),$iif(%prop,$+(.,$v1)))
  762.     return [ [ %regex ] ]
  763.   }
  764.   + 4ERROR: NOT PUBLIC OR (PRIVATE && INIT)
  765.   if $isInstance(%object) {
  766.     return $catch(%object,MemberErr, $scriptline, $token($script,-1,92), $qt($fprop($mprop($prop))) is not a public member of %Class)
  767.   }
  768.   else {
  769.     return $catch(%class, MemberErr, $scriptline, $token($script,-1,92), $qt($fprop($mprop($prop))) is not a public member of %Class).class
  770.   }
  771. }
  772. alias cprop {
  773.   return $istok($1,$$2,35)
  774. }
  775. alias mprop {
  776.   return $iif($2,$token($1,2-,46),$token($1,1,46))
  777. }
  778. alias fprop {
  779.   return $token($1,$iif($2,$2,1),35)
  780. }
  781. alias maketok {
  782.   hinc -m $1 COUNT
  783.   hadd -m $+ $iif($2 == B,b) $1 $hget($1,COUNT) $3-
  784. }
  785. ;;;;;;;;;;;;;;;;;;;;;;;;
  786. ; END HELPER FUNCTIONS ;
  787. ;;;;;;;;;;;;;;;;;;;;;;;;
  788. alias example {
  789.   ;inputs:
  790.   ;any number of inputs / 4
  791.  
  792.   var %astart $iif($hget(MAKETOK, COUNT),$v1,0)
  793.   maketok MAKETOK V MAKETOKTEST
  794.   maketok MAKETOK V $str(TEST., $floor($calc($0 / 4)))
  795.   var %aend $iif($hget(MAKETOK, COUNT),$v1,0)
  796.  
  797.   var %bstart $iif($hget(MAKETOK, COUNT),$v1,0)
  798.   maketok MAKETOK V OBJECT_REFERENCE
  799.   var %bend $iif($hget(MAKETOK, COUNT),$v1,0)
  800.  
  801.   var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  802.   maketok MAKETOK V $*
  803.   var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  804.  
  805.   return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  806. }
  807.  
  808. alias MAKETOKTEST.TEST {
  809.   var %object $1
  810.  
  811.   echo -a -TEST-
  812.   echo -a OBJECT: %object
  813.   echo -a  $+ $2 @ $3
  814.   echo -a  $+ $4 @ $5
  815.   echo -a -END TEST-
  816.  
  817.   if $prop {
  818.     var %astart $iif($hget(MAKETOK,COUNT),$v1,0)
  819.     maketok MAKETOK V maketoktest
  820.     maketok MAKETOK V $prop
  821.     var %aend $iif($hget(MAKETOK,COUNT),$v1,0)
  822.  
  823.     var %bstart $iif($hget(MAKETOK,COUNT),$v1,0)
  824.     maketok MAKETOK V %object
  825.     var %bend $iif($hget(MAKETOK,COUNT),$v1,0)
  826.  
  827.     var %cstart $iif($hget(MAKETOK,COUNT),$v1,0) + 6
  828.     maketok MAKETOK V $*
  829.     var %cend $iif($hget(MAKETOK,COUNT),$v1,0)
  830.  
  831.     echo -a TOKEN-COUNT $0 : A-START: %astart A-END: %aend B-START: %bstart B-END: %bend C-START: %cstart CEND: %cend
  832.     return $meval(MAKETOK,%astart,%aend,%bstart,%bend,%cstart,%cend)
  833.   }
  834.   if ($hget(MAKETOK)) hfree MAKETOK
  835. }
  836. ;;;;;;;;;;;;;;;;;;;;;;
  837. ; END TEST FUNCTIONS ;
  838. ;;;;;;;;;;;;;;;;;;;;;;
  839.  
  840.  
  841. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  842. ; mSL++ Class Downloader and Installer ;
  843. ; code...                               ;
  844. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  845.  
  846. dialog -l mslPlusPlusDownloaderAndInstaller {
  847.   title "mSL++ Downloader and Installer"
  848.   size -1 -1 340 256
  849.   option dbu
  850.   list 1, 3 13 203 72, size
  851.   text List of mSL++ Classes not Installed, 7, 4 4 201 9, center
  852.   button "Download", 3, 2 147 202 12
  853.   text List of mSL++ Classes Installed, 10, 4 161 333 10, center
  854.   button "Uninstall", 6, 4 243 333 12
  855.   edit "", 4, 206 13 131 145
  856.   text "Class Information", 9, 208 4 129 9, center
  857.   text "Classes Dependant on Selected Class not Installed that are not Installed", 8, 3 86 202 8, center
  858.   list 2, 3 96 202 50, size
  859.   list 5, 3 171 335 72, size
  860. }
  861.  
Add Comment
Please, Sign In to add comment