home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1994 - The BEST of 1994
/
monster1.zip
/
monster1
/
BBS_GAM2
/
PMTT110B.ZIP
/
PMTT.PPE
(
.txt
)
< prev
next >
Wrap
PCBoard Programming Language Executable
|
1994-11-25
|
13KB
|
760 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
Boolean BOOLEAN005
Boolean BOOLEAN006
Boolean BOOLEAN007
Integer INTEGER001
Integer INTEGER002
Integer INTEGER003
Integer INTEGER004
Integer INTEGER005
Integer INTEGER006
Integer INTEGER007
Integer INTEGER008
Integer INTEGER009
Integer TINTEGER010(10)
Integer INTEGER011
Integer INTEGER012
Integer TINTEGER013(10)
Integer TINTEGER014(10)
Integer INTEGER015
Integer INTEGER016
Integer INTEGER017
Integer INTEGER018
Integer TINTEGER019(10)
Integer INTEGER020
Integer INTEGER021
Integer INTEGER022
Integer INTEGER023
Integer INTEGER024
Integer INTEGER025
String STRING001
String STRING002
String STRING003
String STRING004
String TSTRING005(4)
String STRING006
String STRING007
String STRING008
String STRING009
String STRING010
String STRING011
String STRING012
String STRING013
String STRING014
String STRING015
String STRING016
String STRING017
String STRING018
String STRING019
String TSTRING020(4)
String STRING021
String STRING022
String TSTRING023(10)
String TSTRING024(10)
String STRING025
String STRING026
String STRING027
String STRING028
Double DOUBLE001
Double DOUBLE002
Double DOUBLE003
Double DOUBLE004
Declare Procedure PROC001()
;------------------------------------------------------------------------------
BOOLEAN002 = 0
BOOLEAN001 = 0
STRING002 = "N"
DOUBLE001 = 1
DOUBLE002 = 1
DOUBLE003 = 0
DOUBLE004 = 0
INTEGER005 = 0
INTEGER006 = 0
INTEGER001 = 6
BOOLEAN004 = 0
STRING003 = ""
Gosub LABEL013
STRING003 = "."
Cls
DispFile PPEPath() + "PMTTG", 2 + 1 + 4
While (STRING003 <> "Q") Do
STRING003 = Inkey()
STRING003 = Upper(STRING003)
If (STRING003 == "P") Then
BOOLEAN003 = 0
Gosub LABEL002
If (BOOLEAN003) Goto LABEL001
Gosub LABEL022
:LABEL001
Gosub LABEL007
Cls
DispFile PPEPath() + "PMTTG", 2 + 1 + 4
Continue
Endif
If (STRING003 == "!") Then
If (CurSec() >= 100) Then
Gosub LABEL014
Endif
Cls
DispFile PPEPath() + "PMTTG", 2 + 1 + 4
Continue
Endif
If (STRING003 == "I") Then
Cls
DispFile PPEPath() + "HELPG", 2 + 1 + 4
Wait
Cls
DispFile PPEPath() + "PMTTG", 2 + 1 + 4
Continue
Endif
If (STRING003 == "S") Then
Cls
DispFile PPEPath() + "MOVIEG", 2 + 1 + 4
Wait
Cls
DispFile PPEPath() + "PMTTG", 2 + 1 + 4
Continue
Endif
If (STRING003 == "L") Then
DispFile PPEPath() + "MOVIEG", 2 + 1 + 4
Goodbye
Endif
EndWhile
DispFile PPEPath() + "MOVIEG", 2 + 1 + 4
End
:LABEL002
Cls
STRING006 = ""
Gosub LABEL010
FOpen 1, PPEPath() + "QDATA", 0, 2
Frewind 1
For INTEGER003 = 1 To INTEGER006
FGet 1, STRING004
For INTEGER004 = 1 To 4
FGet 1, TSTRING005(INTEGER004)
Next
FGet 1, INTEGER002
Next
FGet 1, STRING004
For INTEGER004 = 1 To 4
FGet 1, TSTRING005(INTEGER004)
Next
If (Ferr(1)) Then
Cls
PrintLn "You've answer the current question set."
BOOLEAN003 = 1
Wait
Return
Endif
Cls
PrintLn STRING004
Newline
For INTEGER004 = 1 To 4
STRING001 = "@X0D" + String(INTEGER004)
PrintLn STRING001, "@X0B ", TSTRING005(INTEGER004)
Next
INTEGER006 = INTEGER003
:LABEL003
If (Ferr(1)) Goto LABEL006
Newline
Newline
AnsiPos 1, 11
PrintLn "@X0AMinutes Online : @X0B@TIMEUSED@"
AnsiPos 1, 12
PrintLn "@X0CTotal Time Left : @X0F@TIMELEFT@"
AnsiPos 1, 13
PrintLn "Playing Points ", DOUBLE004 * 50
AnsiPos 1, 14
PrintLn "You have answered ", DOUBLE004, " correctly"
AnsiPos 1, 15
PrintLn "out of a total of ", INTEGER003 - 1, " questions."
AnsiPos 1, 16
INTEGER008 = DOUBLE002 * 100
PrintLn "Your current percentage is ", INTEGER008, "%"
AnsiPos 1, 9
Print "@X0DEnter 1,2,3,4 or (Q)uit"
:LABEL004
If (BOOLEAN002) Goto LABEL005
STRING006 = Inkey()
STRING006 = Upper(STRING006)
Select Case (STRING006)
Case "1"
INTEGER007 = 1
BOOLEAN002 = 1
Case "2"
INTEGER007 = 2
BOOLEAN002 = 1
Case "3"
INTEGER007 = 3
BOOLEAN002 = 1
Case "4"
INTEGER007 = 4
BOOLEAN002 = 1
Case "Q"
Goto LABEL006
End Select
Goto LABEL004
:LABEL005
BOOLEAN002 = 0
FGet 1, INTEGER002
If (INTEGER007 == INTEGER002) Then
DOUBLE004 = DOUBLE004 + 1
Cls
AnsiPos 1, 4
Print "@X0B100% percent Correct!"
AnsiPos 1, 5
PrintLn "An additional 10 minutes added to your time"
AdjTime 10
Wait
Else
Cls
AnsiPos 1, 4
PrintLn "@X0CSorry, but that is incorrect!"
AnsiPos 1, 5
PrintLn "@X0FPlus 15 minutes is taken away from you time@BEEP@"
AdjTime -15
Wait
Endif
DOUBLE002 = DOUBLE004 / INTEGER003
INTEGER003 = INTEGER003 + 1
STRING006 = ""
FGet 1, STRING004
For INTEGER004 = 1 To 4
FGet 1, TSTRING005(INTEGER004)
Next
If (Ferr(1)) Then
Cls
AnsiPos 1, 11
PrintLn "@X0AMinutes Online : @X0B@TIMEUSED@"
AnsiPos 1, 12
PrintLn "@X0CTotal Time Left : @X0F@TIMELEFT@"
AnsiPos 1, 13
PrintLn "Final Total Points : ", DOUBLE004 * 50
AnsiPos 1, 14
PrintLn "You have answered ", DOUBLE004, " correctly"
AnsiPos 1, 15
PrintLn "out of a total of ", INTEGER003 - 1, " questions."
AnsiPos 1, 16
INTEGER008 = DOUBLE002 * 100
PrintLn "Your current percentage is ", INTEGER008, "%"
AnsiPos 1, 17
PrintLn "@X0CThank You For Playing!"
Wait
Else
Cls
PrintLn STRING004
Newline
For INTEGER004 = 1 To 4
STRING001 = "@X0D" + String(INTEGER004)
PrintLn STRING001, "@X0B ", TSTRING005(INTEGER004)
Next
Goto LABEL003
Endif
:LABEL006
INTEGER006 = INTEGER003 - 1
BOOLEAN002 = 0
FClose 1
Return
:LABEL007
FOpen 2, PPEPath() + "PLAYERS", 0, 2
FCreate 3, PPEPath() + "TEMP", 1, 0
If (Ferr(2)) Then
Goto LABEL009
Endif
FGet 2, STRING011
FGet 2, DOUBLE003
FGet 2, DOUBLE001
FGet 2, INTEGER005
FGet 2, STRING010
:LABEL008
If (Ferr(2)) Goto LABEL009
If (STRING008 == STRING011) Then
FPutLn 3, STRING008
FPutLn 3, DOUBLE004
FPutLn 3, DOUBLE002
FPutLn 3, INTEGER006
FPutLn 3, STRING009
STRING002 = "Y"
Else
FPutLn 3, STRING011
FPutLn 3, DOUBLE003
FPutLn 3, DOUBLE001
FPutLn 3, INTEGER005
FPutLn 3, STRING010
Endif
FGet 2, STRING011
FGet 2, DOUBLE003
FGet 2, DOUBLE001
FGet 2, INTEGER005
FGet 2, STRING010
Goto LABEL008
:LABEL009
FClose 3
FClose 2
If (STRING002 == "N") Then
FAppend 4, PPEPath() + "TEMP", 2, 3
FPutLn 4, STRING008
FPutLn 4, DOUBLE004
FPutLn 4, DOUBLE002
FPutLn 4, INTEGER006
FPutLn 4, STRING009
FClose 4
Endif
Copy PPEPath() + "TEMP", PPEPath() + "PLAYERS"
Delete PPEPath() + "TEMP"
STRING002 = "N"
Return
:LABEL010
STRING008 = U_Name()
STRING009 = Date()
GetUser
FOpen 2, PPEPath() + "PLAYERS", 0, 2
Frewind 2
If (Ferr(2)) Then
FClose 2
Return
Endif
:LABEL011
If (Ferr(2)) Goto LABEL012
FGet 2, STRING011
FGet 2, DOUBLE003
FGet 2, DOUBLE001
FGet 2, INTEGER005
FGet 2, STRING010
If (STRING008 == STRING011) Then
STRING008 = STRING011
DOUBLE004 = DOUBLE003
DOUBLE002 = DOUBLE001
INTEGER006 = INTEGER005
Endif
Goto LABEL011
:LABEL012
FClose 2
STRING010 = STRING009
Return
End
:LABEL013
Tokenize U_Name()
STRING007 = GetToken()
STRING007 = Left(STRING007, 1) + Lower(Right(STRING007, Len(STRING007) - 1))
Return
End
:LABEL014
STRING012 = "@X09"
STRING013 = "@X0A"
STRING014 = "@X0B"
STRING015 = "@X0C"
STRING016 = "@X0D"
STRING017 = "@X0E"
STRING018 = "@X0F"
STRING022 = ""
BOOLEAN005 = 0
BOOLEAN006 = 0
Cls
DispFile PPEPath() + "SYSOPG", 2 + 1 + 4
Print "@X0B@X0DEnter @X0AA@X0D, @X0AE@X0D, or @X0AQ@X07"
:LABEL015
If (BOOLEAN005) Goto LABEL016
STRING022 = ""
STRING022 = Inkey()
STRING022 = Upper(STRING022)
Select Case (STRING022)
Case "A"
Gosub LABEL017
BOOLEAN005 = 1
Case "E"
Gosub LABEL021
BOOLEAN005 = 1
Case "R"
Delete PPEPath() + "MOVIEG"
Delete PPEPath() + "players."
Delete PPEPath() + "SCORES"
INTEGER006 = 0
INTEGER003 = 0
DOUBLE004 = 0
INTEGER008 = 1
DOUBLE001 = 1
DOUBLE002 = 1
Case "Q"
BOOLEAN005 = 1
End Select
STRING022 = ""
Goto LABEL015
:LABEL016
Return
BOOLEAN005 = 0
End
:LABEL017
Cls
STRING022 = ""
AnsiPos 1, 5
PrintLn "@X0BEnter Question to Be Asked Below@X07"
AnsiPos 1, 6
Input "", STRING019
STRING019 = STRING013 + STRING019
For INTEGER009 = 1 To 4
AnsiPos 1, 6 + INTEGER009
InputStr "Enter Choice No. : " + String(INTEGER009), TSTRING020(INTEGER009), 11, 30, Mask_Ascii(), 2 + 4 + 64
TSTRING020(INTEGER009) = STRING014 + TSTRING020(INTEGER009)
Next
AnsiPos 1, 13
InputStr "Enter Correct Answer # for Multiple Choice ", STRING021, 11, 1, Mask_Ascii(), 2 + 4 + 64
Gosub LABEL018
STRING022 = ""
Return
:LABEL018
STRING022 = ""
BOOLEAN006 = 0
PROC001()
:LABEL019
If (BOOLEAN006) Goto LABEL020
STRING022 = Inkey()
STRING022 = Upper(STRING022)
Select Case (STRING022)
Case "M"
Cls
AnsiPos 1, 5
STRING019 = ""
PrintLn "@X0BEnter Question to Be Asked Below@X07"
Input "", STRING019
STRING019 = STRING013 + STRING019
PROC001()
Case "1"
Cls
AnsiPos 1, 5
TSTRING020(1) = ""
InputStr "Enter Choice No. 1 ", TSTRING020(1), 11, 30, Mask_Ascii(), 2 + 4 + 64
TSTRING020(1) = STRING014 + TSTRING020(1)
PROC001()
Case "2"
Cls
AnsiPos 1, 5
TSTRING020(2) = ""
InputStr "Enter Choice No. 2 ", TSTRING020(2), 11, 30, Mask_Ascii(), 2 + 4 + 64
TSTRING020(2) = STRING014 + TSTRING020(2)
PROC001()
Case "3"
Cls
AnsiPos 1, 5
TSTRING020(3) = ""
InputStr "Enter Choice No. 3 ", TSTRING020(3), 11, 30, Mask_Ascii(), 2 + 4 + 64
TSTRING020(3) = STRING014 + TSTRING020(3)
PROC001()
Case "4"
Cls
AnsiPos 1, 5
TSTRING020(4) = ""
InputStr "Enter Choice No. 4 ", TSTRING020(4), 11, 30, Mask_Ascii(), 2 + 4 + 64
TSTRING020(4) = STRING014 + TSTRING020(4)
PROC001()
Case "#"
Cls
AnsiPos 1, 5
STRING021 = ""
InputStr "Enter Correct Answer # for Multiple Choice ", STRING021, 11, 1, Mask_Ascii(), 2 + 4 + 64
PROC001()
Case "S"
FAppend 1, PPEPath() + "QDATA", 2, 3
FPutLn 1, STRING019
For INTEGER009 = 1 To 4
FPutLn 1, TSTRING020(INTEGER009)
Next
FPutLn 1, STRING021
FClose 1
BOOLEAN006 = 1
Case "A"
BOOLEAN006 = 1
End Select
Goto LABEL019
:LABEL020
BOOLEAN006 = 0
STRING022 = ""
Return
:LABEL021
FOpen 1, PPEPath() + "QDATA", 0, 2
Frewind 1
FClose 1
Return
End
;------------------------------------------------------------------------------
Procedure PROC001()
Cls
AnsiPos 5, 1
PrintLn STRING014 + STRING019
For INTEGER009 = 1 To 4
AnsiPos 5, 2 + INTEGER009
PrintLn STRING014 + String(INTEGER009) + " " + TSTRING020(INTEGER009)
Next
AnsiPos 5, 8
Print STRING014 + STRING021
AnsiPos 5, 10
PrintLn "@X0DEnter @X0AM @X0Dto change question @X07"
AnsiPos 5, 11
PrintLn "@X0DEnter @X0A1 @X0Dto change choice No. 1@X07"
AnsiPos 5, 12
PrintLn "@X0DEnter @X0A2 @X0Dto change choice No. 2@X07"
AnsiPos 5, 13
PrintLn "@X0DEnter @X0A3 @X0Dto change choice No. 3@X07"
AnsiPos 5, 14
PrintLn "@X0DEnter @X0A4 @X0Dto change choice No. 4@X07"
AnsiPos 5, 15
PrintLn "@X0DEnter @X0A# @X0Dto change correct answer choice @X07"
AnsiPos 5, 16
PrintLn "@X0CEnter @X0FS @X0Cto Save @X0A-or- @X0CEnter @X0FA @X0Cto Abort @X07"
AnsiPos 5, 17
Print "@X0EEnter Command@X0F"
EndProc
:LABEL022
STRING027 = STRING008
INTEGER017 = DOUBLE004
INTEGER018 = DOUBLE002 * 100
INTEGER011 = INTEGER006
STRING028 = STRING009
BOOLEAN007 = 0
INTEGER021 = DOUBLE004 * 50
INTEGER020 = 0
For INTEGER025 = 1 To 10
TSTRING023(INTEGER025) = ""
TINTEGER013(INTEGER025) = 0
TINTEGER014(INTEGER025) = 0
TINTEGER010(INTEGER025) = -99
TSTRING024(INTEGER025) = "99-99-99"
TINTEGER019(INTEGER025) = 0
Next
FOpen 1, PPEPath() + "SCORES", 0, 2
If (Ferr(1)) Then
Gosub LABEL023
If (INTEGER021 > 0) Then
Gosub LABEL024
Endif
Return
Endif
Frewind 1
For INTEGER022 = 1 To 10
FGet 1, TSTRING023(INTEGER022)
FGet 1, TINTEGER013(INTEGER022)
FGet 1, TINTEGER014(INTEGER022)
FGet 1, TINTEGER010(INTEGER022)
FGet 1, TSTRING024(INTEGER022)
FGet 1, TINTEGER019(INTEGER022)
If (TSTRING023(INTEGER022) == STRING027) Then
BOOLEAN007 = 1
Endif
If (BOOLEAN007) Then
If (TINTEGER019(INTEGER022) <= INTEGER021) Then
TSTRING023(INTEGER022) = ""
TINTEGER013(INTEGER022) = 0
TINTEGER014(INTEGER022) = 0
TINTEGER010(INTEGER022) = -99
TSTRING024(INTEGER022) = "99-99-99"
TINTEGER019(INTEGER022) = -1
Endif
BOOLEAN007 = 0
Endif
Next
FClose 1
For INTEGER023 = 1 To 10
If (INTEGER021 > TINTEGER019(INTEGER023)) Then
STRING025 = STRING027
INTEGER015 = INTEGER017
INTEGER016 = INTEGER018
INTEGER012 = INTEGER011
STRING026 = STRING028
INTEGER020 = INTEGER021
STRING027 = TSTRING023(INTEGER023)
INTEGER017 = TINTEGER013(INTEGER023)
INTEGER018 = TINTEGER014(INTEGER023)
INTEGER011 = TINTEGER010(INTEGER023)
STRING028 = TSTRING024(INTEGER023)
INTEGER021 = TINTEGER019(INTEGER023)
TSTRING023(INTEGER023) = STRING025
TINTEGER013(INTEGER023) = INTEGER015
TINTEGER014(INTEGER023) = INTEGER016
TINTEGER010(INTEGER023) = INTEGER012
TSTRING024(INTEGER023) = STRING026
TINTEGER019(INTEGER023) = INTEGER020
Endif
Next
FCreate 3, PPEPath() + "SCORES", 1, 0
For INTEGER024 = 1 To 10
FPutLn 3, TSTRING023(INTEGER024)
FPutLn 3, TINTEGER013(INTEGER024)
FPutLn 3, TINTEGER014(INTEGER024)
FPutLn 3, TINTEGER010(INTEGER024)
FPutLn 3, TSTRING024(INTEGER024)
FPutLn 3, TINTEGER019(INTEGER024)
Next
FClose 3
Gosub LABEL024
Return
End
:LABEL023
If (INTEGER021 <= 0) Then
Return
Endif
FCreate 2, PPEPath() + "SCORES", 1, 0
TSTRING023(1) = STRING027
TINTEGER013(1) = INTEGER017
TINTEGER014(1) = INTEGER018
TINTEGER010(1) = INTEGER011
TSTRING024(1) = STRING028
TINTEGER019(1) = INTEGER021
For INTEGER024 = 1 To 10
FPutLn 2, TSTRING023(INTEGER024)
FPutLn 2, TINTEGER013(INTEGER024)
FPutLn 2, TINTEGER014(INTEGER024)
FPutLn 2, TINTEGER010(INTEGER024)
FPutLn 2, TSTRING024(INTEGER024)
FPutLn 2, TINTEGER019(INTEGER024)
Next
FClose 2
Return
:LABEL024
FCreate 5, PPEPath() + "MOVIEG", 1, 0
FPutLn 5, "@CLS@@X0D┌─────────────────────────────────────────────────────────────────────────────┐@X07"
FPutLn 5, "@X0D│ @X0B Pepster's Movie Time Trivia Ver 1.00 @X0D│@X07"
FPutLn 5, "@X0D│ │@X07"
FPutLn 5, "@X0D│ @X0EDate @X0BPlayer's @X0ATotal @X0FPercent @X0C# of @X0D│@X07"
FPutLn 5, "@X0D│ @X0EPlayed @X0BName @X0APoints @X0FCorrect @X0CQuest. @X0D│@X07"
FPutLn 5, "@X0D│ │@X07"
For INTEGER024 = 1 To 10
If (TINTEGER010(INTEGER024) <> -99) Then
FPutPad 5, "@X0D│@X0E", -11
FPutPad 5, TSTRING024(INTEGER024), -15
FPutPad 5, "@X0B", 4
FPutPad 5, TSTRING023(INTEGER024), -23
FPutPad 5, "@X0A", 4
FPutPad 5, TINTEGER019(INTEGER024), 5
FPutPad 5, "@X0F", 4
FPutPad 5, TINTEGER014(INTEGER024), 16
FPutPad 5, "%@X0C", 5
FPutPad 5, TINTEGER010(INTEGER024), 10
FPutLn 5, "@X0D │@X07"
Endif
Next
FPutLn 5, "@X0D│ │@X07"
FPutLn 5, "@X0D│ @X0APepster's Top Ten Royality @X0D│@X07"
FPutLn 5, "@X0D└─────────────────────────────────────────────────────────────────────────────┘@X07"
FClose 5
Return
End
;------------------------------------------------------------------------------
;
; Usage report (before postprocessing)
;
; ■ Statements used :
;
; 7 End
; 23 Cls
; 6 Wait
; 108 Goto
; 174 Let
; 5 Print
; 32 PrintLn
; 62 If
; 10 DispFile
; 2 Input
; 4 FCreate
; 5 FOpen
; 2 FAppend
; 12 FClose
; 29 FGet
; 40 FPutLn
; 10 FPutPad
; 1 GetUser
; 4 Delete
; 2 AdjTime
; 7 InputStr
; 12 Gosub
; 15 Return
; 4 Newline
; 1 Tokenize
; 1 Goodbye
; 39 AnsiPos
; 4 Frewind
; 1 Copy
; 1 EndProc
;
;
; ■ Functions used :
;
; 8 -
; 6 *
; 1 /
; 96 +
; 4 -
; 27 ==
; 2 <>
; 15 <
; 17 <=
; 2 >
; 31 >=
; 62 !
; 30 &&
; 15 ||
; 1 Len(
; 1 Lower()
; 4 Upper()
; 1 Left()
; 1 Right()
; 8 Ferr()
; 1 Date()
; 2 U_Name()
; 4 Inkey()
; 4 String()
; 7 Mask_Ascii()
; 27 PPEPath()
; 1 CurSec()
; 1 GetToken()
;
;------------------------------------------------------------------------------
;
; Analysis flags : A
;
; 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
;
;------------------------------------------------------------------------------
;
; Postprocessing report
;
; 15 For/Next
; 1 While/EndWhile
; 22 If/Then or If/Then/Else
; 3 Select Case
;
;------------------------------------------------------------------------------
; AEGiS Corp - Break the routines, code against the machines!
;------------------------------------------------------------------------------