home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Pier Shareware 6
/
The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso
/
005
/
v_ssc100.zip
/
SSCHAT.PPE
(
.txt
)
< prev
Wrap
PCBoard Programming Language Executable
|
1994-11-09
|
10KB
|
722 lines
;------------------------------------------------------------------------------
; .ss.
; `²²'
; .,sS$Ss,,s$ .,sS$$$Ss. .,sS$Ss,,s$ .ss. .sSs.
; .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
; $$$' .$$$' $$$²Sçsµ²' .$$$' .$$$'.$$$' .$$$' `$$b.
; $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$' ;$$$
; `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
; .sS²°$$$²²°"' d²°'
; .$$² .$$'
; $$$.,d$$'
; `²S$$S²'
;------------------------------------------------------------------------------
; P.P.L.X. 2.OO (C)1996 - Lone Runner / AEGiS CoRP'96
;------------------------------------------------------------------------------
; PPE 3.O1 (Encryption type I) - Analysis ON - Postprocessing ON
;------------------------------------------------------------------------------
Boolean BOOLEAN001
Boolean BOOLEAN002
Boolean BOOLEAN003
Boolean BOOLEAN004
Integer INTEGER001
Integer INTEGER002
Integer INTEGER003
Integer TINTEGER004(1)
Integer TINTEGER005(1)
Integer TINTEGER006(1)
Integer TINTEGER007(1)
Integer TINTEGER008(1)
Integer TINTEGER009(1)
Integer TINTEGER010(1)
Integer TINTEGER011(1)
Integer TINTEGER012(1)
Integer INTEGER013
Integer INTEGER014
Integer INTEGER015
Integer INTEGER016
Integer INTEGER017
Integer INTEGER018
Integer INTEGER019
String STRING001
String STRING002
String TSTRING003(1)
String TSTRING004(1)
String TSTRING005(25)
String TSTRING006(25)
String STRING007
String TSTRING008(25)
String STRING009
String STRING010
String STRING012
String STRING014
Declare Function FUNCTION001(String STRING013) Boolean
Declare Function FUNCTION002(String STRING011) String
Declare Function FUNCTION003() String
Declare Function FUNCTION004() Integer
Declare Procedure PROC001()
Declare Procedure PROC002()
Declare Procedure PROC003()
Declare Procedure PROC004()
Declare Procedure PROC005()
Declare Procedure PROC006()
Declare Procedure PROC007()
Declare Procedure PROC008()
Declare Procedure PROC009()
Declare Procedure PROC010()
Declare Procedure PROC011()
Declare Procedure PROC012()
Declare Procedure PROC013()
Declare Procedure PROC014()
;------------------------------------------------------------------------------
GetUser
RdUNet PcbNode()
PageOff
INTEGER013 = 1
INTEGER014 = 1
STRING010 = PPEPath() + PPEName() + ".$$$"
Goto LABEL002
End
;------------------------------------------------------------------------------
Procedure PROC013()
Integer INTEGER018
DoIntr 16, B2W(1, 1), 0, B2W(32, 64), 0, 0, 0, 0, 0, 0
Color 7
For INTEGER018 = 1 To 11
AnsiPos 1, INTEGER018
ClrEol
PROC014()
AnsiPos 1, 24 - INTEGER018
ClrEol
PROC014()
Next
Cls
AnsiPos 1, 12
Color 15
Print "──────────────────────────────────────────────────────────────────────────────"
For INTEGER018 = 1 To 40
AnsiPos INTEGER018, 12
Print Chr(32)
AnsiPos 80 - INTEGER018, 12
Print Chr(32)
PROC014()
Next
Print Chr(8) + "∙"
PROC014()
Delay 8
Print Chr(8) + Chr(32)
EndProc
;------------------------------------------------------------------------------
Procedure PROC014()
:LABEL001
If (!(OutBytes() == 0)) Goto LABEL001
EndProc
:LABEL002
If ((GrafMode() == "N") || (GrafMode() == "A")) Then
Print "Hello, this is @OPTEXT@. "
End
Endif
FOpen 1, PPEPath() + PPEName() + ".INI", 0, 0
:LABEL003
If (Ferr(1)) Goto LABEL005
FGet 1, STRING002
If (InStr(STRING002, "=") == 0) Goto LABEL004
PROC010()
Select Case (Upper(STRING002))
Case "CHATLOG"
If (FUNCTION001(FUNCTION003())) BOOLEAN001 = 1
Case "REFUNDTIME"
If (FUNCTION001(FUNCTION003())) INTEGER015 = MinLeft()
Case "EXITANIMATION"
If (FUNCTION001(FUNCTION003())) BOOLEAN003 = 1
Case "KEYBOARDSTUFF"
TSTRING003(0) = FUNCTION003()
Case "CHATLAYOUT" + String(INTEGER014)
TSTRING006(INTEGER014) = PPEPath() + FUNCTION003()
Inc INTEGER014
End Select
:LABEL004
Goto LABEL003
:LABEL005
FClose 1
If (UN_Stat() == "C") Goto LABEL006
BOOLEAN002 = 1
WrUNet PcbNode(), "C", UN_Name(), UN_City(), "Chatting with Sysop", ""
Log "Sysop CHAT active at " + Left(Time(), 5), 0
SaveScrn
:LABEL006
If (BOOLEAN001) Then
STRING001 = PPEPath() + "CHATLOG." + Replace(Right(PcbNode(), 3), " ", "0")
If (Exist(STRING001)) Then
FAppend 1, STRING001, 1, 0
Goto LABEL007
Endif
FCreate 1, STRING001, 1, 0
:LABEL007
FPutLn 1, "═══════════════════════════════════════════════════════════════════════════════"
FPutLn 1, "User: " + Mixed(U_Name()) + " (" + Mixed(U_City) + ")" + Space(47 - Len(U_Name()) + Len(U_City)) + "Date: " + String(Date()) + " (" + Replace(Left(TimeAp(Time()), 5), " ", "0") + Lower(Mid(TimeAp(Time()), 10, 1)) + ")"
FPutLn 1, "───────────────────────────────────────────────────────────────────────────────"
Endif
PROC011()
PROC002()
While (!(TSTRING003(0) == Chr(27)) && !(TSTRING003(1) == Chr(27))) Do
TSTRING003(0) = KInkey()
TSTRING003(1) = MInkey()
If (TSTRING003(0) == "") Goto LABEL008
INTEGER003 = 0
If ((Asc(TSTRING003(INTEGER003)) < 32) || (Len(TSTRING003(INTEGER003)) > 1)) Then
PROC007()
Else
PROC002()
Endif
:LABEL008
If (TSTRING003(1) == "") Goto LABEL009
INTEGER003 = 1
If ((Asc(TSTRING003(INTEGER003)) < 32) || (Len(TSTRING003(INTEGER003)) > 1)) Then
PROC007()
Else
PROC002()
Endif
:LABEL009
If (Abort()) PROC001()
EndWhile
If (BOOLEAN003) PROC013()
Color 7
If (BOOLEAN002) Then
RestScrn
Log "Sysop CHAT ended at " + Left(Time(), 5), 0
Else
Cls
Endif
PROC014()
DoIntr 16, B2W(1, 1), 0, B2W(17, 18), 0, 0, 0, 0, 0, 0
If (INTEGER015 == 0) Goto LABEL010
AdjTime INTEGER015 - MinLeft()
PutUser
:LABEL010
Delete STRING010
FClose 1
If (BOOLEAN001) FClose 2
StartDisp 2
Color 15
KbdStuff Chr(27)
End
;------------------------------------------------------------------------------
Procedure PROC001()
ResetDisp
StartDisp 1
Color 7
Cls
For INTEGER001 = 1 To 22
PrintLn TSTRING008(INTEGER001)
Next
Print TSTRING008(23)
For INTEGER001 = 0 To 1
TINTEGER004(INTEGER001) = TINTEGER006(INTEGER001)
TINTEGER005(INTEGER001) = TINTEGER007(INTEGER001)
TINTEGER011(INTEGER001) = TINTEGER007(INTEGER001)
Next
PROC014()
PROC003()
EndProc
;------------------------------------------------------------------------------
Procedure PROC002()
If (BOOLEAN001) Then
TSTRING004(INTEGER003) = TSTRING004(INTEGER003) + TSTRING003(INTEGER003)
If ((Len(TSTRING004(0)) >= 79) || (Len(TSTRING004(1)) >= 78)) PROC005()
Endif
If (TINTEGER004(INTEGER003) == TINTEGER008(INTEGER003)) Then
STRING007 = FUNCTION002(ScrText(TINTEGER006(INTEGER003), TINTEGER005(INTEGER003), TINTEGER010(INTEGER003) - 1, 0) + TSTRING003(INTEGER003))
If (Len(STRING007) == 0) Goto LABEL011
TINTEGER004(INTEGER003) = TINTEGER004(INTEGER003) + 1 - Len(STRING007)
PROC003()
Print Space(Len(STRING007) - 1)
PROC004()
TSTRING003(INTEGER003) = STRING007
:LABEL011
Else
PROC003()
Endif
Print TSTRING003(INTEGER003)
If (TINTEGER004(INTEGER003) == TINTEGER008(INTEGER003)) Then
PROC004()
Else
TINTEGER004(INTEGER003) = TINTEGER004(INTEGER003) + Len(TSTRING003(INTEGER003))
Endif
EndProc
;------------------------------------------------------------------------------
Procedure PROC007()
If (TSTRING003(INTEGER003) == Chr(8)) Then
If (TINTEGER004(INTEGER003) > TINTEGER006(INTEGER003)) Then
PROC003()
Print Chr(8) + Chr(32) + Chr(8)
Dec TINTEGER004(INTEGER003)
TSTRING004(INTEGER003) = Left(TSTRING004(INTEGER003), Len(TSTRING004(INTEGER003)) - 1)
Endif
ElseIf ((TSTRING003(INTEGER003) == "PGDN") && (INTEGER003 == 0)) Then
Inc INTEGER013
If (INTEGER013 == INTEGER014) INTEGER013 = 1
PROC011()
ElseIf ((TSTRING003(INTEGER003) == "PGUP") && (INTEGER003 == 0)) Then
Dec INTEGER013
If (INTEGER013 == 0) INTEGER013 = INTEGER014 - 1
PROC011()
Else
Select Case (TSTRING003(INTEGER003))
Case Chr(13)
If (!(TSTRING004(INTEGER003) == "")) PROC006()
PROC004()
Case Chr(3)
Inc TINTEGER012(INTEGER003)
For INTEGER001 = 1 To 8
If (TINTEGER012(INTEGER003) == INTEGER001 * 16) Then
TINTEGER012(INTEGER003) = INTEGER001 * 16 - 16
Continue
Endif
If (TINTEGER012(INTEGER003) == INTEGER001 * 16 + INTEGER001) Then
Inc TINTEGER012(INTEGER003)
Endif
Next
If ((TINTEGER012(0) == TINTEGER012(1)) || (TINTEGER012(INTEGER003) == 0)) Inc TINTEGER012(INTEGER003)
PROC003()
Print Chr(32) + Chr(8)
Case Chr(23)
PROC008()
Case Chr(7)
MPrint Chr(7)
For INTEGER001 = 1 To 1760 Step 10
Sound INTEGER001
Next
Sound 0
Case Chr(20), 0
PROC009()
Case Chr(18)
PROC001()
Endif
End Select
EndProc
;------------------------------------------------------------------------------
Procedure PROC003()
If (!(GetX() == TINTEGER004(INTEGER003)) || !(GetY() == TINTEGER005(INTEGER003))) AnsiPos TINTEGER004(INTEGER003) , TINTEGER005(INTEGER003)
If (!(CurColor() == TINTEGER012(INTEGER003))) Color TINTEGER012(INTEGER003)
EndProc
;------------------------------------------------------------------------------
Procedure PROC004()
If (TINTEGER005(INTEGER003) == TINTEGER009(INTEGER003)) Then
INTEGER017 = 0
For INTEGER001 = TINTEGER009(INTEGER003) To TINTEGER011(INTEGER003) Step -1
STRING001 = ScrText(TINTEGER006(INTEGER003), INTEGER001, TINTEGER010(INTEGER003), 0)
If (STRING001 == Space(TINTEGER010(INTEGER003))) Goto LABEL012
Inc INTEGER017
TSTRING005(INTEGER017) = STRING001
:LABEL012
If (INTEGER017 == INTEGER016) Break
Next
PROC008()
For INTEGER001 = INTEGER017 To 1 Step -1
Print TSTRING005(INTEGER001)
Inc TINTEGER005(INTEGER003)
PROC003()
Next
TINTEGER011(INTEGER003) = TINTEGER005(INTEGER003)
Else
TINTEGER004(INTEGER003) = TINTEGER006(INTEGER003)
Inc TINTEGER005(INTEGER003)
PROC003()
Endif
EndProc
;------------------------------------------------------------------------------
Function FUNCTION002(String STRING011) String
:LABEL013
If (InStr(STRING011, " ") == 0) Goto LABEL014
STRING011 = Right(STRING011, Len(STRING011) - InStr(STRING011, " "))
FUNCTION002 = STRING011
Goto LABEL013
:LABEL014
EndFunc
;------------------------------------------------------------------------------
Procedure PROC005()
STRING001 = FUNCTION002(TSTRING004(INTEGER003))
If (Len(STRING001) == 0) Goto LABEL015
TSTRING004(INTEGER003) = Left(TSTRING004(INTEGER003), Len(TSTRING004(INTEGER003)) - Len(STRING001))
PROC006()
TSTRING004(INTEGER003) = STRING001
Goto LABEL016
:LABEL015
PROC006()
:LABEL016
EndProc
;------------------------------------------------------------------------------
Procedure PROC006()
If (INTEGER003 == 1) FPut 1, "-"
FPutLn 1, TSTRING004(INTEGER003)
TSTRING004(INTEGER003) = ""
EndProc
;------------------------------------------------------------------------------
Procedure PROC008()
PROC003()
TINTEGER004(INTEGER003) = TINTEGER006(INTEGER003)
STRING001 = Space(TINTEGER010(INTEGER003))
INTEGER001 = TINTEGER007(INTEGER003) - 1
INTEGER002 = TINTEGER009(INTEGER003)
:LABEL017
If (INTEGER002 == INTEGER001) Goto LABEL018
AnsiPos TINTEGER004(INTEGER003), INTEGER002
If (ScrText(1, INTEGER002, 79, 0) == Space(79)) Then
Print Chr(27) + "[K"
Else
Print STRING001
Endif
Dec INTEGER002
Goto LABEL017
:LABEL018
TINTEGER005(INTEGER003) = TINTEGER007(INTEGER003)
PROC003()
EndProc
;------------------------------------------------------------------------------
Procedure PROC011()
FOpen 2, TSTRING006(INTEGER013), 0, 0
FRead 2, STRING001, 4
FRead 2, STRING001, 10
For INTEGER001 = 0 To 1
TINTEGER006(INTEGER001) = FUNCTION004()
TINTEGER007(INTEGER001) = FUNCTION004()
TINTEGER008(INTEGER001) = FUNCTION004()
TINTEGER009(INTEGER001) = FUNCTION004()
Next
INTEGER016 = FUNCTION004()
STRING009 = Chr(FUNCTION004())
FGet 2, STRING001
For INTEGER001 = 1 To 23
FGet 2, TSTRING008(INTEGER001)
If (!(InStr(TSTRING008(INTEGER001), "@VINYL@") == 0)) PROC012()
Next
FClose 2
PROC001()
For INTEGER001 = 0 To 1
STRING001 = ScrText(TINTEGER006(INTEGER001), TINTEGER007(INTEGER001), 1, 1)
INTEGER002 = ToInt(Mid(STRING001, 3, 1))
STRING002 = Mid(STRING001, 4, 1)
If ((Asc(STRING002) > 64) && (Asc(STRING002) < 71)) STRING002 = Asc(STRING002) - 65 + 10
TINTEGER012(INTEGER001) = 16 * INTEGER002 + ToInt(STRING002)
TINTEGER010(INTEGER001) = TINTEGER008(INTEGER001) - TINTEGER006(INTEGER001) + 1
Next
EndProc
;------------------------------------------------------------------------------
Procedure PROC009()
SPrint Chr(27) + "[23;1H"
SaveScrn
Color 7
Cls
Newline
PrintLn "Microsoft(R) MS-DOS(R) Version 6.22"
PrintLn " (C)Copyright Microsoft Corp 1981-1994."
Newline
Print Left(PPEPath(), 3), ">TYPE "
STRING001 = ""
InputText "_", STRING001, 7, 70
Newline
StartDisp 2
If (Exist(STRING001)) Then
DispFile STRING001, 1
Else
PrintLn "File not found - " + Upper(STRING001)
Endif
Newline
Wait
StartDisp 1
Color 7
RestScrn
PROC003()
EndProc
;------------------------------------------------------------------------------
Function FUNCTION004() Integer
String STRING013
FUNCTION004 = ToInt(Asc(Left(STRING001, 1)))
STRING001 = Right(STRING001, Len(STRING001) - 1)
EndFunc
;------------------------------------------------------------------------------
Procedure PROC010()
INTEGER001 = InStr(STRING002, "=")
STRING001 = Mid(STRING002, INTEGER001 + 1, Len(STRING002) - INTEGER001)
STRING002 = Upper(Left(STRING002, INTEGER001 - 1))
EndProc
;------------------------------------------------------------------------------
Function FUNCTION001(String STRING013) Boolean
String STRING014
If ((((Upper(STRING013) == "YES") || (Upper(STRING013) == "ON")) || (Upper(STRING013) == "TRUE")) || (Upper(STRING013) == "1")) Then
FUNCTION001 = 1
Else
FUNCTION001 = 0
Endif
EndFunc
;------------------------------------------------------------------------------
Function FUNCTION003() String
If (InStr(STRING001, ",") == 0) Then
FUNCTION003 = STRING001
Else
FUNCTION003 = Left(STRING001, InStr(STRING001, ",") - 1)
Endif
If (InStr(FUNCTION003, Chr(34)) == 0) Goto LABEL019
FUNCTION003 = Right(STRING001, Len(STRING001) - InStr(STRING001, Chr(34)))
FUNCTION003 = Left(FUNCTION003, InStr(FUNCTION003, Chr(34)) - 1)
:LABEL019
STRING001 = Right(STRING001, Len(STRING001) - InStr(STRING001, ","))
EndFunc
;------------------------------------------------------------------------------
Procedure PROC012()
TSTRING008(INTEGER001) = ReplaceStr(TSTRING008(INTEGER001), "@USER@", Mixed(U_Name()))
INTEGER002 = InStr(TSTRING008(INTEGER001), "@VINYL@") - 1
TSTRING008(INTEGER001) = StripStr(TSTRING008(INTEGER001), "@VINYL@")
STRING001 = Right(TSTRING008(INTEGER001), Len(TSTRING008(INTEGER001)) - INTEGER002)
TSTRING008(INTEGER001) = Left(TSTRING008(INTEGER001), INTEGER002)
INTEGER002 = 80 - Len(StripAtx(TSTRING008(INTEGER001))) + Len(StripAtx(STRING001))
For STRING002 = 1 To INTEGER002
TSTRING008(INTEGER001) = TSTRING008(INTEGER001) + STRING009
Next
TSTRING008(INTEGER001) = TSTRING008(INTEGER001) + STRING001
If (Len(StripAtx(TSTRING008(INTEGER001))) > 79) TSTRING008(INTEGER001) = Left(TSTRING008(INTEGER001), Len(TSTRING008(INTEGER001)) - 1)
EndProc
;------------------------------------------------------------------------------
;
; Usage report (before postprocessing)
;
; ■ Statements used :
;
; 3 End
; 4 Cls
; 2 ClrEol
; 1 Wait
; 8 Color
; 100 Goto
; 100 Let
; 15 Print
; 4 PrintLn
; 75 If
; 1 DispFile
; 1 FCreate
; 2 FOpen
; 1 FAppend
; 4 FClose
; 3 FGet
; 1 FPut
; 4 FPutLn
; 1 ResetDisp
; 4 StartDisp
; 1 GetUser
; 1 PutUser
; 1 Delete
; 1 AdjTime
; 2 Log
; 1 Delay
; 8 Inc
; 3 Dec
; 4 Newline
; 1 InputText
; 1 KbdStuff
; 1 RdUNet
; 1 WrUNet
; 2 DoIntr
; 7 AnsiPos
; 2 SaveScrn
; 2 RestScrn
; 2 Sound
; 1 SPrint
; 1 MPrint
; 1 PageOff
; 2 FRead
; 14 EndProc
; 4 EndFunc
;
;
; ■ Functions used :
;
; 6 -
; 4 *
; 54 +
; 26 -
; 55 ==
; 15 <
; 12 <=
; 5 >
; 26 >=
; 64 !
; 29 &&
; 21 ||
; 24 Len(
; 1 Lower()
; 11 Upper()
; 4 Mid()
; 12 Left()
; 6 Right()
; 5 Space()
; 1 Ferr()
; 27 Chr()
; 6 Asc()
; 12 InStr()
; 1 Abort()
; 1 Date()
; 4 Time()
; 3 U_Name()
; 2 TimeAp()
; 3 StripAtx()
; 2 Replace()
; 2 String()
; 5 PPEPath()
; 3 PcbNode()
; 1 UN_Stat()
; 1 UN_Name()
; 1 UN_City()
; 2 MinLeft()
; 4 B2W()
; 2 Exist()
; 1 GetX()
; 1 GetY()
; 2 GrafMode()
; 2 PPEName()
; 1 CurColor()
; 1 KInkey()
; 1 MInkey()
; 4 ScrText()
; 1 ReplaceStr()
; 1 StripStr()
; 3 ToInt()
; 3 Mixed()
; 1 OutBytes()
;
;------------------------------------------------------------------------------
;
; Analysis flags : WAMI
;
; W - Write user ■ 5
; Program writes a user record. Although this may be normal for a
; User Editor, it may also be a way to modify an account level.
; ■ Search for : PUTUSER
;
; A - Adjust online time remaining ■ 5
; Program modify the amount of online time remaining, this may
; be a way to bypass time limits
; ■ Search for : ADJTIME
;
; M - Send text to modem only ■ 4
; Some informations are sent only to the modem, not to the local
; screen, this is a well known way to make stealth backdoors, Check!
; ■ Search for : SENDMODEM, MPRINT, MPRINTLN
;
; I - Interrupt call ■ 5
; This is rare in PPE... Although it may be a way to replace a PPE
; command by its fast interrupt equivalent. Be aware that an
; interrupt call may do anything... nasty (formating HD, rebooting,...)
; or usefull (fast screen i/o, hardware ressource access,...). Check!
; ■ Search for : DOINTR
;
;------------------------------------------------------------------------------
;
; Postprocessing report
;
; 12 For/Next
; 1 While/EndWhile
; 20 If/Then or If/Then/Else
; 2 Select Case
;
;------------------------------------------------------------------------------
; AEGiS Corp - Break the routines, code against the machines!
;------------------------------------------------------------------------------