;-----------------------------------------------------------------------------
; .____________. .____________.
;.___________|─ ¬:_______________________________/\____|─ ¬:
;:─ ¬\ :|─ __________ _ \\ ¬\ :|
;|: \ || _____)_________ | ∙\ \ ||
;|| |\___________|__________________ /_____________/ |\___________|
;l___________|-------------------------------\/yop l____________|---------.
;- - - -- -- --- ----] nEON uTiLS sECTiON[-------------------------------'
;
; iSDN^lOGiN vERSiON o.8 ^ sOURCE cODE ^ fEATURES cALLER^iD iDENTIFICATION
; cODED bY mIGHTY j!^uSiNG cFOS rOUTiNES bY m.wINKLER/c.lUEDERS
;
;-----------------------------------------------------------------------------
; [ pLEASE cHECK tHE fILE NE-LOGiN.DOX fOR fURTHER iNFORMATiONS ]
;=================================================[ VARIABLES & FUNCTIONS ]===
Word NameXCoordinate
Word NameYCoordinate
Word PasswordXCoordinate
Word PasswordYCoordinate
Word UInfoXCoordinate
Word UInfoYCoordinate
Word LastCallXCoordinate
Word LastCallYCoordinate
Word CallsXCoordinate
Word CallsYCoordinate
Word InfoBoxXCoordinate
Word InfoBoxYCoordinate
Word MessageConf
String DefaultColor
String NormalColorBar
String HiLightColorBar
String ContinueString
String ReenterString
String DisconnectString
Boolean AskSystemPassword
Word SystemPasswordTries
String SystemPasswordPrompt
String SystemPasswordDot
String SystemPassword
String SystemPasswordFalseString
String SystemPasswordOkString
Boolean ShowPassword
Word PasswordTries
String PasswordDot
Word StatusYCoordinate
String StatusAskHandle
String StatusAskPassword
String StatusWrongPassword
String StatusDisconnect
String StatusWelcome
Boolean BroadcastMessage
String BroadcastMessageText
String ISDNRegistrationPrompt
String ISDNYesPrompt
String ISDNNoPrompt
Word ISDNNumberYCoordinate
String ISDNNumberText
Word ISDNStatusYCoordinate
String ISDNFoundText
String ISDNNotFoundText
Boolean ISDNStuffCR
Boolean ISDNAskSystemPassword
Boolean ISDNEnabled
Boolean MailSysopOnNumChg
Boolean KickUserOnNumChg
String ISDNNumberChangedText
Boolean AllowNumChange
String UserName
String UserPassword
String TempStr
String TempNum
String Buffer
String Ch
Word Counter
Word Position
Boolean NewUser
String Number
Boolean ModemOk
String ModemInfo
String NumberCRC
Boolean UserInDatabase
String OldPos
String Password
String CrLf
Declare Procedure GetISDNData()
Declare Function NE_Input(String Mask, String St, Int MaxLen, Boolean WordWarp, String HideChar) String
Declare Procedure PrintCenter(String St, Word YPosition)
Declare Procedure UpDateInfo(String Entered)
Declare Function PW_Input(Int MaxLen, String PWChar) String
Declare Function CheckSum(String Data) String
;==========================================================[ MAIN PROGRAM ]===
Begin
;------------------------------------------------------[ READ CONFIG FILE ]---
CrLf=Chr(13)+Chr(10)
KbdFlush
If (Exist(PPEPath()+"NE-LOGIN.CFG")=False) Then
PrintLn "@X04THE NEON iSDN^LOGiN CONFIG FILE IS MISSING! HALTING SYSTEM!@X07"
Wait
DTROff
HangUp
End
EndIf
FOpen 1,PPEPath()+"NE-LOGIN.CFG",o_rd,s_dn
FGet 1,NameXCoordinate
FGet 1,NameYCoordinate
FGet 1,PasswordXCoordinate
FGet 1,PasswordYCoordinate
FGet 1,UInfoXCoordinate
FGet 1,UInfoYCoordinate
FGet 1,LastCallXCoordinate
FGet 1,LastCallYCoordinate
FGet 1,CallsXCoordinate
FGet 1,CallsYCoordinate
FGet 1,DefaultColor
FGet 1,NormalColorBar
FGet 1,HiLightColorBar
FGet 1,ContinueString
FGet 1,ReenterString
FGet 1,DisconnectString
FGet 1,TempStr
AskSystempassword=(Upper(Left(TempStr,1))="Y")
FGet 1,SystemPasswordTries
FGet 1,SystemPasswordPrompt
FGet 1,TempStr
SystemPasswordDot=Left(TempStr,1)
FGet 1,SystemPassword
FGet 1,SystemPasswordFalseString
FGet 1,SystemPasswordOkString
FGet 1,TempStr
ShowPassword=(Upper(Left(TempStr,1))="Y")
FGet 1,PasswordTries
FGet 1,TempStr
PasswordDot=Left(TempStr,1)
FGet 1,StatusYCoordinate
FGet 1,StatusAskHandle
FGet 1,StatusAskPassword
FGet 1,StatusWrongPassword
FGet 1,StatusDisconnect
FGet 1,StatusWelcome
FGet 1,TempStr
BroadcastMessage=(Upper(Left(TempStr,1))="Y")
FGet 1,BroadcastMessageText
FGet 1,ISDNRegistrationPrompt
FGet 1,ISDNYesPrompt
FGet 1,ISDNNoPrompt
FGet 1,ISDNNumberYCoordinate
FGet 1,ISDNNumberText
FGet 1,ISDNStatusYCoordinate
FGet 1,ISDNFoundText
FGet 1,ISDNNotFoundText
FGet 1,InfoBoxXCoordinate
FGet 1,InfoBoxYCoordinate
FGet 1,TempStr
ISDNEnabled=(Upper(Left(TempStr,1))="Y")
FGet 1,TempStr
ISDNStuffCR=(Upper(Left(TempStr,1))="Y")
FGet 1,TempStr
ISDNAskSystemPassword=(Upper(Left(TempStr,1))="Y")
FGet 1,TempStr
If (Upper(Left(TempStr,1))="M") Then
MailSysopOnNumChg=True
KickUserOnNumChg=False
ElseIf (Upper(Left(TempStr,1))="L") Then
MailSysopOnNumChg=True
KickUserOnNumChg=True
Else
MailSysopOnNumChg=False
KickUserOnNumChg=False
EndIf
FGet 1,MessageConf
FGet 1,ISDNNumberChangedText
FClose 1
;--------------------------------------------------[ ISDN PRELOGIN SYSTEM ]---
UserInDatabase=False
GetISDNData()
If ((ModemOk)&(Number<>0)) Then
DispFile PPEPath()+"ISDN.PCB",defs
PrintCenter(ReplaceStr(ISDNNumberText,"%NUMBER%",Number),ISDNNumberYCoordinate)
If (!Exist(PPEPath()+"NE-ISDN.USR")) Then
PrintCenter(ISDNNotFoundText,ISDNStatusYCoordinate)
Delay 10
Cls
Goto SystemPasswordLogin
EndIf
FOpen 1,PPEPath()+"NE-ISDN.USR",o_rd,s_dn
While ((FErr(1)=0)&(NumberCRC<>CheckSum(Number))) Do
FGet 1,NumberCRC
FGet 1,TempStr
EndWhile
FClose 1
If (NumberCRC=CheckSum(Number)) Then
PrintCenter(ISDNFoundText,ISDNStatusYCoordinate)
UserName=Upper(TempStr)
UserInDatabase=True
Else
PrintCenter(ISDNNotFoundText,ISDNStatusYCoordinate)
Delay 10
Cls
Goto SystemPasswordLogin
EndIf
Delay 10
Cls
If (!ISDNAskSystemPassword) Goto MainLogin
EndIf
;----------------------------------------[ ASK SYSTEM PASSWORD IF ENABLED ]---
; *$Include:IEMSI.PPS
:SystemPasswordLogin
If (AskSystemPassword) Then
Counter=0
:GetSystemPassword
Inc Counter
Print SystemPasswordPrompt+"@POFF@"
:AgainSystemPassword
TempStr=""
TempStr=Upper(NE_Input(Mask_Ascii(),"",70,False,SystemPasswordDot))
If (TempStr="") Goto AgainSystemPassword
PrintLn
If (TempStr<>SystemPassword) Then
PrintLn CrLf+SystemPasswordFalseString+CrLf
If (Counter=SystemPasswordTries) Then
PrintLn
DTROff
HangUp
End
EndIf
Goto GetSystemPassword
EndIf
PrintLn CrLf+SystemPasswordOkString
EndIf
;-------------------------------------------------[ MAIN LOGIN PROCEDURES ]---
UserName=""
:MainLogin
NewUser=False
DispFile PPEPath()+"Welcome.PCB",Defs
Print "@POFF@"
:GetName
PrintCenter(StatusAskHandle,StatusYCoordinate)
Print DefaultColor
AnsiPos NameXCoordinate,NameYCoordinate
If ((UserInDataBase)&(ISDNStuffCR)) Then
Print UserName
Else
UserName=Upper(NE_Input(Mask_Ascii(),UserName,25,False,""))
EndIf
If (U_RecNum(UserName)=-1) Then
AnsiPos 1,StatusYCoordinate
ClrEol
Position=40-((Len(ContinueString)+Len(ReenterString)+Len(DisconnectString)+6)/2)
Counter=2
:AskIt
AnsiPos Position-1,StatusYCoordinate
Print NormalColorBar+Chr(32)+ContinueString+Chr(32)+DefaultColor
AnsiPos Position+Len(ContinueString)+2,StatusYCoordinate
Print NormalColorBar+Chr(32)+ReenterString+Chr(32)+DefaultColor
AnsiPos Position+Len(ContinueString)+Len(ReenterString)+5,StatusYCoordinate
Print NormalColorBar+Chr(32)+DisconnectString+Chr(32)+DefaultColor
If (Counter=1) Then
AnsiPos Position-1,StatusYCoordinate
Print HiLightColorBar+Chr(32)+ContinueString+Chr(32)+DefaultColor
ElseIf (Counter=2) Then
AnsiPos Position+Len(ContinueString)+2,StatusYCoordinate
Print HiLightColorBar+Chr(32)+ReenterString+Chr(32)+DefaultColor
ElseIf (Counter=3) Then
AnsiPos Position+Len(ContinueString)+Len(ReenterString)+5,StatusYCoordinate
Print HiLightColorBar+Chr(32)+DisconnectString+Chr(32)+DefaultColor
EndIf
:AskItKey
Ch=InKey()
If (Ch="LEFT") Then
Dec Counter
If (Counter<1) Counter=3
Goto AskIt
ElseIf (Ch="RIGHT") Then
Inc Counter
If (Counter>3) Counter=1
Goto AskIt
ElseIf (Ch=Chr(13)) Then
If (Counter=1) Then
NewUser=True
ElseIf (Counter=2) Then
Goto GetName
ElseIf (Counter=3) Then
Cls
HangUp
End
EndIf
Else
Goto AskItKey
EndIf
EndIf
GetAltUser (U_RecNum(UserName))
AnsiPos NameXCoordinate,NameYCoordinate
Print Upper(UserName)
AnsiPos UInfoXCoordinate,UInfoYCoordinate
Print U_City
AnsiPos LastCallXCoordinate,LastCallYCoordinate
Print U_LDate()
AnsiPos CallsXCoordinate,CallsYCoordinate
Print U_TimeOn()
Counter=0
TempStr=""
:GetPassword
If (U_Pwd="") Goto DonePassword
Inc Counter
PrintCenter(StatusAskPassword,StatusYCoordinate)
Print DefaultColor
AnsiPos PasswordXCoordinate,PasswordYCoordinate
Print Space(30)
AnsiPos PasswordXCoordinate,PasswordYCoordinate
:AgainPassword
TempStr=""
OldPos="["+String(GetY())+";"+String(GetX())+"H"
SPrint "["+String(InfoBoxYCoordinate)+";"+String(InfoBoxXCoordinate)+"H"
SPrintLn "[0;1;34;44m┌────────────────────────────────┐[40m"
SPrint "["+String(InfoBoxYCoordinate+1)+";"+String(InfoBoxXCoordinate)+"H"
SPrintLn "[44m│ [0;36;44mUserName[1;34m: [1;36m"+Left(UserName,21)+"[34m│[40m"
SPrint "["+String(InfoBoxYCoordinate+2)+";"+String(InfoBoxXCoordinate)+"H"
SPrintLn "[44m│ [0;36;44mUserLvl [1;34m: [1;36m"+Left(U_Sec ,21)+"[34m│[40m"
SPrint "["+String(InfoBoxYCoordinate+3)+";"+String(InfoBoxXCoordinate)+"H"
SPrintLn "[44m│ [0;36;44mPassword[1;34m: │[40m"
SPrint "["+String(InfoBoxYCoordinate+4)+";"+String(InfoBoxXCoordinate)+"H"
SPrintLn "[44m│ [0;36;44mEntered [1;34m: │[40m"
SPrint "["+String(InfoBoxYCoordinate+5)+";"+String(InfoBoxXCoordinate)+"H"
SPrintLn "[44m└────────────────────────────────┘[0m"
AnsiPos PasswordXCoordinate,PasswordYCoordinate
TempStr=PW_Input(20,PasswordDot)
If (TempStr="") Goto AgainPassword
If ((TempStr<>U_Pwd)&(!NewUser)) Then
If (Counter=PasswordTries) Then
PrintCenter(StatusDisconnect,StatusYCoordinate)
Delay 10
Print DefaultColor
HangUp
End
Else
PrintCenter(StatusWrongPassword,StatusYCoordinate)
Print DefaultColor
EndIf
Delay 10
Goto GetPassword
EndIf
PrintCenter(StatusWelcome,StatusYCoordinate)
Print Chr(13)+Chr(10)+"@X08iSDN^lOGiN vERSiON o.8 wAS cODED bY mIGHTY j/nE0N@X07"
; ^ aNYONE cHANGiNG tHIS lINE oR iTS mEANS iS *REALLY* nEAR tO dEATH ^
:DonePassword
Cls
FCreate 1,PPEPath()+"NE-LOGPW."+String(PCBNode()),o_rw,s_dn
FPutLn 1,TempStr
FPutLn 1,"THiS FiLE iS CREATED FOR GiViNG THE PASSWORD FROM NE-LOGiN TO NE-PW ONLY!"
FPutLn 1,"iT WiLL BE DELETED AFTER CALLiNG NE-PW!"
FClose 1
AllowNumChange=True
If ( (Exist(PPEPath()+"NE-ISDN.USR")) & ((MailSysOpOnNumChg)|(KickUserOnNumChg)) & (ModemOk) & (Number<>0)) Then
If (Exist(PPEPath()+"NE-ISDN.EXC")) Then
FOpen 1,PPEPath()+"NE-ISDN.EXC",o_rw,s_dn
While ((Upper(TempStr)<>Upper(UserName))&(Upper(TempStr)<>"[EOF]")) Do
FGet 1,TempStr
EndWhile
FClose 1
EndIf
If (TempStr<>Upper(UserName)) Then
FOpen 1,PPEPath()+"NE-ISDN.USR",o_rw,s_dn
While ((Upper(TempStr)<>Upper(UserName))&(FErr(1)=0)) Do
FGet 1,TempNum
FGet 1,TempStr
EndWhile
FClose 1
If ((TempNum<>CheckSum(Number))&(Upper(TempStr)=Upper(UserName))) Then
AllowNumChange=False
FOpen 1,PPEPath()+"NE-ISDN.MSG",o_rw,s_dn
FCreate 2,PPEPath()+"NE-ISDN.TMP",o_rw,s_dn
While (FErr(1)=0) Do
FGet 1,TempStr
TempStr=ReplaceStr(TempStr,"%USER%",UserName)
TempStr=ReplaceStr(TempStr,"%NUMBER%",Number)
FPutLn 2,TempStr
EndWhile
FClose 2
FClose 1
Message MessageConf,"SYSOP",U_NAME(),"NEON LOGiN","R",0,FALSE,TRUE,PPEPATH()+"NE-ISDN.TMP"
If (Exist(PPEPath()+"NE-ISDN.TMP")) Delete PPEPath()+"NE-ISDN.TMP"
If (KickUserOnNumChg) Then
DispFile PPEPath()+"KICK.PCB",Defs
Wait
DTROff
HangUp
End
Else
PrintLn ISDNNumberChangedText
EndIf
EndIf
EndIf
EndIf
If ((ModemOk)&(Number<>0)&(!UserInDatabase)) Then
Print ReplaceStr(ISDNRegistrationPrompt,"%NUMBER%",Number)
:AskISDNNumber
Ch=Upper(InKey())
If ((Ch<>"Y")&(Ch<>"N")&(Ch<>Chr(13))) Goto AskISDNNumber
If (Ch<>"N") Then
PrintLn ISDNYesPrompt
If (Exist(PPEPath()+"NE-ISDN.USR")) Then
If (AllowNumChange) Then
FAppend 1,PPEPath()+"NE-ISDN.USR",o_rw,s_dn
Else
If (Exist(PPEPath()+"NE-ISDN.TMP")) Delete PPEPath()+"NE-ISDN.TMP"
Rename PPEPath()+"NE-ISDN.USR",PPEPath()+"NE-ISDN.TMP"
FOpen 2,PPEPath()+"NE-ISDN.TMP",o_rw,s_dn
FCreate 1,PPEPath()+"NE-ISDN.USR",o_rw,s_dn
While (FErr(2)=0) Do
FGet 2,TempNum
FGet 2,TempStr
If ((Upper(TempStr)<>Upper(UserName))&(TempStr<>"")) Then
FPutLn 1,TempNum
FPutLn 1,TempStr
EndIf
EndWhile
FClose 2
If (Exist(PPEPath()+"NE-ISDN.TMP")) Delete PPEPath()+"NE-ISDN.TMP"
EndIf
Else
FCreate 1,PPEPath()+"NE-ISDN.USR",o_rw,s_dn
EndIf
FPutLn 1,CheckSum(Number)
FPutLn 1,UserName
FClose 1
Else
PrintLn ISDNNoPrompt
EndIf
Cls
EndIf
If (BroadcastMessage) Then
TempStr=ReplaceStr(BroadcastMessageText,"%USER%",UserName)
TempStr=ReplaceStr(TempStr,"%NODE%",String(PCBNode()))
BroadCast 0,MaxNode(),TempStr
EndIf
KbdFlush
KBDStuff UserName+Chr(13)
End
Procedure PrintCenter(String St, Word YPosition)
Begin
AnsiPos 1,YPosition
ClrEol
AnsiPos 40-(Len(StripAtx(St))/2),YPosition
Print St
EndProc
Function NE_Input(String Mask, String St, Int MaxLen, Boolean WordWarp, String HideChar) String
Int Pos
Int Count
Int BreakPos
String Ch
Boolean Ok
Begin
KbdFlush
MdmFlush
St=Buffer+St
For Count=1 To Len(st)
If (HideChar="") Then
Print Mid(St,Count,1)
Else
Print HideChar
EndIf
Next
Pos=Len(st)
Ok=False
BreakPos=0
While (Ok=False) Do
Ch=InKey()
If (Ch=Chr(13)) Then
Ok=True
Buffer=""
ElseIf (Ch=Chr(8)) Then
If (Len(St)>0) Then
Print Chr(8)+Chr(32)+Chr(8)
St=Mid(St,1,Len(St)-1)
Dec Pos
EndIf
ElseIf ((Ch=Chr(9))&(BreakPos>0)) then
BreakPos=0
For Count=1 To Len(St)-1
If (Mid(St,Count,1)=Chr(32)) BreakPos=Count
Next
If (BreakPos<>0) Then
For Count=1 To (Len(St)-BreakPos)+1
Print Chr(8)+Chr(32)+Chr(8)
Next
St=Mid(St,1,BreakPos-1)
EndIf
ElseIf ((InStr(Mask,Ch)<>0)&(Len(St)<MaxLen)) Then
Inc Pos
St=St+Ch
If (HideChar="") Then
Print Ch+Mid(St,Pos+1,Len(st)-Pos-1)
Else
Print HideChar
EndIf
If ((WordWarp=True)&(Len(St)=MaxLen)) Then
BreakPos=0
For Count=1 To Len(St)-1
If (Mid(St,Count,1)=Chr(32)) BreakPos=Count
Next
If (BreakPos<>0) Then
For Count=1 To (Len(st)-BreakPos)+1
Print Chr(8)+Chr(32)+Chr(8)
Next
Buffer=Mid(St,BreakPos+1,Len(St)-BreakPos)
St=Mid(St,1,BreakPos-1)
Ok=True
Else
Ok=True
Buffer=""
EndIf
EndIf
EndIf
EndWhile
NE_Input=St
EndFunc
Procedure GetISDNData()
DWord Record(17)
Word RecordOff
Word RecordSeg
Integer RecordAddr
Integer NumAddr
Word Count
Word Port
String ModemData
Begin
ModemData=Upper(ReadLine("PCBOARD.DAT",52))
ModemOk=False
If (ModemData="NONE") Then
ModemInfo="LOCAL PORT"
Port=0
Goto EndDetect
ElseIf (Mid(ModemData,1,4)="PORT") Then
If (Right(ModemData,1)="F") Then
Port=Mid(ModemData,5,Len(ModemData)-5)-1
ModemInfo="FOSSIL DETECTED"
Else
Port=Mid(ModemData,5,Len(ModemData)-4)-1
ModemInfo="COMM-DRV OR OS/2 DETECTED"
EndIf
ModemOk=True
ElseIf (Mid(ModemData,1,3)="COM") Then
ModemInfo="ASYNC PORT DETECTED"
Port=Mid(ModemData,4,1)-1
Goto EndDetect
Else
ModemInfo="PORT DECTION FAILURE"
Goto EndDetect
EndIf
DoIntr 014h,09000h,0,0,0,0,0,0,0,0
If ((RegAx()<>01969h)|(ModemOk=False)) Then
Number="CFOS NOT DETECTED"
Goto EndDetect
EndIf
VarOff Record(1),RecordOff
VarSeg Record(1),RecordSeg
DoIntr 014h,09002h,RecordOff,17,Port,0,0,0,0,RecordSeg
If (RegAx()<>0) Then
Number="CFOS ERROR/NO CFOS PORT"
Goto EndDetect
EndIf
RecordAddr=MkAddr(RecordSeg,RecordOff)
NumAddr=MkAddr(PeekW(RecordAddr+2),PeekW(RecordAddr+4))
Count=0
Number=""
While (PeekB(NumAddr+Count)<>0) Do
Number=Number+Chr(PeekB(NumAddr+Count))
Inc Count
EndWhile
If (Number="") Number="NOT DETECTED"
:EndDetect
If (!ISDNEnabled) ModemOk=False
EndProc
Procedure UpDateInfo(String Entered)
Begin
OldPos="["+String(GetY())+";"+String(GetX())+"H"
If (ShowPassword=True) Then
SPrint "["+String(3+InfoBoxYCoordinate)+";"+String(12+InfoBoxXCoordinate)+"H[1;36;44m"+Left(U_Pwd,20)
If (U_Pwd=Entered) Then
SPrint "["+String(4+InfoBoxYCoordinate)+";"+String(12+InfoBoxXCoordinate)+"H[1;5;36;44m"+Left(Entered,20)
Else
SPrint "["+String(4+InfoBoxYCoordinate)+";"+String(12+InfoBoxXCoordinate)+"H[1;36;44m"+Left(Entered,20)
EndIf
Else
SPrint "["+String(3+InfoBoxYCoordinate)+";"+String(12+InfoBoxXCoordinate)+"H[0;36;44mDiSABLED "
SPrint "["+String(4+InfoBoxYCoordinate)+";"+String(12+InfoBoxXCoordinate)+"H[0;36;44mDiSABLED "
EndIf
SPrint "[0m"+OldPos
EndProc
Function PW_Input(Int MaxLen, String PWChar) String
Boolean Ok
String St
String ChK
String Ch
Begin
KbdFlush
MdmFlush
St=""
UpDateInfo(st)
Ok=False
While (Ok=False) Do
Ch=Upper(MInkey())
ChK=Upper(KInkey())
If (ChK="ALT W") Then
ShowPassword=!ShowPassword
UpDateInfo(st)
Else
If (Ch="") Ch=ChK
EndIf
If ((Ch=Chr(13))&(Len(St)>0)) Then
Ok=True
ElseIf (Ch=Chr(8)) Then
If (Len(St)>0) Then
St=Mid(St,1,Len(St)-1)
Print Chr(8)+" "+Chr(8)
EndIf
UpDateInfo(st)
ElseIf ((Len(St)<MaxLen)&(InStr(Mask_Ascii(),Ch)<>0)) Then
St=St+Ch
Print DefaultColor+PWChar
UpDateInfo(st)
EndIf
EndWhile
PW_Input=St
EndFunc
Function CheckSum(String Data) String
Begin
CheckSum=CRC32(CRC_Str,Data)
;--------^^^^^^^^^^^^^^^^^^^----------------------------------------------
; YOU MAY CHANGE THiS BY ADDiNG OR SUBSTiNG SOMETHiNG OR DO SOMETHiNG
; CRAZY TO HAVE A DiFFRENT ROUTiNE - DELETE PPS AFTER ALL!
;-------------------------------------------------------------------------
EndFunc
;==============================================================[ THE END? ]===