home *** CD-ROM | disk | FTP | other *** search
/ napalm.napnet.hu / 2015-02-12.napalm.napnet.hu.tar / napalm.napnet.hu / programok / kommunikacio / mpp700.exe / atma.sa < prev    next >
Text File  |  2004-03-05  |  73KB  |  1,808 lines

  1. ;                                                     ,d,
  2. ;                                                   ,&&HR.
  3. ;                                                 oHRMH&6b
  4. ;                                              ./RM&M&DM9H?
  5. ;                                            _dMRMHHRM9RMHM,
  6. ;                                          ,&M6HM6M/9HM9HHM9.
  7. ;                                        ,HMHHHHHH?  ?M9MHHMb
  8. ;                                     .dHMMH6HMMH?    ?MRMRMML       ._____________ _______.  .________.   _________
  9. ;                                   .dMHM9HM9M9H/      `MMMM6M|      JM#""MMMMP"*MM ``HMPMMM, HM&MMMH''     ]MMMMM[
  10. ;                                 ,&MMMMHMM9MMM'        `MMHMMM,     ^'   MMMM:   `   |M|`MMMdMP:MMMF     .dMP'?MMMb.
  11. ;                               ,HMMMMHMMMMMMH'          `HMMMMH          MMMM:       JML ?MMMH :MMM6    ,HM*****MMMH\
  12. ;                            .dHMMM6HMMMHMHMM'            `9MMMMb      .~######b.   ~d###b~?##:=#####b~-d####~ -d######~.
  13. ;                          .dMMMMMMMMMMMMMMM'               9MMMM?
  14. ;                      ._o#MMMMMMH9MMMMMMMM'                 *MMMM,
  15. ;                 ._o#HMMMMMMMMMMMMMMMMMMM'                   ?MMMH.                  
  16. ;            ._o#HMMMMMMMMMMMMMMMMMMMMMMM'                     `MMMb                  F I L E S E R V E R
  17. ;        _odHMMMMMMMMMMMMMMHH###*""""`""'                       `HMML                ...........................
  18. ;   _odHHH###*""""`""""                                          `HMM,                
  19. ;  "                                                              `HMM.
  20. ;                                                                   9MH
  21. ;                                                                    ?Mb
  22. ;                                                                     ?M|
  23. ;                                                                      `M,
  24. ;                                                                       `&.
  25. ;                                                                        `\
  26. ;                                                                         `|
  27. ;                           Atma FileServer for mIRC 6.02+
  28. ;                           Programmed by Correl J. Roush
  29. ;                           correlr@phoenixinquis.net
  30. ;                           www.phoenixinquis.net
  31. ;
  32. ; ASCII Art created using Jih-Shin Ho's DOS-based program "DISPLAY"
  33.  
  34. #atma.sa off
  35. [addon]
  36. name=Atma FileServer
  37. id=atma
  38. category=FileServing
  39. version=1.372
  40. author=Correl J. Roush
  41. helpfile=ATMA.HLP
  42.  
  43. [dirs]
  44.  
  45. [scriptfiles]
  46. 1=atma.sa
  47.  
  48. [miscfiles]
  49. 1=ATMA.HLP
  50. 2=Readme.txt
  51. 3=versioninfo.txt
  52.  
  53. [configfiles]
  54. 1=atma.dat
  55. 2=Atma.stp
  56. 3=fscache.dat
  57.  
  58. [atma.sa]
  59. #atma.sa off
  60.  
  61. ; __________________________
  62. ;/``````````````````````````
  63. ;          Dialogs
  64.  
  65. dialog atma_config {
  66.   title $Atma
  67.   size -1 -1 283 147
  68.   option dbu
  69.   tab "Server Config", 1, 2 -1 278 138
  70.   box "", 156, 5 87 273 26, tab 1
  71.   check "Enable Ad", 158, 13 97 36 10, tab 1 push
  72.   radio "Normal", 163, 67 97 30 10, group tab 1
  73.   radio "CTCP", 164, 98 97 25 10, tab 1
  74.   text "Show ad every", 159, 143 98 39 8, tab 1
  75.   edit "", 160, 183 97 23 10, tab 1 right
  76.   radio "Seconds", 161, 214 101 34 9, group tab 1
  77.   radio "Minutes", 162, 214 93 33 9, tab 1
  78.   edit $Atma(InfoLine), 24, 8 76 199 10, tab 1 autohs
  79.   box "Server Info", 23, 5 69 205 19, tab 1
  80.   box "Network/Channel Setup", 166, 212 15 66 73, tab 1
  81.   button "Add", 168, 216 77 28 9, tab 1
  82.   button "Delete", 169, 247 77 28 9, tab 1
  83.   list 167, 215 45 60 31, tab 1 size
  84.   box "Configuration", 188, 113 15 97 54, tab 1
  85.   check "Respond to !list", 22, 116 54 49 10, tab 1
  86.   check "Respond to @find / @locator", 190, 116 44 87 10, tab 1
  87.   check "Channel Enforced", 189, 116 34 55 10, tab 1
  88.   combo 194, 44 56 60 37, tab 1 size drop
  89.   text "Queue using", 195, 8 58 33 8, tab 1
  90.   text "Total", 179, 18 45 18 8, tab 1
  91.   edit $Atma(maxTSends), 182, 39 44 20 10, tab 1 right
  92.   edit $Atma(maxTQueues), 183, 62 44 20 10, tab 1 right
  93.   edit $Atma(maxUsers), 193, 84 44 20 10, tab 1 right
  94.   edit 1, 192, 84 33 20 10, tab 1 read right
  95.   edit $Atma(MaxUQueues), 184, 62 33 20 10, tab 1 right
  96.   edit $Atma(maxUSends), 181, 39 33 20 10, tab 1 right
  97.   text "Users", 180, 18 35 18 8, tab 1
  98.   text "Sends", 186, 40 23 18 8, tab 1
  99.   text "Queues", 185, 63 23 20 8, tab 1
  100.   text "Sessions", 191, 85 23 23 8, tab 1
  101.   box "Fserv Limits", 187, 5 15 106 54, tab 1
  102.   combo 197, 215 23 59 46, tab 1 size drop
  103.   check "Use Global Sends/Queues", 198, 116 24 79 10, disable tab 1
  104.   button "Add", 199, 216 35 28 9, tab 1
  105.   button "Delete", 200, 247 35 28 9, tab 1
  106.   tab "Advanced Config", 2
  107.   check "FileServer Chat", 107, 8 17 50 10, tab 2
  108.   check "Enable Channel Enforcer", 108, 8 27 74 10, tab 2
  109.   check "Limit @find / @locator to", 109, 8 37 71 10, tab 2
  110.   box "/dccallow Enforcer (DALNet Only)", 110, 163 15 115 37, tab 2
  111.   combo 111, 166 23 109 29, tab 2 size drop
  112.   box "Minimum CPS", 112, 163 53 115 34, tab 2
  113.   check "Drop sends that have been going below", 113, 166 62 106 10, tab 2
  114.   edit $Atma(MinCPS), 114, 174 73 24 10, tab 2 right
  115.   text "cps for", 115, 199 75 21 8, tab 2
  116.   edit $Atma(MinCPS.Secs), 116, 221 73 24 10, tab 2 right
  117.   text "seconds.", 117, 246 75 25 8, tab 2
  118.   box "Maximum CPS", 118, 163 88 115 25, tab 2
  119.   check "Limit sends to a max of", 119, 166 99 66 10, tab 2
  120.   edit $Atma(MaxCPS), 120, 232 99 24 10, tab 2 right
  121.   text "kb/s", 121, 257 101 18 8, tab 2
  122.   edit $Atma(@Find.Results), 129, 79 36 23 10, tab 2 right
  123.   text "results", 131, 104 37 19 8, tab 2
  124.   text "Tempban lasts for", 147, 170 38 47 8, tab 2
  125.   edit $Atma(DCCAllowEnforcer.TempBan), 148, 218 37 28 10, tab 2
  126.   text "seconds.", 149, 247 38 26 8, tab 2
  127.   check "Enable FServ find comand", 152, 8 48 74 10, tab 2
  128.   edit $Atma(fs_find.Results), 154, 57 57 23 10, tab 2 right
  129.   text "results", 155, 82 59 19 8, tab 2
  130.   box "QuickSearch Cache", 49, 5 88 156 25, tab 2
  131.   button "Rebuild Now", 128, 100 97 41 11, tab 2
  132.   check "Rebuild on mIRC startup", 127, 10 98 68 10, tab 2
  133.   text "Limit to", 196, 36 59 21 8, tab 2
  134.   tab "Statistics", 3
  135.   box "", 134, 5 15 273 98, tab 3
  136.   text "Leeched Files", 135, 50 46 41 8, tab 3
  137.   text "Leeched Bytes", 136, 50 55 41 8, tab 3
  138.   text "Record Speed", 137, 50 64 41 8, tab 3
  139.   text "Hits", 138, 50 73 41 7, tab 3
  140.   edit "", 146, 92 72 138 9, tab 3 read autohs right
  141.   edit "", 145, 92 63 138 9, tab 3 read autohs right
  142.   edit "", 144, 92 54 138 9, tab 3 read autohs right
  143.   edit "", 143, 92 45 138 9, tab 3 read autohs right
  144.   button "Reset", 139, 199 86 31 9, tab 3
  145.   tab "Triggers", 4
  146.   box "Trigger Configuration", 33, 5 15 273 98, tab 4
  147.   box "Channel Setup", 35, 209 20 66 65, tab 4
  148.   check "All active channels", 39, 213 73 60 10, disable tab 4
  149.   button "Add", 37, 213 63 28 9, disable tab 4
  150.   button "Delete", 38, 244 63 28 9, disable tab 4
  151.   list 36, 212 27 60 35, disable tab 4 size
  152.   button "...", 45, 181 88 20 9, disable tab 4
  153.   button "...", 41, 181 64 20 9, disable tab 4
  154.   edit "", 43, 7 88 169 10, tab 4 read autohs
  155.   button "Edit File", 75, 75 79 28 9, disable tab 4
  156.   button "Unset", 74, 44 79 28 9, disable tab 4
  157.   text "MOTD File", 44, 8 79 33 8, disable tab 4
  158.   edit "", 40, 7 64 169 10, tab 4 read autohs
  159.   text "Root Directory", 42, 9 56 49 8, disable tab 4
  160.   button "Add", 71, 8 37 28 9, tab 4
  161.   button "Rename", 72, 39 37 28 9, disable tab 4
  162.   button "Delete", 73, 70 37 28 9, disable tab 4
  163.   check "This trigger is enabled", 34, 73 24 72 8, disable tab 4
  164.   combo 32, 8 24 60 43, tab 4 sort drop
  165.   tab "FServ Access", 151
  166.   box "Access Permissions", 98, 5 35 273 78, tab 151
  167.   list 100, 8 45 238 65, tab 151 sort size
  168.   button "Remove", 150, 250 71 23 11, tab 151
  169.   button "Edit", 102, 250 58 23 11, tab 151
  170.   button "Add", 101, 250 45 23 11, tab 151
  171.   box "", 104, 5 15 273 20, tab 151
  172.   radio "Denied Hosts", 133, 202 21 50 10, tab 151
  173.   radio "Allowed Hosts", 132, 143 21 50 10, tab 151
  174.   combo 103, 8 21 86 42, tab 151 size drop
  175.   tab "Ad Style", 165
  176.   box "Style Preview", 54, 5 15 273 20, tab 165
  177.   text "Format Preset:", 58, 8 44 37 8, tab 165
  178.   edit $Atma(FormatString), 57, 7 54 268 10, tab 165 autohs
  179.   check "Always strip color (automatically done on mode +c channels)", 60, 8 64 180 10, tab 165
  180.   edit The _/\tma FileServer includes the following variables for formatstring parsing: $crlf &Atma.Triggers &Atma.Users &Atma.Sends &Atma.Queues &Atma.InfoLine, 62, 6 78 272 26, tab 165 read multi
  181.   link "Click here for help on the formatstring parser", 55, 87 106 106 8, tab 165
  182.   button "Save", 63, 152 43 25 9, tab 165
  183.   button "Delete", 64, 178 43 25 9, tab 165
  184.   button "Preview", 65, 204 43 25 9, tab 165
  185.   combo 59, 50 43 90 52, tab 165 size drop
  186.   box FormatString, 56, 5 36 273 39, tab 165
  187.   icon 106, 9 23 264 8
  188.   text "Programmed by Correl J. Roush, 2002", 6, 3 139 93 8, disable
  189.   link "http://www.phoenixinquis.net/", 27, 201 139 77 8
  190.   button "okcancel", 66, 101 140 38 8, hide ok cancel
  191.   check "Start file server on connect", 25, 22 121 79 10
  192.   check "Enable FileServer", 30, 149 119 110 12, push
  193.   box "", 29, 146 113 116 21
  194.   menu "&File", 122
  195.   item "E&xit", 123, 122, ok cancel
  196.   menu "&Help", 124
  197.   item "&Atma Help", 125, 124
  198.   item "&mIRC Fserv Help", 126, 124
  199. }
  200.  
  201. on *:dialog:atma_config:init:0:{
  202.   $iif($Atma(StartOnConnect),did -c atma_config 25)
  203.   $iif($Atma(Active),did -c atma_config 30)
  204.   $iif($Atma(FServChat),did -c atma_config 107)
  205.   $iif($Atma(ChannelEnforcer),did -c atma_config 108)
  206.   $iif($Atma(fs_find),did -c atma_config 152)
  207.   didtok $dname 111 44 Notify and cancel send,Tempban/cancel all sends/clear queues
  208.   if ($Atma(DCCAllowEnforcer) == Notify) { did -c $dname 111 1 }
  209.   if ($Atma(DCCAllowEnforcer) == Ban) { did -c $dname 111 2 }
  210.   if ($Atma(MinCPS.Enabled)) {
  211.     did -c $dname 113
  212.     did -e $dname 114,116
  213.   }
  214.   if ($Atma(MaxCPS.Enabled)) {
  215.     did -c $dname 119
  216.     did -e $dname 120
  217.   }
  218.   updateStats
  219.   $iif($Atma(QuickSearchRefreshOnStart),did -c atma_config 127)
  220.   Atma.cfgTriggers
  221.   did -c $dname 132
  222.   updateAccess
  223.   $iif($readini($Atma.ini,nickComp,stripcolor),did -c atma_config 60)
  224.   didtok $dname 194 44 Number Of Files,FileSize (MB)
  225.   did $iif($Atma(Active),-b,-e) $dname 194
  226.   did -h $dname 106
  227.   did -g $dname 106 $formatstr_preview
  228.   updateChans
  229.   updateStyle
  230. }
  231.  
  232. on *:dialog:atma_config:menu:125:Atma.Help
  233. on *:dialog:atma_config:menu:126:help /fserve
  234.  
  235. on *:dialog:atma_config:sclick:1,2,3,4,151,165:{
  236.   did $iif($did == 165,-v,-h) $dname 106
  237. }
  238.  
  239. on *:dialog:atma_config:edit:*:{
  240.   $iif($did == 181,Atma maxUSends $did($dname,$did))
  241.   $iif($did == 184,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .maxUQueues $did($dname,$did))
  242.   $iif($did == 182,Atma maxTSends $did($dname,$did))
  243.   $iif($did == 183,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .maxTQueues $did($dname,$did))
  244.   $iif($did == 160,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .Interval $did($dname,$did))
  245.   $iif($did == 24,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .InfoLine $did($dname,$did))
  246.   $iif($did == 51,Atma QuickSearchRefresh.Interval $did($dname,$did))
  247.   $iif($did == 57,Atma FormatString $did($dname,$did))
  248.   $iif($did == 193,Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .maxUsers $did($dname,$did))
  249.   $iif($did == 129,Atma @Find.Results $did($dname,$did))
  250.   $iif($did == 153,Atma fs_find.Results $did($dname,$did))
  251.   $iif($did == 114,Atma MinCPS $did($dname,$did))
  252.   $iif($did == 116,Atma MinCPS.Secs $did($dname,$did))
  253.   $iif($did == 120,Atma MaxCPS $did($dname,$did))
  254.   $iif($did == 148,Atma DCCAllowEnforcer.TempBan $did($dname,$did))
  255. }
  256.  
  257. on *:dialog:atma_config:sclick:158:{
  258.   Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .EnableAd $did($dname,$did).state
  259.   updateChans $did($dname,197).sel $did($dname,167).sel
  260. }
  261.  
  262. on *:dialog:atma_config:sclick:162:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .IntervalUnit minutes
  263. on *:dialog:atma_config:sclick:163:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .TriggerType Normal
  264. on *:dialog:atma_config:sclick:164:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .TriggerType CTCP
  265. on *:dialog:atma_config:sclick:161:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .IntervalUnit seconds
  266. on *:dialog:atma_config:sclick:22:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .RespondToList $did($dname,$did).state
  267. on *:dialog:atma_config:sclick:25:Atma StartOnConnect $did($dname,$did).state
  268. on *:dialog:atma_config:sclick:26:Atma ClearQueuesOnStart $did($dname,$did).state
  269. on *:dialog:atma_config:sclick:105:Atma.Activate
  270. on *:dialog:atma_config:sclick:194:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .QueueUsing $iif($did($dname,$did).sel == 1,FileCount,FileSize)
  271. on *:dialog:atma_config:sclick:27:run http://www.phoenixinquis.net/
  272. on *:dialog:atma_config:sclick:30:{
  273.   $iif($did($dname,$did).state,Atma.Activate,Atma.Deactivate)
  274.   did $iif($Atma(Active),-c,-u) $dname 30
  275.   did $iif($Atma(Active),-b,-e) $dname 194
  276. }
  277. on *:dialog:atma_config:sclick:167:{
  278.   updateChans $did($dname,197).sel $did($dname,$did).sel
  279.   did $iif($did($dname,$did).seltext == *,-e,-b) $dname 181,182
  280. }
  281. on *:dialog:atma_config:sclick:168:{
  282.   var %chan = $$?="Enter a channel to configure"
  283.   $iif(!%chan,return)
  284.   if (!$regex(%chan,^[#&][^ ]*?$)) {
  285.     _errorbox Not a valid channel name
  286.     return
  287.   }
  288.   if ($istok($Atma.Channels($did($dname,197).seltext),%chan,5)) {
  289.     _errorbox Channel has already been added
  290.     return
  291.   }
  292.   Channel.Copy $did($dname,197) $+ . $+ $did($dname,167).seltext $did($dname,197) $+ . $+ %chan
  293.   updateChans $did($dname,197).sel $findtok($Atma.Channels($did($dname,197).seltext),%chan,5)
  294.   var %delay = $iif($Atma.Channels($did($dname,197).seltext,%chan).IntervalUnit == seconds,$Atma.Channels($did($dname,197).seltext,%chan).Interval,$calc($Atma.Channels($did($dname,197).seltext,%chan).Interval * 60))
  295.   .timer_/\tma. $+ %chan 0 %delay Atma.Advertise %chan
  296.  
  297. }
  298. on *:dialog:atma_config:sclick:169:{
  299.   if ($did($dname,167).seltext == *) {
  300.     _errorbox '*' is a special system identifier for default settings. It may not be deleted.
  301.     return
  302.   }
  303.   .timer_/\tma. $+ $did($dname,167).seltext off
  304.   Atma.Config -rw Channels. $+ $did($dname,197) $+ . $+ $did($dname,167).seltext $+ *
  305.   updateChans $did($dname,197).sel
  306. }
  307. on *:dialog:atma_config:sclick:107:Atma FServChat $did($dname,$did).state
  308. on *:dialog:atma_config:sclick:108:Atma ChannelEnforcer $did($dname,$did).state
  309. on *:dialog:atma_config:sclick:190:Atma.Config Channels. $+ $did($dname,197).seltext $+ . $+ $did($dname,167).seltext $+ .@Find $did($dname,$did).state
  310. on *:dialog:atma_config:sclick:152:Atma fs_find $did($dname,$did).state
  311. on *:dialog:atma_config:sclick:113:{
  312.   Atma MinCPS.Enabled $did($dname,$did).state
  313.   .timer_/\tma.MinCPS $iif($Atma(MinCPS.Enabled),0 5 Atma.CheckMinCPS,off)
  314. }
  315. on *:dialog:atma_config:sclick:119:{
  316.   Atma MaxCPS.Enabled $did($dname,$did).state
  317.   .dcc maxcps $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0)
  318. }
  319. on *:dialog:atma_config:sclick:111:{
  320.   $iif($did($dname,$did).sel == 1,Atma DCCAllowEnforcer Notify, Atma DCCAllowEnforcer Ban)
  321. }
  322. on *:dialog:atma_config:sclick:197:{
  323.   updateChans $did($dname,$did).sel
  324. }
  325. on *:dialog:atma_config:sclick:199:{
  326.   ; Add network
  327.   var %newnet = $dialog(atma_networks,atma_networks)
  328.   $iif(!%newnet,return)
  329.   if ($istok($Atma.Networks,%newnet,5)) {
  330.     _errorbox The IRC network ' $+ %newnet $+ ' is already configured.
  331.     return
  332.   }
  333.   Channel.setDefault %newnet *
  334.   updateChans $findtok($Atma.Networks,%newnet,5)
  335. }
  336. on *:dialog:atma_config:sclick:200:{
  337.   ; Delete network
  338.   if ($did($dname,197).seltext == *) {
  339.     _errorbox '*' is a special system identifier for default settings. It may not be deleted.
  340.     return
  341.   }
  342.   $iif(!$?!="Are you sure you want to delete settings for IRC network ' $+ $did($dname,197).seltext $+ ' (this cannot be undone)?",return)
  343.   Atma.Config -rw Channels. $+ $did($dname,197).seltext $+ *
  344.   updateChans
  345. }
  346. on *:dialog:atma_config:sclick:139:{
  347.   Atma.Config -r Hits
  348.   Atma.Config -r LeechedFiles
  349.   Atma.Config -r LeechedBytes
  350.   Atma.Config -r RecordSpeed
  351.   updateStats
  352. }
  353. on *:dialog:atma_config:sclick:32:Atma.cfgTriggers $did($dname,$did).sel
  354. on *:dialog:atma_config:sclick:34:Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $did($dname,$did).state
  355. on *:dialog:atma_config:sclick:37:{
  356.   Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels $addtok($Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels),$$?="Channel to Add?",44)
  357.   did -r $dname 36
  358.   didtok $dname 36 44 $Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels)
  359. }
  360. on *:dialog:atma_config:sclick:38:{
  361.   Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels $remtok($Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels),$$did($dname,36).seltext,44)
  362.   did -r $dname 36
  363.   didtok $dname 36 44 $Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Channels)
  364. }  
  365. on *:dialog:atma_config:sclick:39:{
  366.   Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .AllChans $did($dname,$did).state
  367.   var %action = $iif($did($dname,$did).state,-b,-e)
  368.   did %action $dname 36
  369.   did %action $dname 37
  370.   did %action $dname 38
  371. }
  372. on *:dialog:atma_config:sclick:71:{
  373.   var %NewTrigger = $?="What will the new trigger be?"
  374.   $iif(!%NewTrigger,return)
  375.   if ($istok($Atma.Triggers,%NewTrigger,5)) {
  376.     _errorbox There already exists a trigger by this name. $crlf $+ Failed to create new trigger.
  377.     return
  378.   }
  379.   %NewTrigger = $trig.encode(%NewTrigger)
  380.   var %NewFSRoot
  381.   while (!%NewFSRoot) { set %NewFSRoot $sdir($mircdir,Select a directory to serve) }
  382.   var %NewFSMOTD = $sfile($mircdir,Select a text file, Use as MOTD)
  383.   Atma.Config Triggers. $+ %NewTrigger 0
  384.   Atma.Config Triggers. $+ %NewTrigger $+ .Root %NewFSRoot
  385.   Atma.Config Triggers. $+ %NewTrigger $+ .MOTD %NewFSMOTD
  386.   did -a $dname 32 %NewTrigger
  387.   Atma.cfgTriggers $findtok($didtok($dname,32,5),%NewTrigger,1,5)
  388. }
  389. on *:dialog:atma_config:sclick:72:{
  390.   var %NewTrigger = $?="What shall this trigger be renamed to?"
  391.   $iif(!%NewTrigger,return)
  392.   if ($istok($Atma.Triggers,%NewTrigger,5)) {
  393.     _errorbox There already exists a trigger by this name. $crlf $+ Failed to rename trigger.
  394.     return
  395.   }
  396.   %NewTrigger = $trig.encode(%NewTrigger)
  397.   var %counter = 1
  398.   while (%counter <= $hfind(_/\tmaFS,Triggers. $+ $trig.encode($did($dname,32).seltext) $+ *,0,w)) {
  399.     var %newEntry
  400.     .echo -q $regex($hfind(_/\tmaFS,Triggers. $+ $trig.encode($did($dname,32).seltext) $+ *,%counter,w),/^Triggers\.([^\.]*)(\..*)?/i)
  401.     %newEntry = Triggers. $+ %NewTrigger $+ $regml(2)
  402.     Atma.Config %newEntry $Atma.Config($hfind(_/\tmaFS,Triggers. $+ $trig.encode($did($dname,32).seltext) $+ *,%counter,w))
  403.     inc %counter
  404.   }
  405.   Atma.Config -rw Triggers. $+ $regml(1) $+ *
  406.   Atma.cfgTriggers 1
  407.   Atma.cfgTriggers $findtok($didtok($dname,32,5),%NewTrigger,1,5)
  408. }
  409. on *:dialog:atma_config:sclick:73:{
  410.   $iif(!$did($dname,32).sel,return)
  411.   $iif(!$?!="This will permanently delete the selected trigger. Do it anyway?",return)
  412.   Atma.Config -rw Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .*
  413.   Atma.Config -rw Triggers. $+ $trig.encode($did($dname,32).seltext)
  414.   Atma.cfgTriggers
  415. }
  416. on *:dialog:atma_config:sclick:74:{
  417.   Atma.Config -r Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .MOTD
  418.   did -r $dname 43
  419. }
  420. on *:dialog:atma_config:sclick:75:$iif($Atma.Config(Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .MOTD),run notepad.exe $ifmatch)
  421. on *:dialog:atma_config:sclick:41:{
  422.   var %NewDir
  423.   while (!%NewDir) { %NewDir = $sdir($mircdir,Select a directory to serve) }
  424.   Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .Root %NewDir
  425.   did -o $dname 40 1 %NewDir
  426. }
  427. on *:dialog:atma_config:sclick:45:{
  428.   var %NewMOTD = $sfile($mircdir,Select a text file,Use as MOTD)
  429.   $iif(!%NewMOTD,return)
  430.   Atma.Config Triggers. $+ $trig.encode($did($dname,32).seltext) $+ .MOTD %NewMOTD
  431.   did -o $dname 43 1 %NewMOTD
  432. }
  433. on *:dialog:atma_config:sclick:50:{
  434.   Atma QuickSearchRefresh $did($dname,$did).state
  435.   did $iif($did($dname,$did).state,-e,-b) $dname 51
  436. }
  437. on *:dialog:atma_config:sclick:127:Atma QuickSearchRefreshOnStart $did($dname,$did).state
  438. on *:dialog:atma_config:sclick:128:Atma.CacheTriggers
  439. on *:dialog:atma_config:sclick:103,132,133:updateAccess
  440. on *:dialog:atma_config:sclick:101:{
  441.   dialog -m atma_access atma_access
  442.   did -c atma_access $iif($did($dname,132).state,22,23)
  443. }
  444. on *:dialog:atma_config:sclick:102:{
  445.   $iif(!$did(atma_config,100).sel,return)
  446.   var %Scope = $trig.encode($did(atma_config,103).seltext)
  447.   set %Scope $iif(%Scope == Global Permissions,Access.,Trigger. $+ %Scope $+ .Access.) $+ $gettok($did(atma_config,100).seltext,1,32)
  448.   dialog -m atma_access atma_access
  449.   did -c atma_access $iif($did($dname,132).state,22,23)
  450.   did -o atma_access 1 1 $gettok($did(atma_config,100).seltext,1,32)
  451.   $iif($gettok($Atma.Config(%Scope),2,32),did -c atma_access 4)
  452.   did $iif($did(atma_access,4).state,-e,-b) atma_access 8,10,12,13
  453.   if ($gettok($Atma.Config(%Scope),2,32)) {
  454.     var %time = $ctime
  455.     did -o atma_access 8 1 $int($calc(($ifmatch - %time) / 86400))
  456.     did -o atma_access 10 1 $int($calc((($ifmatch - %time) % 86400) / 3600))
  457.     did -o atma_access 12 1 $int($calc(((($ifmatch - %time) % 86400) % 3600) / 60))
  458.     did -o atma_access 13 1 $int($calc(((($ifmatch - %time) % 86400) % 3600) % 60))
  459.   }
  460.   did -o atma_access 20 1 $gettok($Atma.Config(%Scope),3-,32)
  461. }
  462. on *:dialog:atma_config:sclick:150:{
  463.   $iif(!$did(atma_config,100).sel,return)
  464.   var %Scope = $trig.encode($did(atma_config,103).seltext)
  465.   $iif(%Scope == Global Permissions,set %Scope Global)
  466.   Atma.Access.Remove $gettok($did(atma_config,100).seltext,1,32) %Scope
  467.   updateAccess
  468. }
  469. on *:dialog:atma_config:sclick:55:^formatstr.help
  470. on *:dialog:atma_config:sclick:59:{
  471.   did -o $dname 57 1 $hget(_/\tmaFS.STP,$did($dname,$did).seltext)
  472.   Atma FormatString $did($dname,57)
  473.   did -g $dname 106 $formatstr_preview
  474. }
  475. on *:dialog:atma_config:sclick:60:{
  476.   writeini $Atma.ini nickComp stripcolor $did($dname,$did).state
  477.   did -g $dname 106 $formatstr_preview
  478. }
  479. on *:dialog:atma_config:sclick:63:{
  480.   var %style = $?="Save style as (no spaces)"
  481.   $iif(!%style,return)
  482.   if ($chr(32) isin %style) { _errorbox Spaces are not allowed in style names | return }
  483.   if ($hget(_/\tmaFS.STP,%style)) {
  484.     $iif(!$?!="Overwrite existing style of this name?",return)
  485.   }
  486.   hadd _/\tmaFS.STP %style $did($dname,57)
  487.   hsave -ob _/\tmaFS.STP " $+ $scriptdirAtma.stp $+ "
  488.   updateStyle
  489. }
  490. on *:dialog:atma_config:sclick:64:{
  491.   if ($hget(_/\tmaFS.STP,0).item <= 1) { _errorbox You must leave at least one style | return }
  492.   $iif(!$?!="Really delete the selected style (this cannot be undone)?",return)
  493.   hdel _/\tmaFS.STP $did($dname,59).seltext
  494.   hsave -ob _/\tmaFS.STP " $+ $scriptdirAtma.stp $+ "
  495.   updateStyle
  496. }
  497.  
  498. on *:dialog:atma_config:sclick:65:did -g $dname 106 $formatstr_preview
  499.  
  500. dialog atma_access {
  501.   title Atma Fserv Access
  502.   size -1 -1 143 112
  503.   option dbu
  504.   edit "", 1, 32 2 106 10
  505.   text "Hostmask", 2, 4 3 25 8
  506.   box "Expiration", 3, 1 33 141 38
  507.   check "User access expires in....", 4, 4 41 131 10
  508.   edit "0", 8, 7 53 17 10, disable right
  509.   text "days", 9, 25 55 14 8
  510.   edit "0", 10, 42 53 17 10, disable right
  511.   edit "0", 12, 72 53 17 10, disable right
  512.   edit "0", 13, 104 53 17 10, disable right
  513.   text "hrs", 14, 60 55 9 8
  514.   text "min", 15, 89 54 14 8
  515.   text "sec", 16, 122 54 13 8
  516.   box "Comment", 17, 1 73 141 23
  517.   button "OK", 18, 30 99 37 12, default ok
  518.   button "Cancel", 19, 71 99 37 12, cancel
  519.   edit "", 20, 4 82 134 11, autohs
  520.   box "", 21, 1 15 141 17
  521.   radio "Access", 22, 23 21 30 9
  522.   radio "Deny", 23, 90 21 30 9
  523. }
  524.  
  525. on *:dialog:atma_access:sclick:4:did $iif($did($dname,$did).state,-e,-b) $dname 8,10,12,13
  526.  
  527. on *:dialog:atma_access:sclick:18:{
  528.   if ((*!*@* !iswm $did($dname,1)) || ($regex($did($dname,1),/\s/))) {
  529.     _errorbox You did not enter a valid hostmask. Please enter a valid hostmask in the form *!*@* and try again.
  530.     halt
  531.   }
  532.   Atma.Access.Add $did($dname,1) $iif($did(atma_config,103).seltext != Global Permissions,$trig.encode($ifmatch),Global) $iif($did($dname,22).state,Allow,Deny) $iif($did($dname,4).state,$calc($ctime + (($did($dname,8) * 86400) + ($did($dname,10) * 3600) + ($did($dname,12) * 60) + $did($dname,13))),0) $did($dname,20)
  533.   updateAccess
  534. }
  535.  
  536. dialog atma_queues {
  537.   title "_/\tma Queue Management"
  538.   size -1 -1 249 147
  539.   option dbu
  540.   list 1, 2 6 123 126, size vsbar
  541.   box "Queue Info", 3, 131 3 117 129
  542.   text "Queue Slot #", 4, 135 14 37 8
  543.   edit "", 5, 174 13 27 10, read
  544.   text "FileName", 6, 135 41 25 8
  545.   edit "", 7, 138 50 106 10, read autohs
  546.   text "Size", 8, 181 41 16 8
  547.   edit "", 9, 198 39 46 10, read
  548.   button "Clear this queue", 10, 137 80 105 10, disable
  549.   button "Clear all queues for this user", 11, 137 92 105 10, disable
  550.   button "Send this queue", 12, 137 104 105 10, disable
  551.   button "Send all queues for this user", 13, 137 116 105 10, disable
  552.   button "Clear All", 14, 138 135 49 10
  553.   button "Send All", 15, 192 135 49 10
  554.   button "OK/Cancel", 16, 218 3 30 9, hide ok cancel
  555.   text "User", 17, 136 26 18 8
  556.   edit "", 18, 157 25 87 10, read
  557.   button "^ Move Up ^", 19, 13 135 42 10
  558.   button "v Move Down v", 20, 59 135 42 10
  559.   button "Add a queue", 21, 137 68 105 10
  560. }
  561.  
  562. on *:dialog:atma_queues:init:0:{
  563.   updateQueues
  564. }
  565. on *:dialog:atma_queues:sclick:1:{
  566.   updateQueues $did($dname,$did).sel
  567. }
  568. on *:dialog:atma_queues:sclick:10:{
  569.   write -dl $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ "
  570.   updateQueues
  571. }
  572. on *:dialog:atma_queues:sclick:11:{
  573.   Atma.ClearQueues $gettok($did($dname,1).seltext,2,32)
  574.   updateQueues
  575. }
  576. on *:dialog:atma_queues:sclick:12:{
  577.   scid $gettok($did(atma_queues,1).seltext,3,32)
  578.   dcc send -c $gettok($did($dname,1).seltext,2,32) $gettok($did($dname,1).seltext,4-,32)
  579.   write -dl $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ "
  580.   updateQueues
  581. }
  582.  
  583. on *:dialog:atma_queues:sclick:13:{
  584.   scid $gettok($did(atma_queues,1).seltext,3,32)
  585.   var %regex = /^ $+ $gettok($did(atma_queues,1).seltext,2,32) $cid /
  586.   var %lines
  587.   var %counter = 1
  588.   while (%counter <= $lines($scriptdirqueues.dat)) {
  589.     var %send = $read($scriptdirqueues.dat,%counter)
  590.     if ($regex(%send,%regex)) {
  591.       dcc send -c $gettok(%send,1,32) $gettok(%send,3-,32)
  592.       ; write -dl $+ %counter " $+ $scriptdirqueues.dat $+ "
  593.       %lines = $addtok(%lines,%counter,44)
  594.     }
  595.     inc %counter
  596.   }
  597.   %lines = $sorttok(%lines,44,nr)
  598.   %counter = 1
  599.   while (%counter <= $numtok(%lines,44)) {
  600.     write -dl $+ $gettok(%lines,%counter,44) " $+ $scriptdirqueues.dat $+ "
  601.     inc %counter
  602.   }
  603.   updateQueues
  604. }
  605.  
  606. on *:dialog:atma_queues:sclick:14:{
  607.   Atma.ClearQueues
  608.   updateQueues
  609. }
  610.  
  611. on *:dialog:atma_queues:sclick:15:{
  612.   var %counter = 1
  613.   while (%counter <= $lines($scriptdirqueues.dat)) {
  614.     var %temp = $read($scriptdirqueues.dat,%counter)
  615.     scid $gettok(%temp,2,32)
  616.     dcc send $gettok(%temp,1,32) $gettok(%temp,3-,32)
  617.     inc %counter
  618.   }
  619.   Atma.ClearQueues
  620.   updateQueues
  621. }
  622.  
  623. on *:dialog:atma_queues:sclick:19:{
  624.   $iif($did($dname,1).sel <= 1,return)
  625.   var %temp = $read($scriptdirqueues.dat,$calc($did($dname,1).sel - 1))
  626.   write -l $+ $calc($did($dname,1).sel - 1) " $+ $scriptdirqueues.dat $+ " $read($scriptdirqueues.dat,$did($dname,1).sel)
  627.   write -l $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ " %temp
  628.   updateQueues $calc($did($dname,1).sel - 1)
  629. }
  630.  
  631. on *:dialog:atma_queues:sclick:20:{
  632.   $iif(($did($dname,1).sel < 1) || ($did($dname,1).sel >= $lines($scriptdirqueues.dat)),return)
  633.   var %temp = $read($scriptdirqueues.dat,$calc($did($dname,1).sel + 1))
  634.   write -l $+ $calc($did($dname,1).sel + 1) " $+ $scriptdirqueues.dat $+ " $read($scriptdirqueues.dat,$did($dname,1).sel)
  635.   write -l $+ $did($dname,1).sel " $+ $scriptdirqueues.dat $+ " %temp
  636.   updateQueues $calc($did($dname,1).sel + 1)
  637. }
  638.  
  639. on *:dialog:atma_queues:sclick:21:{
  640.   var %nick = $?="Enter a nickname for the queue"
  641.   $iif(!%nick,return)
  642.   var %file = $sfile($mircdir,Select a file to queue for %nick,Add to Queue)
  643.   $iif(!%file,return)
  644.   write " $+ $scriptdirqueues.dat $+ " %nick $cid %file
  645.   Atma.ProcessQueues
  646.   updateQueues
  647. }
  648.  
  649. dialog atma_networks {
  650.   title Select Network
  651.   size -1 -1 95 89
  652.   option dbu
  653.   button "OK", 2, 4 78 42 9, default ok
  654.   list 3, 3 27 89 50, sort size
  655.   text "Select the IRC network that you would like to configure from the list below.", 4, 3 3 88 22, center
  656.   button "Cancel", 5, 49 78 42 9, cancel
  657.   edit "", 6, 6 64 53 10, hide result
  658. }
  659.  
  660. on *:dialog:atma_networks:init:0:{
  661.   var %counter = 1
  662.   while (%counter <= $server(0)) {
  663.     $iif(!$didwm($dname,3,$server(%counter).group),did -a $dname 3 $server(%counter).group)
  664.     inc %counter
  665.   }
  666.   if ($server(0)) {
  667.     did -c $dname 3 1
  668.     did -o $dname 6 1 $did($dname,3).seltext
  669.   }
  670. }
  671.  
  672. on *:dialog:atma_networks:sclick:3:{
  673.   did -o $dname 6 1 $did($dname,$did).seltext
  674. }
  675.  
  676. ; __________________________
  677. ;/``````````````````````````
  678. ;           Menus
  679.  
  680. menu menubar,status,query,nicklist,channel {
  681.   mIRC Power Pack
  682.   .Atma File Server
  683.   ..Configure: Atma
  684.   ..Manage Queues: dialog -m atma_queues atma_queues
  685.   ..Rebuild QuickSearch Cache: Atma.CacheTriggers
  686.   ..-
  687.   ..Preview Ad: {
  688.     var %ad = $replace($parse_formatstr(*,$Atma(FormatString)),&\,$chr(13))
  689.     var %counter = 1
  690.     while (%counter <= $numtok(%ad,13)) {
  691.       echo -a $gettok(%ad,%counter,13)
  692.       inc %counter
  693.     }
  694.   }
  695.   .. $iif($chan,Show to $chan) : {
  696.     var %ad = $replace($parse_formatstr($chan,$Atma(FormatString)),&\,$chr(13))
  697.     var %counter = 1
  698.     while (%counter <= $numtok(%ad,13)) {
  699.       msg $chan $gettok(%ad,%counter,13)
  700.       inc %counter
  701.     }
  702.   }
  703.   .. $iif($1,Show to $1) : {
  704.     var %ad = $replace($parse_formatstr(*,$Atma(FormatString)),&\,$chr(13))
  705.     var %counter = 1
  706.     while (%counter <= $numtok(%ad,13)) {
  707.       msg $1 $gettok(%ad,%counter,13)
  708.       inc %counter
  709.     }
  710.   }
  711.   ..-
  712.   ..Reload: reload -rs " $+ $script $+ "
  713.   ;..Unload: unload -rs " $+ $script $+ "
  714. }
  715.  
  716. menu menubar,status,@Atma {
  717.   Atma File Server
  718.   .Configure: Atma
  719.   .Manage Queues: dialog -m atma_queues atma_queues
  720.   .Rebuild QuickSearch Cache: Atma.CacheTriggers
  721.   .-
  722.   .Preview Ad: {
  723.     var %ad = $replace($parse_formatstr(*,$Atma(FormatString)),&\,$chr(13))
  724.     var %counter = 1
  725.     while (%counter <= $numtok(%ad,13)) {
  726.       echo -a $gettok(%ad,%counter,13)
  727.       inc %counter
  728.     }
  729.   }
  730.   . $iif($chan,Show to $chan) : {
  731.     var %ad = $replace($parse_formatstr($chan,$Atma(FormatString)),&\,$chr(13))
  732.     var %counter = 1
  733.     while (%counter <= $numtok(%ad,13)) {
  734.       msg $chan $gettok(%ad,%counter,13)
  735.       inc %counter
  736.     }
  737.   }
  738.   . $iif($1,Show to $1) : {
  739.     var %ad = $replace($parse_formatstr(*,$Atma(FormatString)),&\,$chr(13))
  740.     var %counter = 1
  741.     while (%counter <= $numtok(%ad,13)) {
  742.       msg $1 $gettok(%ad,%counter,13)
  743.       inc %counter
  744.     }
  745.   }
  746.   .-
  747.   .Reload: reload -rs " $+ $script $+ "
  748.   ;.Unload: unload -rs " $+ $script $+ "
  749. }
  750.  
  751. ; __________________________
  752. ;/``````````````````````````
  753. ;          Remotes
  754.  
  755. on *:load:{
  756.   $iif(!$Atma.Config(Channels.*.*.TriggerType),Channel.setDefault * *)
  757.   $iif(!$ini($Atma.ini,Atma),Atma.createdefaultini)
  758.   $iif($server && $Atma(StartOnConnect),Atma.Activate)
  759. }
  760.  
  761. on *:unload:{
  762.   atma.deactivate --force
  763. }
  764.  
  765. on *:start:{
  766.  
  767.   if ($version < 6.02) {
  768.     echo 4 -s ATMA REQUIRES mIRC VERSION 6.02 OR HIGHER, UNLOADING...
  769.     unload -rs " $+ $script $+ "
  770.     return
  771.   }
  772.   if (!$ini($Atma.ini,Atma)) {
  773.     echo 4 -s *»»»» Atma Fileserver INI entries not found, inserting defaults...
  774.     Atma.createdefaultini
  775.   }
  776.   debug.print Loading atma.dat
  777.   $iif(!$hget(_/\tmaFS),hmake _/\tmaFS 10)
  778.   $iif($findfile($scriptdir,atma.dat,1),hload -b _/\tmaFS " $+ $ifmatch $+ ")
  779.   $iif(!$Atma.Config(Channels.*.*.TriggerType),Channel.setDefault * *)
  780.   $iif(!$hget(_/\tmaFS.Cache),hmake _/\tmaFS.Cache 1000)
  781.   $iif($findfile($scriptdir,fscache.dat,1),hload -b _/\tmaFS.Cache " $+ $ifmatch $+ ")
  782.   $iif($Atma(QuickSearchRefreshOnStart),Atma.CacheTriggers)  
  783.   $iif(!$hget(_/\tmaFS.STP),hmake _/\tmaFS.STP 10)
  784.   $iif($findfile($scriptdir,Atma.stp,1),hload -b _/\tmaFS.STP " $+ $ifmatch $+ ",Atma.createdefaultstp)
  785.  
  786.   $iif($exists(" $+ $scriptdirqueues.dat $+ "),.remove " $+ $scriptdirqueues.dat $+ ")
  787. }
  788.  
  789. on *:connect:{
  790.   var %counter = 1
  791.   while (%counter <= $scon(0)) {
  792.     $iif(($scon(%counter).status == connected) && (%counter != $cid),return)
  793.     inc %counter
  794.   }
  795.   $iif($Atma(StartOnConnect),Atma.Activate)
  796. }
  797.  
  798. on *:exit:{
  799.   atma.deactivate --force
  800. }
  801.  
  802. on *:text:*:#:{
  803.   if ($Atma.Channels($Atma.Networks($networkname),$chan).@Find && (($1 == @find) || ($1 == @locator)) && $2-) {
  804.     var %search = $replace($2-,$chr(32),*)
  805.     var %search.results $Atma.QuickSearch(%search)
  806.     $iif(!%search.results,return)
  807.     .msg $nick _/\tmaFServ QuickSearch Results
  808.     .msg $nick Found ( $+ %search.results $+ ) matches for %search
  809.     $iif(%search.results,.msg $nick Displaying match(es) 1 to $iif(%search.results <= $Atma(@Find.Results),$ifmatch,$Atma(@Find.Results)))
  810.     var %counter = 1
  811.     while (%counter <= $iif(%search.results <= $Atma(@Find.Results),$ifmatch,$Atma(@Find.Results))) {
  812.       var %search.result = $Atma.QuickSearch(%search,%counter)
  813.       .msg $nick  $+ $trig.decode($gettok(%search.result,1,32))  -- $gettok(%search.result,2-,32) ( $+ $bytes($Atma.QuickSearch(%search,%counter).size).suf $+ )
  814.       inc %counter
  815.     }
  816.     .msg $nick Search Complete.
  817.     return
  818.   }
  819.   if (($1 == !list) && ($Atma.Channels($Atma.Networks($networkname),$chan).RespondToList) && ($Atma.Triggers($chan))) {
  820.     var %ad = $replace($parse_formatstr($chan,$Atma(FormatString)),&\,$chr(13))
  821.     var %counter = 1
  822.     while (%counter <= $numtok(%ad,13)) {
  823.       .notice $nick $gettok(%ad,%counter,13)
  824.       inc %counter
  825.     }
  826.     return
  827.   }
  828.   if ($istok($Atma.Triggers,$1-,5) && !$istok($Atma.Triggers($chan),$1-,5)) { .notice $nick The trigger ' $+ $1- $+ ' is not being served to $chan $+ . | return }
  829.   if ((!$istok($Atma.Triggers($chan),$1-,5)) || ($Atma.Channels($Atma.Networks($networkname),$chan).TriggerType != Normal)) { return }
  830.   if (!$Atma(Active)) { .notice $nick The FileServer is not available at this time. Please try again later. | return }
  831.   if ($fserv(0) >= $Atma(maxUsers)) { .notice $nick The FileServer is currently full. Please try again later. | return }
  832.   if ($gettok($Atma.Access($address($nick,5),$trig.encode($1-)),1,32) == DENIED) { .notice $nick $gettok($Atma.Access($address($nick,5),$trig.encode($1-)),2-,32) | return }
  833.  
  834.   Atma.Config Hits $calc($Atma.Config(Hits) + 1)
  835.   updateStats
  836.   var %FSDir = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .Root) $+ "
  837.   var %FSMOTD = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .MOTD) $+ "
  838.  
  839.   ;Fserv session handling -- CONNECTING
  840.   hadd -m _/\tmaFS.Sessions $nick CONNECTING
  841.   hadd -m _/\tmaFS.Sessions $nick $+ .Channel $chan
  842.   hadd -m _/\tmaFS.Sessions $nick $+ .Trigger $1-
  843.   hadd -m _/\tmaFS.Sessions $nick $+ .ConnectTime $ctime
  844.  
  845.   fserve $nick $Atma(maxTSends) %FSDir %FSMOTD
  846. }
  847. ctcp *:*:?:{
  848.   $iif($1- == VERSION50, ctcpreply $nick VERSION $Atma )
  849.   $iif(!$istok($Atma.Triggers,$1-,5),return)
  850.   if (!$Atma(Active)) { .notice $nick The FileServer is not available at this time. Please try again later. | return }
  851.  
  852.   ;Gotta figure out what chan the user may have triggered from, since ctcp isn't chan specific
  853.   ;Of course, if a chan can't be found, then user must not have triggered from any channel, so foo on them
  854.   var %trigchan
  855.   var %counter = 1
  856.   while (%counter <= $numtok($Atma.Channels($Atma.Networks($networkname)),5)) {
  857.     var %chan = $gettok($Atma.Channels($Atma.Networks($networkname)),%counter,5)
  858.     if (%chan == *) {
  859.       var %counter2 = 1
  860.       while (%counter2 <= $numtok($Atma.Channels($Atma.Networks($networkname),*),44)) {
  861.         var %chan = $gettok($Atma.Channels($Atma.Networks($networkname),*),%counter,44)
  862.         if (($Atma.Channels($Atma.Networks($networkname),%chan).TriggerType == CTCP) && ($nick ison %chan) && ($istok($Atma.Triggers(%chan),$1-,5))) set %trigchan %chan
  863.         inc %counter2
  864.       }
  865.     }
  866.     else {
  867.       if (($Atma.Channels($Atma.Networks($networkname),%chan).TriggerType == CTCP) && ($nick ison %chan) && ($istok($Atma.Triggers(%chan),$1-,5))) set %trigchan %chan
  868.     }
  869.     inc %counter
  870.   }
  871.   $iif(!%trigchan,return)
  872.  
  873.   var %FSDir = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .Root) $+ "
  874.   var %FSMOTD = " $+ $Atma.Config(Triggers. $+ $trig.encode($1-) $+ .MOTD) $+ "
  875.  
  876.   ;Fserv session handling -- CONNECTING
  877.   hadd -m _/\tmaFS.Sessions $nick CONNECTING
  878.   hadd -m _/\tmaFS.Sessions $nick $+ .CID $cid
  879.   hadd -m _/\tmaFS.Sessions $nick $+ .Channel %trigchan
  880.   hadd -m _/\tmaFS.Sessions $nick $+ .Trigger $1-
  881.   hadd -m _/\tmaFS.Sessions $nick $+ .ConnectTime $ctime
  882.  
  883.   fserve $nick $Atma(maxTSends) %FSDir %FSMOTD
  884. }
  885. on *:open:!:{
  886.   ;Session handling -- CONNECTED
  887.   hadd -m _/\tmaFS.Sessions $nick CONNECTED
  888.  
  889.   var %chan = $Atma.Channels($Atma.Networks($networkname),$Atma.Sessions($nick).Channel)
  890.  
  891.   msg =$nick -  $+ $Atma
  892.   msg =$nick - Programmed by Correl J. Roush (correlr@phoenixinquis.net) 2002
  893.   msg =$nick - ______________________________________________________________
  894.   msg =$nick - $Atma.Channels($Atma.Networks($networkname),%chan).InfoLine
  895.   msg =$nick -
  896.   msg =$nick - You may have up to $Atma(maxUSends) simultaneous file sends, and up to $Atma.Channels($Atma.Networks($networkname),%chan).maxUQueues $iif($Atma.Channels($Atma.Networks($networkname),%chan).QueueUsing == FileSize,MB worth of) queued files.
  897.   msg =$nick - The FServ is limited to a maximum of $Atma(maxTSends) simultaneous file sends and $Atma.Channels($Atma.Networks($networkname),%chan).maxTQueues $iif($Atma.Channels($Atma.Networks($networkname),%chan).QueueUsing == FileSize,MB worth of) queued files.
  898.   msg =$nick -
  899.   $iif($Atma(FServChat),msg =$nick - ***FServ Chat is enabled; you may chat with other users on the fserv)
  900.   $iif($Atma(ChannelEnforcer),msg =$nick - ***Channel Enforcer is enabled; parting the fserv's channels will result in your queues being cleared.)
  901.   $iif($Atma(MaxCPS.Enabled),msg =$nick - ***MaxCPS is enabled; sends from this server will not exceed $Atma(MaxCPS) kb/s.)
  902.   $iif($Atma(MinCPS.Enabled),msg =$nick - ***MinCPS is enabled; sends from this server may not drop below $Atma(MinCPS) CPS for more than $Atma(MinCPS.secs) seconds, or they will be terminated.)
  903.   $iif($Atma(DCCAllowEnforcer) == ban,msg =$nick - ***DCCAllowEnforcer is enabled; failure to /dccallow + $+ $me $+  will result in your sends/queues being cleared and a $duration($Atma(DCCAllowEnforcer.TempBan)) temporary ban from the fserv.)
  904.   halt
  905. }
  906. on *:close:!:{
  907.   ;FServ session handling -- CLOSED
  908.   $iif($hget(_/\tmaFS.Sessions),hdel -w _/\tmaFS.Sessions $nick $+ *)
  909. }
  910. on *:nick:{
  911.   $iif(!$Atma.Queue($nick),return)
  912.   var %counter = 1
  913.   while (%counter <= $lines($scriptdirqueues.dat)) {
  914.     write -l $+ %counter " $+ $scriptdirqueues.dat $+ " $replace($read($scriptdirqueues.dat, %counter),$nick,$newnick)
  915.     inc %counter
  916.   }
  917.   if ($fserv($nick)) {
  918.     close -f $nick
  919.     notice $newnick Your fserv connection was closed due to a change in nickname. Please reconnect to ensure that files are queued under your new nickname.
  920.   }
  921. }
  922. on *:serv:*:{
  923.   $iif($1- == cd.., tokenize 32 cd ..)
  924.   $iif($istok(cd dir ls read exit bye c s,$1,32),return)
  925.   if ($1 == help) {
  926.     msg =$nick - Help - $Atma
  927.     if (!$2) {
  928.       msg =$nick - The following commands are supported:
  929.       msg =$nick - CD LS GET READ HELP EXIT BYE
  930.       msg =$nick - SENDS QUEUES CLEARQUEUES FIND WHOSONLINE
  931.       msg =$nick -
  932.       msg =$nick - Type help followed by a command to get more info on that command.
  933.     }
  934.     elseif ($2 == CD) {
  935.       msg =$nick - CD <directory> - Change to the specified directory
  936.       msg =$nick -
  937.       msg =$nick - Used to move through the path structure of the fileserver.
  938.       msg =$nick - 
  939.       msg =$nick - Examples:
  940.       msg =$nick - CD TextFiles (Changes directory to the TextFiles folder)
  941.       msg =$nick - CD .. (Moves back one directory)
  942.     }
  943.     elseif (($2 == DIR) || ($2 == LS)) {
  944.       msg =$nick - LS [-b|k] [-#] or DIR [-b|k] [-#] [/w] - List the contents of the current directory
  945.       msg =$nick - 
  946.       msg =$nick - Lists the name and size of each file in the current directory.
  947.       msg =$nick - The /w switch forces a wide listing. (DIR only, LS is always a wide listing)
  948.       msg =$nick - The [-b|k] selects bytes or k's.
  949.       msg =$nick - The [-#] specifies the number of files on each line in a horizontal listing.
  950.     }
  951.     elseif ($2 == GET) {
  952.       msg =$nick - GET <filename> - asks the fileserver to DCC Send the specified file.
  953.     }
  954.     elseif ($2 == READ) {
  955.       msg =$nick - READ [-numlines] <filename.txt> - reads the specified text file.
  956.       msg =$nick -
  957.       msg =$nick - The user will be sent a default of 20 lines and then prompted whether to continue listing.
  958.       msg =$nick - The -numlines option changes the default number of lines to a value between 5 and 50.
  959.     }
  960.     elseif ($2 == HELP) {
  961.       msg =$nick - HELP [command] - displays FServ command help
  962.       msg =$nick -
  963.       msg =$nick - [command] is optional, use it to display help on a specific command.
  964.       msg =$nick - if [command] is not given, HELP will display a listing of all supported commands.
  965.     }
  966.     elseif (($2 == EXIT) || ($2 == BYE)) {
  967.       msg =$nick - EXIT or BYE - closes the FServ session.
  968.     }
  969.     elseif ($2 == SENDS) {
  970.       msg =$nick - SENDS - Lists the server's active DCC Sends
  971.     }
  972.     elseif ($2 == QUEUES) {
  973.       msg =$nick - QUEUES - Lists the server's send queue
  974.     }
  975.     elseif ($2 == CLEARQUEUES) {
  976.       msg =$nick - CLEARQUEUES - Clears all the files you have queued in the fileserver
  977.     }
  978.     elseif ($2 == FIND) {
  979.       msg =$nick - FIND <matchtext> - Search for files on the fileserver
  980.     }
  981.     elseif ($2 == WHOSONLINE) {
  982.       msg =$nick - WHOSONLINE - Lists other people currently on the fserv.
  983.       msg =$nick -
  984.       msg =$nick - This command only shows a list of users when FileServer chat is enabled.
  985.     }
  986.     else {
  987.       msg =$nick - No help available for the command $2
  988.     }
  989.     msg =$nick - End of Help    
  990.     halt
  991.   }
  992.   if ($1 == get) {
  993.     if (!$2) {
  994.       msg =$nick No filename specified.
  995.       halt
  996.     }
  997.     if (!$exists(" $+ $cd $+ \ $+ $2- $+ ")) {
  998.       msg =$nick File does not exist. Check your spelling.
  999.       halt
  1000.     }
  1001.     Atma.SendFile $nick " $+ $cd $+ \ $+ $2- $+ "
  1002.     halt
  1003.   }
  1004.   if ($1- == sends) {
  1005.     var %counter = 1
  1006.     msg =$nick There are $send(0) sends in progress
  1007.     while (%counter <= $send(0)) {
  1008.       msg =$nick  $+ %counter $+ . - $send(%counter) is recieving $send(%counter).file ( $+ $send(%counter).pc $+  % of $bytes($send(%counter).size).suf $+ , Approx. $duration($round($calc(($send(%counter).size - $send(%counter).sent) / $send(%counter).cps))) remaining)
  1009.       inc %counter
  1010.     }
  1011.     halt
  1012.   }
  1013.  
  1014.   if ($1- == queues) {
  1015.     var %counter = 1
  1016.     msg =$nick There are $iif($lines(" $+ $scriptdirqueues.dat $+ "),$ifmatch,0) send(s) waiting in the queue
  1017.     while (%counter <= $iif($lines(" $+ $scriptdirqueues.dat $+ "),$ifmatch,0)) {
  1018.       msg =$nick  $+ %counter $+ . - $gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),1,32) queued $nopath($gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),3-,32)) ( $+ $bytes($file($gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),3-,32)).size).suf $+ ) through IRC server $servername($scid($gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),2-,32))) 
  1019.       inc %counter
  1020.     }
  1021.     halt
  1022.   }
  1023.   if ($1 == clearqueues) {
  1024.     Atma.ClearQueues $nick
  1025.     msg =$nick All your queues have been cleared.
  1026.     halt
  1027.   }
  1028.   if ($1 == find) {
  1029.     if (!$Atma(fs_find)) { msg =$nick find command is currently disabled. | halt }
  1030.     if (!$2) { msg =$nick No search criteria was specified | halt }
  1031.     var %search = $replace($2-,$chr(32),*)
  1032.     var %search.results $Atma.QuickSearch(%search)
  1033.     .msg =$nick QuickSearch Results
  1034.     .msg =$nick Found ( $+ %search.results $+ ) matches for %search
  1035.     $iif(!%search.results,halt)
  1036.     $iif(%search.results,.msg =$nick Displaying match(es) 1 to $iif(%search.results <= $Atma(fs_find.Results),$ifmatch,$Atma(fs_find.Results)))
  1037.     var %counter = 1
  1038.     while ((%counter <= %search.results) && (%counter <= $Atma(fs_find.Results))) {
  1039.       var %search.result = $Atma.QuickSearch(%search,%counter)
  1040.       .msg =$nick  $+ $trig.decode($gettok(%search.result,1,32))  -- $gettok(%search.result,2-,32) ( $+ $bytes($Atma.QuickSearch(%search,%counter).size).suf $+ )
  1041.       inc %counter
  1042.     }
  1043.     .msg =$nick Search Complete.
  1044.     halt
  1045.   }
  1046.   if ($1- == whosonline) {
  1047.     if ($Atma(FServChat)) {
  1048.       var %counter = 1
  1049.       msg =$nick - There are $fserv(0) user(s) currently on the fserv
  1050.       while (%counter <= $fserv(0)) {
  1051.         msg =$nick - $fserv(%counter)
  1052.         inc %counter
  1053.       }
  1054.       msg =$nick End of list.
  1055.     }
  1056.     else {
  1057.       msg =$nick FServ Chat is not enabled.
  1058.     }
  1059.     halt
  1060.   }
  1061.   if ($Atma(FServChat)) {
  1062.     var %counter = 1
  1063.     while (%counter <= $fserv(0)) {
  1064.       $iif($fserv(%counter) != $nick,msg = $+ $fserv(%counter) ( $+ $nick $+ ) $1-)
  1065.       inc %counter
  1066.     }
  1067.     halt
  1068.   }
  1069.   msg =$nick - " $+ $1 $+ " is not a recognized command. Type help for a list of available commands.
  1070.   halt
  1071. }
  1072.  
  1073. on *:filesent:*:{
  1074.   var %sendwindow
  1075.   %counter = 1
  1076.   while (%counter <= $send($nick,0)) {
  1077.     $iif($send($nick,%counter).path $+ $send($nick,%counter).file == $filename,set %sendwindow %counter)
  1078.     inc %counter
  1079.   }
  1080.   Atma.Config LeechedFiles $calc($Atma.Config(LeechedFiles) + 1)
  1081.   Atma.Config LeechedBytes $calc($Atma.Config(LeechedBytes) + $send($nick,%sendwindow).sent)
  1082.   $iif($iif($gettok($Atma.Config(RecordSpeed),2,32),$ifmatch,0) < $send($nick,%sendwindow).cps,Atma.Config RecordSpeed $nick $send($nick,%sendwindow).cps)
  1083.   updateStats
  1084.   .timer 1 1 Atma.ProcessQueues
  1085.   .timer_/\tma.CheckMinCPS.Terminate off
  1086. }
  1087. on *:sendfail:*:{
  1088.   .timer 1 1 Atma.ProcessQueues
  1089.   .timer_/\tma.CheckMinCPS.Terminate off
  1090. }
  1091.  
  1092. on *:part:*:{
  1093.   if (($comchan($nick,0) <= 1) && $Atma(ChannelEnforcer) && $Atma.Queue($nick).Count) {
  1094.     .notice $nick [FSERV NOTICE] You no longer share a common channel with the fserv; All waiting queues have been cleared [ $+ $Atma Channel Enforcer]
  1095.     Atma.ClearQueues $nick
  1096.   }    
  1097. }
  1098.  
  1099. on *:snotice:*The user * is not accepting DCC sends of filetype*:{
  1100.   var %filename = $send($3,$send($3,0)).file
  1101.   close -s $send($3,0) $3
  1102.  
  1103.   $iif($fserv($3),msg = $+ $3,.notice $3) Your send of %filename was BLOCKED by the IRC server. In order to recieve files of this type, you must first type /dccallow + $+ $me $+ , then you will be able to download the file.
  1104.   if ($Atma(DCCAllowEnforcer) == Ban) {
  1105.     close -sf $3
  1106.     Atma.ClearQueues $3
  1107.     Atma.Access.Add $address($3,9) Global Deny $calc($ctime + $Atma(DCCAllowEnforcer.TempBan)) DCCAllow Enforcement TempBan
  1108.     .notice $3 Because you did not comply with this fserv's DCCALLOW rule, your sends and queues have been cleared, and you have been globally banned from this fserv for a duration of $duration($Atma(DCCAllowEnforcer.TempBan))
  1109.   }
  1110. }
  1111.  
  1112. raw 401:*:{
  1113.   ; Ahnold may be back, but his queues won't be waiting for him ;d
  1114.   close -s $2
  1115.   Atma.ClearQueues $2
  1116. }
  1117.  
  1118. ; __________________________
  1119. ;/``````````````````````````
  1120. ;          Aliases
  1121.  
  1122. alias Atma.ver { return $readini($script,addon,version) }
  1123.  
  1124. alias -l Atma.ini {
  1125.   return $iif($_Sylver.ini,$_Sylver.ini,$+(",$mircdirsystem\atma\sylver.ini,"))
  1126. }
  1127.  
  1128. alias Atma {
  1129.   if (!$isid) {
  1130.     if (!$1) {
  1131.       dialog -m atma_config atma_config
  1132.     }
  1133.     else {
  1134.       $iif($2,writeini $Atma.ini Atma $1 $2-,remini $Atma.ini Atma $1)
  1135.     }
  1136.   }
  1137.   else {
  1138.     $iif(!$1,return _/\tma FileServer Build $Atma.ver)
  1139.     return $readini($Atma.ini,Atma,$1)
  1140.   }
  1141. }
  1142.  
  1143. alias Atma.Config {
  1144.   $iif(!$hget(_/\tmaFS),hmake _/\tmaFS 10)
  1145.   if (!$isid) {
  1146.     if ($regex($1,/^-r(w)?/i)) {
  1147.       $iif(!$2,return)
  1148.       var %item = $replace($2-,$chr(32),$chr(46))
  1149.       hdel $iif($regml(1),- $+ $ifmatch) _/\tmaFS %item
  1150.     }
  1151.     else {
  1152.       hadd _/\tmaFS $1-
  1153.     }
  1154.   }
  1155.   else {
  1156.     return $eval($ $+ hget(_/\tmaFS,$1-) $+ $iif($prop,. $+ $prop),2)
  1157.   }
  1158.   hsave -ob _/\tmaFS " $+ $scriptdiratma.dat $+ "
  1159. }
  1160.  
  1161. alias Atma.Help { run " $+ $scriptdirAtma.hlp $+ " }
  1162.  
  1163. alias Atma.createdefaultini {
  1164.   remini $Atma.ini Atma
  1165.   writeini $Atma.ini Atma InfoLine $Atma
  1166.   writeini $Atma.ini Atma maxUSends 1
  1167.   writeini $Atma.ini Atma maxUQueues 20
  1168.   writeini $Atma.ini Atma maxTSends 3
  1169.   writeini $Atma.ini Atma maxTQueues 99
  1170.   writeini $Atma.ini Atma maxUsers 10
  1171.   writeini $Atma.ini Atma QueueUsing FileCount
  1172.   writeini $Atma.ini Atma Interval 30
  1173.   writeini $Atma.ini Atma IntervalUnit minutes
  1174.   writeini $Atma.ini Atma RespondToList 1
  1175.   writeini $Atma.ini Atma EnableAd 1
  1176.   writeini $Atma.ini Atma StartOnConnect 1
  1177.   writeini $Atma.ini Atma FServChat 1
  1178.   writeini $Atma.ini Atma ChannelEnforcer 1
  1179.   writeini $Atma.ini Atma @Find 1
  1180.   writeini $Atma.ini Atma @Find.Results 5
  1181.   writeini $Atma.ini Atma fs_find 1
  1182.   writeini $Atma.ini Atma fs_find.Results 10
  1183.   writeini $Atma.ini Atma DCCAllowEnforcer Notify
  1184.   writeini $Atma.ini Atma DCCAllowEnforcer.TempBan 300
  1185.   writeini $Atma.ini Atma MinCPS.Enabled 0
  1186.   writeini $Atma.ini Atma MinCPS 6
  1187.   writeini $Atma.ini Atma MinCPS.secs 5
  1188.   writeini $Atma.ini Atma MaxCPS.Enabled 0
  1189.   writeini $Atma.ini Atma MaxCPS 20
  1190.   writeini $Atma.ini Atma TriggerType Normal
  1191.   writeini $Atma.ini Atma QuickSearchRefreshOnStart 0
  1192.   writeini $Atma.ini Atma FormatString &b_/\&b&c04tma&c&bFServ&b(Triggers&b[&b &c05&Atma.Triggers&c &b]&b Hits&b[&b &c05&Atma.Hits&c &b]&b Users&b[&b &c05&Atma.Users&c &b]&b Sends&b[&b &c05&Atma.Sends&c &b]&b Queues&b[&b &c05&Atma.Queues&c &b]&b Leeched&b[&b &c05&Atma.LeechedBytes&c in &c05&Atma.LeechedFiles&c files &b]&b Record Speed&b[&b &c05&Atma.RecordSpeed&c &b]&b InfoLine&b[&b &c05&Atma.InfoLine&c &b]&b)
  1193. }
  1194.  
  1195. alias -l Atma.createdefaultstp {
  1196.   $iif($hget(_/\tmaFS.STP),hfree _/\tmaFS.STP)
  1197.   hmake _/\tmaFS.STP 10
  1198.   hadd _/\tmaFS.STP Atma_Short &b_/\&b&c04tma&c&bFServ&b(Triggers&b[&b &c05&Atma.Triggers&c &b]&b Users&b[&b &c05&Atma.Users&c &b]&b Sends&b[&b &c05&Atma.Sends&c &b]&b Queues&b[&b &c05&Atma.Queues&c &b]&b InfoLine&b[&b &c05&Atma.InfoLine&c &b]&b)
  1199.   hadd _/\tmaFS.STP Atma_Long &b_/\&b&c04tma&c&bFServ&b(Triggers&b[&b &c05&Atma.Triggers&c &b]&b Hits&b[&b &c05&Atma.Hits&c &b]&b Users&b[&b &c05&Atma.Users&c &b]&b Sends&b[&b &c05&Atma.Sends&c &b]&b Queues&b[&b &c05&Atma.Queues&c &b]&b Leeched&b[&b &c05&Atma.LeechedBytes&c in &c05&Atma.LeechedFiles&c files &b]&b Record Speed&b[&b &c05&Atma.RecordSpeed&c &b]&b InfoLine&b[&b &c05&Atma.InfoLine&c &b]&b)
  1200.   hadd _/\tmaFS.STP SphinxScript_Saiyan &c12½&c10File Server Online&c12╗&c :: &c12½&c10Triggers&c12╗&c02[&c14&Atma.Triggers&c2] &c12½&c10Sends&c12╗&c02[&c14&Atma.Sends&c2] &c12½&c10Queues&c12╗&c02[&c14&Atma.Queues&c2] &c12½&c10Online Users&c12╗&c02[&c14&Atma.Users&c2] &c12½&c10Snagged&c12╗&c02[&c14&Atma.LeechedBytes in &Atma.LeechedFiles Files&c2] &c12½&c10TopCPS&c12╗&c02[&c14&Atma.RecordSpeed&c2]
  1201.   hsave -ob _/\tmaFS.STP " $+ $scriptdirAtma.stp $+ "
  1202. }
  1203.  
  1204. alias Atma.Activate {
  1205.   writeini $Atma.ini Atma Active 1
  1206.   var %counter = 1
  1207.   var %connection = 1
  1208.  
  1209.   while ( %connection <= $scon(0) ) {
  1210.     scon %connection
  1211.     var %counter = 1
  1212.     while (%counter <= $numtok($Atma.Channels($Atma.Networks($networkname)),5)) {
  1213.       var %chan = $gettok($Atma.Channels($Atma.Networks($networkname)),%counter,5)
  1214.       var %delay = $iif($Atma.Channels($Atma.Networks($networkname),%chan).IntervalUnit == seconds,$Atma.Channels($Atma.Networks($networkname),%chan).Interval,$calc($Atma.Channels($Atma.Networks($networkname),%chan).Interval * 60))
  1215.       .timer_/\tma. $+ $server $+ . $+ %chan 0 %delay Atma.Advertise %chan
  1216.       Atma.Advertise %chan
  1217.       inc %counter
  1218.     }
  1219.     inc %connection
  1220.   }
  1221.   if ($Atma(MinCPS.Enabled)) {
  1222.     .timer_/\tma.MinCPS 0 5 Atma.CheckMinCPS
  1223.   }
  1224.   .timer_/\tma.AuditAccess 0 5 Atma.Access.Audit
  1225. }
  1226.  
  1227. alias Atma.Deactivate {
  1228.   $iif($1 != --force,$iif(!$input(This will halt the fserv and clear all waiting queues. Shut down anyway?,264,$Atma),return))
  1229.   writeini $Atma.ini Atma Active 0
  1230.   var %connection = 1
  1231.   while ( %connection <= $scon(0) ) {
  1232.     .timer_/\tma* off
  1233.     inc %connection
  1234.   }
  1235.   $iif($exists(" $+ $scriptdirqueues.dat $+ "),.remove " $+ $scriptdirqueues.dat $+ ")
  1236. }
  1237. alias Atma.Sends {
  1238.   return $iif($1,$send($1,0),$send(0))
  1239. }
  1240.  
  1241. alias Atma.Users.Count {
  1242.   return $fserv(0)
  1243. }
  1244.  
  1245. alias Atma.Triggers {
  1246.   var %Atma.Triggers
  1247.  
  1248.   var %counter = 1
  1249.   while (%counter <= $hget(_/\tmaFS,0).item) {
  1250.     if ($regex($hget(_/\tmaFS,%counter).item,/^Triggers\.([^\.]*)$/i)) {
  1251.       if ($1) {
  1252.         if ($hget(_/\tmaFS,Triggers. $+ $regml(1) $+ .AllChans) || $istok($hget(_/\tmaFS,Triggers. $+ $regml(1) $+ .Channels),$1,44)) {
  1253.           $iif($hget(_/\tmaFS,Triggers. $+ $regml(1)),%Atma.Triggers = $addtok(%Atma.Triggers,$regml(1),5))
  1254.         }
  1255.       }
  1256.       else { %Atma.Triggers = $addtok(%Atma.Triggers,$regml(1),5) }
  1257.     }
  1258.     inc %counter
  1259.   }
  1260.   ; Sort 'em alphabetically...
  1261.   %Atma.Triggers = $sorttok(%Atma.Triggers,5)
  1262.   %Atma.Triggers = $trig.decode(%Atma.Triggers)
  1263.   $iif($prop != Formatted,return %Atma.Triggers)
  1264.   var %Atma.Triggers.Formatted = $gettok(%Atma.Triggers,1,5)
  1265.   $iif(%Atma.Triggers.Formatted && ($Atma.Config(Channels. $+ $Atma.Networks($networkname) $+ . $+ $iif($1,$Atma.Channels($Atma.Networks($networkname),$1),*) $+ .TriggerType) == CTCP),%Atma.Triggers.Formatted = /ctcp $me %Atma.Triggers.Formatted)
  1266.   %counter = 2
  1267.   while (%counter <= $numtok(%Atma.Triggers,5)) {
  1268.     if ($Atma.Config(Channels. $+ $Atma.Networks($networkname) $+ . $+ $iif($1,$Atma.Channels($Atma.Networks($networkname),$1),*) $+ .TriggerType) == CTCP) {
  1269.       %Atma.Triggers.Formatted = %Atma.Triggers.Formatted & /ctcp $me $gettok(%Atma.Triggers,%counter,5)
  1270.     }
  1271.     else {
  1272.       %Atma.Triggers.Formatted = %Atma.Triggers.Formatted & $gettok(%Atma.Triggers,%counter,5)
  1273.     }
  1274.     inc %counter
  1275.   }
  1276.  
  1277.   return %Atma.Triggers.Formatted
  1278. }
  1279.  
  1280. alias Atma.Channels {
  1281.   var %Atma.Channels
  1282.   var %network = $iif($1,$1,$Atma.Networks($networkname))
  1283.  
  1284.   var %counter = 1
  1285.   while (%counter <= $hget(_/\tmaFS,0).item) {
  1286.     var %regex = /^Channels\. $+ $regex.encode(%network) $+ \.([^\.]*)$/i
  1287.     if ($regex($hget(_/\tmaFS,%counter).item,%regex)) {
  1288.       %Atma.Channels = $addtok(%Atma.Channels,$regml(1),5)
  1289.     }
  1290.     inc %counter
  1291.   }
  1292.   if (!$2) {
  1293.     return $sorttok(%Atma.Channels,5,r)
  1294.   }
  1295.   if (($2 == *) && !$prop) {
  1296.     var %chans
  1297.     var %counter = 1
  1298.     while (%counter <= $chan(0)) {
  1299.       if (!$istok(%Atma.Channels,$chan(%counter),5)) set %chans $addtok(%chans,$chan(%counter),44)
  1300.       inc %counter
  1301.     }
  1302.     return %chans
  1303.   }
  1304.   var %chan = $iif($istok(%Atma.Channels,$2,5),$2,*)
  1305.   $iif(!$prop,return %chan)
  1306.   return $Atma.Config(Channels. $+ %network $+ . $+ %chan $+ . $+ $prop)
  1307. }
  1308.  
  1309. alias Atma.Networks {
  1310.   var %Atma.Networks
  1311.   var %counter = 1
  1312.   while (%counter <= $hget(_/\tmaFS,0).item) {
  1313.     var %regex = /^Channels\.([^\.]*)\.\*$/i
  1314.     if ($regex($hget(_/\tmaFS,%counter).item,%regex)) {
  1315.       %Atma.Networks = $addtok(%Atma.Networks,$regml(1),5)
  1316.     }
  1317.     inc %counter
  1318.   }
  1319.   if (!$1) {
  1320.     return $sorttok(%Atma.Networks,5,r)
  1321.   }
  1322.   if (($1 == *) && !$prop) {
  1323.     var %nets
  1324.     var %counter = 1
  1325.     while (%counter <= $scon(0)) {
  1326.       var %network $iif($scon(%counter).$network,$ifmatch,{unknown})
  1327.       if (!$istok(%Atma.Networks,%network,5)) set %nets $addtok(%nets,%network,44)
  1328.       inc %counter
  1329.     }
  1330.     return $reptok(%nets,{unknown},*,5)
  1331.   }
  1332.   var %net = $iif($istok(%Atma.Networks,$1,5),$1,*)
  1333.   $iif(!$prop,return %net)
  1334. }  
  1335.  
  1336. alias Atma.Sessions {
  1337.   $iif(!$1,return)
  1338.   $iif(!$prop,return $hget(_/\tmaFS.Sessions,$1))
  1339.   return $hget(_/\tmaFS.Sessions,$1 $+ . $+ $prop)
  1340. }
  1341.  
  1342. alias -l Channel.setDefault {
  1343.   $iif(!$2,return)
  1344.   Atma.Config Channels. $+ $1 $+ . $+ $2 1
  1345.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .MaxUQueues 20
  1346.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .MaxTQueues 99
  1347.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .MaxUsers 10
  1348.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .QueueUsing FileCount
  1349.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .@Find 1
  1350.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .RespondToList 1
  1351.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .InfoLine $Atma
  1352.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .EnableAd 1
  1353.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .TriggerType Normal
  1354.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .Interval 30
  1355.   Atma.Config Channels. $+ $1 $+ . $+ $2 $+ .IntervalUnit minutes
  1356. }
  1357. alias -l Channel.Copy {
  1358.   $iif(!$2,return)
  1359.   var %counter = 1
  1360.   while (%counter <= $hfind(_/\tmaFS,/^ $+ $regex.encode(Channels. $+ $1)/i,0,r)) {
  1361.     var %source = $hfind(_/\tmaFS,/^ $+ $regex.encode(Channels. $+ $1)/i,%counter,r)
  1362.     .echo -q $regex(%source,/^Channels\..*?\..*?\.(.*)/i)
  1363.     var %dest = Channels. $+ $2 $+ $iif($regml(1),. $+ $regml(1))
  1364.     Atma.Config %dest $Atma.Config(%source)
  1365.     inc %counter
  1366.   }
  1367. }
  1368.  
  1369. alias Atma.Advertise {
  1370.   if (!$1) {
  1371.     Atma.AdvertiseAll
  1372.     return
  1373.   }
  1374.   if ($1 == *) {
  1375.     Atma.AdvertiseMulti
  1376.     return
  1377.   }
  1378.   if (($me ison $1) && ($Atma.Channels($Atma.Networks($networkname),$1).EnableAd)) { 
  1379.     if ($Atma.Triggers($1)) {
  1380.       var %ad = $replace($parse_formatstr($1,$Atma(FormatString)),&\,$chr(13))
  1381.       var %counter = 1
  1382.       while (%counter <= $numtok(%ad,13)) {
  1383.         msg $1 $gettok(%ad,%counter,13)
  1384.         inc %counter
  1385.       }
  1386.     }
  1387.   }
  1388. }
  1389.  
  1390. alias -l Atma.AdvertiseMulti {
  1391.   var %chans
  1392.   var %con = 1
  1393.   var %counter = 1
  1394.   while (%counter <= $numtok($Atma.Channels($Atma.Networks($networkname),*),44)) {
  1395.     %chan = $gettok($Atma.Channels($Atma.Networks($networkname),*),%counter,44)
  1396.     Atma.Advertise %chan
  1397.     inc %counter
  1398.   }
  1399. }
  1400.  
  1401. alias -l Atma.AdvertiseAll {
  1402.   var %counter = 1
  1403.   while (%counter <= $scon(0)) {
  1404.     scon %counter
  1405.     var %counter2 = 1
  1406.     while (%counter2 <= $chan(0)) {
  1407.       atma.advertise $chan(%counter2)
  1408.       inc %counter2
  1409.     }
  1410.     inc %counter
  1411.   }
  1412. }
  1413.  
  1414. alias -l Atma.cfgTriggers {
  1415.   var %action = $iif($Atma.Triggers,-e,-b)
  1416.   did -r atma_config 32,103
  1417.   did -r atma_config 40
  1418.   did -r atma_config 43
  1419.   did -r atma_config 36
  1420.   $iif($Atma.Triggers,didtok atma_config 32 5 $Atma.Triggers)
  1421.   didtok atma_config 103 5 Global Permissions
  1422.   $iif($Atma.Triggers,didtok atma_config 103 5 $didtok(atma_config,32,5))
  1423.   did %action atma_config 34
  1424.   did %action atma_config 36
  1425.   did %action atma_config 37
  1426.   did %action atma_config 38
  1427.   did %action atma_config 39
  1428.   did %action atma_config 41
  1429.   did %action atma_config 42
  1430.   did %action atma_config 44
  1431.   did %action atma_config 45
  1432.   did %action atma_config 72
  1433.   did %action atma_config 73
  1434.   did %action atma_config 74
  1435.   did %action atma_config 75
  1436.   if ($Atma.Triggers) {
  1437.     did -c atma_config 32 $iif($1,$1,1)
  1438.     did -c atma_config 103 $iif($1,$calc($1 + 1),1)
  1439.     var %Trigger = $trig.encode($did(atma_config,32).seltext)
  1440.     did $iif($hget(_/\tmaFS,Triggers. $+ %Trigger),-c,-u) atma_config 34
  1441.     did -o atma_config 40 1 $hget(_/\tmaFS,Triggers. $+ %Trigger $+ .Root)
  1442.     did -o atma_config 43 1 $hget(_/\tmaFS,Triggers. $+ %Trigger $+ .MOTD)
  1443.     didtok atma_config 36 44 $hget(_/\tmaFS,Triggers. $+ %Trigger $+ .Channels)
  1444.     did $iif($hget(_/\tmaFS,Triggers. $+ %Trigger $+ .AllChans),-c,-u) atma_config 39
  1445.     var %action = $iif($hget(_/\tmaFS,Triggers. $+ %Trigger $+ .AllChans),-b,-e)
  1446.     did %action atma_config 36
  1447.     did %action atma_config 37
  1448.     did %action atma_config 38
  1449.  
  1450.   }    
  1451.   else {
  1452.     did -c atma_config 103 1
  1453.   }
  1454. }
  1455.  
  1456. alias -l updateChans {
  1457.   did -r atma_config 197
  1458.   didtok atma_config 197 5 $Atma.Networks
  1459.   did -c atma_config 197 $iif($1,$1,1)
  1460.  
  1461.   did -r atma_config 167
  1462.   didtok atma_config 167 5 $Atma.Channels($did(atma_config,197).seltext)
  1463.   did -c atma_config 167 $iif($2,$2,1)
  1464.  
  1465.   var %net = $did(atma_config,197).seltext
  1466.   var %chan = $did(atma_config,167).seltext
  1467.  
  1468.   did -o atma_config 181 1 $Atma(MaxUSends)
  1469.   did -o atma_config 182 1 $Atma(MaxTSends)
  1470.   did -o atma_config 184 1 $Atma.Channels(%net,%chan).MaxUQueues
  1471.   did -o atma_config 183 1 $Atma.Channels(%net,%chan).MaxTQueues
  1472.   did -o atma_config 193 1 $Atma.Channels(%net,%chan).MaxUsers
  1473.  
  1474.   did -c atma_config 194 $iif($Atma.Channels(%net,%chan).QueueUsing == FileCount,1,2)
  1475.  
  1476.   did $iif($Atma.Channels(%net,%chan).@Find,-c,-u) atma_config 190
  1477.   did $iif($Atma.Channels(%net,%chan).RespondToList,-c,-u) atma_config 22
  1478.  
  1479.   did $iif($Atma.Channels(%net,%chan).EnableAd,-c,-u) atma_config 158
  1480.  
  1481.   did $iif($Atma.Channels(%net,%chan).TriggerType == Normal,-c,-u) atma_config 163
  1482.   did $iif($Atma.Channels(%net,%chan).TriggerType == CTCP,-c,-u) atma_config 164
  1483.  
  1484.   did -o atma_config 160 1 $Atma.Channels(%net,%chan).Interval
  1485.  
  1486.   did $iif($Atma.Channels(%net,%chan).IntervalUnit == Minutes,-c,-u) atma_config 162
  1487.   did $iif($Atma.Channels(%net,%chan).IntervalUnit == Seconds,-c,-u) atma_config 161
  1488.  
  1489.   did -o atma_config 24 1 $Atma.Channels(%net,%chan).InfoLine
  1490. }
  1491.  
  1492. alias -l updateStats {
  1493.   $iif(!$dialog(atma_config),return)
  1494.   did -o atma_config 143 1 $iif($Atma.Config(LeechedFiles),$ifmatch,0)
  1495.   did -o atma_config 144 1 $iif($Atma.Config(LeechedBytes),$bytes($ifmatch).suf ( $+ $ifmatch bytes),0 bytes)
  1496.   did -o atma_config 145 1 $iif($Atma.Config(RecordSpeed),$round($calc($gettok($ifmatch,2,32) / 1024),2) $+ kb/s by $gettok($ifmatch,1,32),0kb/s)
  1497.   did -o atma_config 146 1 $iif($Atma.Config(Hits),$ifmatch,0)
  1498. }
  1499.  
  1500. alias -l updateAccess {
  1501.   var %Scope = $trig.encode($did(atma_config,103).seltext)
  1502.   did -r atma_config 100
  1503.   $iif(%Scope == Global^32Permissions,set %Scope Access.,set %Scope Triggers. $+ %Scope $+ .Access.)
  1504.   var %counter = 1
  1505.   while (%counter <= $hfind(_/\tmaFS,%Scope $+ *,0,w)) {
  1506.     if ($gettok($Atma.Config($hfind(_/\tmaFS,%Scope $+ *,%counter,w)),1,32) == $iif($did(atma_config,132).state,Allow,Deny)) {
  1507.       .echo -q $regex($hfind(_/\tmaFS,%Scope $+ *,%counter,w),/Access.(.*)$/)
  1508.       did -a atma_config 100 $regml(1) ( $+ $iif($gettok($Atma.Config($hfind(_/\tmaFS,%Scope $+ *,%counter,w)),2,32),$asctime($ifmatch),Never Expires) $+ ) $gettok($Atma.Config($hfind(_/\tmaFS,%Scope $+ *,%counter,w)),3-,32)
  1509.     }
  1510.     inc %counter
  1511.   }
  1512. }
  1513.  
  1514. alias -l updateStyle {
  1515.   did -r atma_config 59
  1516.   var %counter = 1
  1517.   while (%counter <= $hget(_/\tmaFS.STP,0).item) {
  1518.     did -a atma_config 59 $hget(_/\tmaFS.STP,%counter).item
  1519.     inc %counter
  1520.   }
  1521.   did -c atma_config 59 $findtok($didtok(atma_config,59,5),$hfind(_/\tmaFS.STP,$did(atma_config,57),1).data,1,5)
  1522. }
  1523.  
  1524. alias -l updateQueues {
  1525.   var %dropdown
  1526.   did -r atma_queues 1
  1527.   $iif(!$lines(" $+ $scriptdirqueues.dat $+ "),return)
  1528.   var %counter = 1
  1529.   while (%counter <= $lines(" $+ $scriptdirqueues.dat $+ ")) {
  1530.     did -a atma_queues 1 %counter $gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),1,32) $gettok($read(" $+ $scriptdirqueues.dat $+ ",%counter),2-,32)
  1531.     inc %counter
  1532.   }
  1533.   did -c atma_queues 1 $iif($1,$1,1)
  1534.  
  1535.   if ($did(atma_queues,1).sel < 1) {
  1536.     did -b atma_queues 10,11,12,13
  1537.     did -r atma_queues 5,18,7,9
  1538.     return
  1539.   }
  1540.   did -o atma_queues 5 1 $gettok($did(atma_queues,1).seltext,1,32)
  1541.   did -o atma_queues 18 1 $gettok($did(atma_queues,1).seltext,2,32) ( $+ $servername($gettok($did(atma_queues,1).seltext,3,32)) $+ )
  1542.   did -o atma_queues 7 1 $nopath($gettok($did(atma_queues,1).seltext,4-,32))
  1543.   did -o atma_queues 9 1 $bytes($file($gettok($did(atma_queues,1).seltext,4-,32)).size,3).suf
  1544.   did -e atma_queues 10,11,12,13
  1545. }
  1546.  
  1547. alias Atma.SendFile {
  1548.   ;Atma.Sendfile $nick $file
  1549.  
  1550.   var %chan = $Atma.Channels($Atma.Networks($networkname),$Atma.Sessions($1).Channel)
  1551.   $iif(!$1 || !$2-,return)
  1552.   if ($Atma.Sends >= $Atma(maxTSends)) {
  1553.     Atma.Queue $1 $2-
  1554.     return
  1555.   }
  1556.   if ($Atma.Sends($1) >= $Atma(maxUSends)) {
  1557.     Atma.Queue $1 $2-
  1558.     return
  1559.   }
  1560.   .dcc maxcps $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0)
  1561.   dcc send -cl $+ $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) $1 $2-
  1562. }
  1563.  
  1564. alias Atma.Queue {
  1565.   $iif($hget(_/\tmaFS.Queues),hfree _/\tmaFS.Queues)
  1566.   hmake _/\tmaFS.Queues 10
  1567.   var %counter = 1
  1568.   while (%counter <= $iif($lines(" $+ $scriptdirqueues.dat $+ "),$ifmatch,0)) {
  1569.     hadd _/\tmaFS.Queues %counter $read(" $+ $scriptdirqueues.dat $+ ",%counter)
  1570.     inc %counter
  1571.   }
  1572.   if ($isid) {
  1573.     var %regex = /^ $+ $1 $iif($2,$2,$cid) /i
  1574.     if ($prop == size) {
  1575.       if ($2) {
  1576.         return $hget(_/\tmaFS.Queues,$hfind(_/\tmaFS.Queues,%regex,$2,r).data)
  1577.       }
  1578.       else {
  1579.         var %QueuesMB = 0
  1580.         var %counter = 1
  1581.         while (%counter <= $hfind(_/\tmaFS.Queues,%regex,0,r).data) {
  1582.           inc %QueuesMB $bytes($file($gettok($hget(_/\tmaFS.Queues,$hfind(_/\tmaFS.Queues,%regex,%counter,r).data),2-,32)).size,m)
  1583.           inc %counter
  1584.         }
  1585.         return %QueuesMB
  1586.       }
  1587.     }
  1588.     else {
  1589.       if ($2) {
  1590.         return $hget(_/\tmaFS.Queues,$hfind(_/\tmaFS.Queues,%regex,$2,r).data)
  1591.       }
  1592.       else {
  1593.         return $hfind(_/\tmaFS.Queues,%regex,0,r).data
  1594.       }
  1595.     }
  1596.  
  1597.   }
  1598.   else {
  1599.     Atma.AddQueue $1 $cid $2-
  1600.   }
  1601. }
  1602.  
  1603. alias -l Atma.AddQueue {
  1604.   $iif(!$3-,return)
  1605.   var %chan = $Atma.Channels($Atma.Networks($networkname),$Atma.Sessions($1).Channel)
  1606.   var %regex = /^ $+ $1 $2 $regex.encode($3-) $+ $ $+ /i
  1607.   if ($hfind(_/\tmaFS.Queues,%regex,0,r).data) {
  1608.     msg =$nick You have already queued the file $nopath($3-)
  1609.   }
  1610.   else {
  1611.     if ($Atma.Queue($1).Count >= $Atma.Channels($Atma.Networks($networkname),%chan).maxTQueues) {
  1612.       msg =$nick The FServ queue limit has been reached. Wait for some sends to finish, then try again.
  1613.       return
  1614.     }
  1615.     if ($Atma.Queue($1).Count >= $Atma.Channels($Atma.Networks($networkname),%chan).maxUQueues) {
  1616.       msg =$nick You have reached your maximum queue limit. Wait for some of your sends to finish, then try again.
  1617.       return
  1618.     }
  1619.     write " $+ $scriptdirqueues.dat $+ " $1 $2 $3-
  1620.     msg =$nick Your file ( $+ $nopath($3-) $+ ) has been queued into slot $lines(" $+ $scriptdirqueues.dat $+ ")
  1621.   }
  1622. }
  1623.  
  1624. alias Atma.ProcessQueues {
  1625.   $iif($Atma.Sends >= $Atma(maxTSends),return)
  1626.   $iif(!$lines(" $+ $scriptdirqueues.dat $+ "),return)
  1627.   scid $gettok($read(" $+ $scriptdirqueues.dat $+ ",1),2,32)
  1628.   $iif($Atma.Sends($gettok($read(" $+ $scriptdirqueues.dat $+ ",1),1,32)) >= $Atma(maxUSends),return)
  1629.   .dcc maxcps $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0)
  1630.   dcc send -cl $+ $iif($Atma(MaxCPS.Enabled),$calc($Atma(MaxCPS)*1000),0) $gettok($read(" $+ $scriptdirqueues.dat $+ ",1),1,32) $gettok($read(" $+ $scriptdirqueues.dat $+ ",1),3-,32)
  1631.   write -dl1 " $+ $scriptdirqueues.dat $+ "
  1632. }
  1633.  
  1634. alias -l Atma.ClearQueues {
  1635.   while ($read(" $+ $scriptdirqueues.dat $+ ",w,$1 *)) {
  1636.     var %line = $readn
  1637.     write -dl $+ %line " $+ $scriptdirqueues.dat $+ "
  1638.   }
  1639. }
  1640.  
  1641. alias -l RelativePath {
  1642.   ;var %regex = /^ $+ $replace($1,\,\\) $+ (.*?)$/
  1643.   var %regex = /^ $+ $regex.encode($1) $+ (.*?)$/
  1644.   var %relativepath
  1645.   .echo -q $regex(relpath,$2,%regex)
  1646.   debug.print $lower(\ $+ $regml(relpath,1))
  1647.   return \ $+ $replace($regml(relpath,1),$chr(32),$chr(5))
  1648. }
  1649.  
  1650. alias -l Atma.CacheTriggers {
  1651.   window -doC @Atma 1 1 300 200
  1652.   $iif($hget(_/\tmaFS.Cache),hfree _/\tmaFS.Cache)
  1653.   $iif(!$Atma.Triggers,return)
  1654.   var %Atma.Triggers = $trig.encode($Atma.Triggers)
  1655.   hmake _/\tmaFS.Cache 1000
  1656.   echo -s AtmaFS: Caching FServ files...
  1657.   var %starttime = $ticks
  1658.   var %counter = 1
  1659.   var %filecount = 0
  1660.   while (%counter <= $numtok(%Atma.Triggers,5)) {
  1661.     var %files = $findfile($Atma.Config(Triggers. $+ $gettok(%Atma.Triggers,%counter,5) $+ .Root),*.*,0,hadd _/\tmaFS.Cache $gettok(%Atma.Triggers,%counter,5) $+ $chr(5) $+ $RelativePath($Atma.Config(Triggers. $+ $gettok(%Atma.Triggers,%counter,5) $+ .Root),$1-) $file($1-).size)
  1662.     var %fcount
  1663.     echo -s $gettok($Atma.Triggers,%counter,5) -- Cached %files files
  1664.     inc %filecount %files
  1665.     inc %counter
  1666.   }
  1667.   hsave -ob _/\tmaFS.Cache " $+ $scriptdirfscache.dat $+ "
  1668.   echo -s Finished caching %filecount FServ files ( $+ $calc(($ticks - %starttime) / 1000) seconds , $calc(%filecount / (($ticks - %starttime) / 1000)) files per second $+ ).
  1669.   window -c @Atma
  1670. }
  1671.  
  1672. alias Atma.QuickSearch {
  1673.   $iif(!$1,return 0)
  1674.   var %regex = /^.*? $+ $lower($replace($1,\,\\,.,\.,?,.,*,.*?,[,\[,],\])) $+ [^\\]*?$/
  1675.   return $iif($2 && ($prop == size),$hget(_/\tmaFS.Cache,$hfind(_/\tmaFS.Cache,%regex,$iif($2,$2,0),r)),$replace($hfind(_/\tmaFS.Cache,%regex,$iif($2,$2,0),r),$chr(5),$chr(32)))
  1676. }
  1677. alias -l formatstr_preview {
  1678.   ;modded considerably from ZeeG's $xd.p previewing alias in xServ
  1679.  
  1680.   var %preview = " $+ $scriptdiratma-preview.bmp $+ "
  1681.   var %prvstr = $parse_formatstr(#pinet,$did(atma_config,57))
  1682.   window -phf @atma_preview 0 0 528 16
  1683.   $iif(%prvstr,drawtext -bpc @atma_preview $colour(normal) $colour(background) verdana -7 1 1 528 16 %prvstr)
  1684.   drawsave @atma_preview %preview
  1685.   window -c @atma_preview
  1686.   return %preview
  1687. }
  1688.  
  1689. alias -l Atma.CheckMinCPS {
  1690.   $iif(!$send(0),return)
  1691.   $iif($timer(_/\tma.CheckMinCPS.Terminate),return)
  1692.   var %counter = 1
  1693.   while (%counter <= $send(0)) {
  1694.     if ($send(%counter).cps < $Atma(MinCPS)) {
  1695.       .timer_/\tma.CheckMinCPS.Terminate 1 $Atma(MinCPS.Secs) Atma.CheckMinCPS.Terminate %counter
  1696.       return
  1697.     }
  1698.     inc %counter
  1699.   }
  1700. }
  1701.  
  1702. alias -l Atma.CheckMinCPS.Terminate {
  1703.   if ($send($1).cps < $Atma(MinCPS)) {
  1704.     .notice $send($1) Your send of $send($1).file has been canceled because the bytes per second dropped below the server minimum of $Atma(MinCPS) for a duration of $Atma(MinCPS.Secs) seconds.
  1705.     close -s $+ $1
  1706.   }
  1707. }
  1708.  
  1709. alias Atma.Access {
  1710.   $iif(!$1,return)
  1711.   $iif(!$istok($trig.encode($Atma.Triggers),$2,5),return)
  1712.  
  1713.   var %Trig.AllowList = 0
  1714.   var %Trig.Allowed = 0
  1715.   var %regex = /^Triggers. $+ $replace($2,^,\^) $+ .Access.(.*?)$/
  1716.   var %counter = 1
  1717.   while (%counter <= $hfind(_/\tmaFS,%regex,0,r)) {
  1718.     .echo -q $regex($hfind(_/\tmaFS,%regex,%counter,r),%regex)
  1719.     var %matchhost = $regml(1)
  1720.     if ((%matchhost iswm $1) && ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == DENY)) {
  1721.       return DENIED You are banned from using this trigger. Reason:( $gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),3-,32) ) (Ban Expires: $iif($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),2,32),$asctime($ifmatch) / Current time = $asctime($ctime),Never) )
  1722.     }
  1723.     if ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == ALLOW) {
  1724.       %Trig.AllowList = 1
  1725.       $iif(%matchhost iswm $1, %Trig.Allowed = 1)
  1726.     }
  1727.     inc %counter
  1728.   }
  1729.  
  1730.   var %Global.AllowList = 0
  1731.   var %Global.Allowed = 0
  1732.   var %regex = /^Access.(.*?)$/
  1733.   var %counter = 1
  1734.   while (%counter <= $hfind(_/\tmaFS,%regex,0,r)) {
  1735.     .echo -q $regex($hfind(_/\tmaFS,%regex,%counter,r),%regex)
  1736.     var %matchhost = $regml(1)
  1737.     if ((%matchhost iswm $1) && ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == DENY)) {
  1738.       return DENIED You are banned from using this FileServer. Reason:( $gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),3-,32) ) (Ban Expires: $iif($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),2,32),$asctime($ifmatch) / Current time = $asctime($ctime),Never) )
  1739.     }
  1740.     if ($gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),1,32) == ALLOW) {
  1741.  
  1742.       %Global.AllowList = 1
  1743.       $iif(%matchhost iswm $1, %Global.Allowed = 1)
  1744.     }
  1745.     inc %counter
  1746.   }
  1747.   if (%Trig.AllowList || %Global.AllowList) {
  1748.     $iif(%Trig.AllowList && %Trig.Allowed,return ALLOWED)
  1749.     $iif(%Global.AllowList && %Global.Allowed,return ALLOWED)
  1750.     return DENIED You do not have permission to access this exclusive $iif(%Global.AllowList,FileServer.,trigger.)
  1751.   }
  1752.   else {
  1753.     return ALLOWED
  1754.   }
  1755. }
  1756.  
  1757. alias Atma.Access.Add {
  1758.   var %Scope = $iif($2 != Global,Triggers. $+ $2 $+ .Access.,Access.)
  1759.   hadd _/\tmaFS %Scope $+ $1 $3-
  1760. }
  1761.  
  1762. alias -l Atma.Access.Remove {
  1763.   var %Scope = $iif($2 != Global,Triggers. $+ $2 $+ .Access.,Access.)
  1764.   Atma.Config -r %Scope $+ $1
  1765. }
  1766.  
  1767. alias -l Atma.Access.Audit {
  1768.   var %regex = /^(Triggers\..*?\.)?Access.(.*?)$/
  1769.   var %counter = 1
  1770.   while (%counter <= $hfind(_/\tmaFS,%regex,0,r)) {
  1771.     .echo -q $regex($hfind(_/\tmaFS,%regex,%counter,r),%regex)
  1772.     if (*!*@* iswm $regml($regml(0))) {
  1773.       var %expires = $gettok($Atma.Config($hfind(_/\tmaFS,%regex,%counter,r)),2,32)
  1774.       if (%expires && (%expires < $ctime)) {
  1775.         debug.print PERMISSION $hfind(_/\tmaFS,%regex,%counter,r) EXPIRED, PURGED
  1776.         Atma.Config -r $hfind(_/\tmaFS,%regex,%counter,r)
  1777.       }
  1778.     }
  1779.     inc %counter
  1780.   }
  1781. }
  1782.  
  1783. alias -l trig.encode {
  1784.   return $replace($1-, $&
  1785.     $chr(32),^32, $&
  1786.     $chr(46),^46)
  1787. }
  1788. alias -l trig.decode {
  1789.   return $replace($1-, $&
  1790.     ^32,$chr(32), $&
  1791.     ^46,$chr(46))
  1792. }
  1793. alias -l regex.encode {
  1794.   return $replace($1-, $&
  1795.     \,\\, $&
  1796.     .,\., $&
  1797.     *,\*, $&
  1798.     +,\+, $&
  1799.     [,\[, $&
  1800.     ],\], $&
  1801.     $chr(40), \ $+ $chr(40), $&
  1802.     $chr(41), \ $+ $chr(41))
  1803. }
  1804. alias -l _errorbox .echo -q $input($$1-,260,$Atma)
  1805. alias -l debug.print $iif($window(@Atma),aline @Atma $$1-)
  1806. alias -l servername { scon $1 return $!server }
  1807. alias networkname { return $iif($network,$network,atma.unknown.network) }
  1808.