home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / DOD-BIGD.ZIP / BIGDOS.PPE (.txt) < prev    next >
PCBoard Programming Language Executable  |  1995-05-11  |  8KB  |  452 lines

  1. ;------------------------------------------------------------------------------
  2. ;                                                   .ss.
  3. ;                                                   `²²'
  4. ;             .,sS$Ss,,s$  .,sS$$$Ss.  .,sS$Ss,,s$ .ss.  .sSs.
  5. ;           .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
  6. ;           $$$'   .$$$' $$$²Sçsµ²' .$$$'   .$$$'.$$$' .$$$'  `$$b.
  7. ;           $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$'    ;$$$
  8. ;           `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
  9. ;                                    .sS²°$$$²²°"'       d²°'
  10. ;                                  .$$²  .$$'
  11. ;                                  $$$.,d$$'
  12. ;                                  `²S$$S²'
  13. ;------------------------------------------------------------------------------
  14. ; P.P.L.X. 2.OO                          (C)1996 - Lone Runner / AEGiS CoRP'96 
  15. ;------------------------------------------------------------------------------
  16. ; PPE 3.O1 (Encryption type I) - Analysis ON - Postprocessing ON
  17. ;------------------------------------------------------------------------------
  18.  
  19.     Boolean  BOOLEAN001
  20.     Integer  INTEGER016
  21.     Integer  INTEGER017
  22.     Integer  INTEGER018
  23.     Integer  INTEGER019
  24.     Integer  INTEGER020
  25.     Integer  INTEGER021
  26.     Integer  INTEGER022
  27.     String   STRING001
  28.     String   STRING002
  29.     String   STRING003
  30.     String   STRING004
  31.     String   TSTRING005(100)
  32.     String   STRING006
  33.     String   STRING007
  34.     String   STRING008
  35.     String   STRING009
  36.     String   STRING010
  37.     String   STRING011
  38.     BigStr   BIGSTR001
  39.     Declare  Procedure PROC001(Var Integer INTEGER002, Var Integer INTEGER003)
  40.     Declare  Procedure PROC002(Integer INTEGER009, Var Integer INTEGER010)
  41.     Declare  Procedure PROC003(Integer INTEGER001)
  42.  
  43. ;------------------------------------------------------------------------------
  44.  
  45.     If ("" <> "HEAVY METAL RULEZ") Goto LABEL001
  46.     BIGSTR001 = "666"
  47.     PrintLn BIGSTR001
  48.     :LABEL001
  49.     Goto LABEL002
  50.     End
  51.  
  52. ;------------------------------------------------------------------------------
  53.  
  54.     Procedure PROC003(Integer INTEGER001)
  55.  
  56.     Select Case (INTEGER001)
  57.         Case 1
  58.             PrintLn "@X07Invalid function number"
  59.         Case 2
  60.             PrintLn "@X07File not found"
  61.         Case 3
  62.             PrintLn "@X07Path not found"
  63.         Case 4
  64.             PrintLn "@X07Too many open files"
  65.         Case 5
  66.             PrintLn "@X07Access denied"
  67.         Case 6
  68.             PrintLn "@X07Invalid handle"
  69.         Case 7
  70.             PrintLn "@X07Memory ctrl blocks destroyed"
  71.         Case 8
  72.             PrintLn "@X07Insufficient memory"
  73.         Case 9
  74.             PrintLn "@X07Invalid memory block address"
  75.         Case 10
  76.             PrintLn "@X07Invalid environment"
  77.         Case 11
  78.             PrintLn "@X07Invalid format"
  79.         Case 12
  80.             PrintLn "@X07Invalid access code"
  81.         Case 13
  82.             PrintLn "@X07Invalid data"
  83.         Case 16
  84.             PrintLn "@X07(error code not used)"
  85.         Case 15
  86.             PrintLn "@X07Invalid drive specified"
  87.         Case 16
  88.             PrintLn "@X07Can't remove current dir"
  89.         Case 17
  90.             PrintLn "@X07Not same device"
  91.         Case 18
  92.             PrintLn "@X07No more matching files"
  93.     End Select
  94.  
  95.     EndProc
  96.  
  97.  
  98. ;------------------------------------------------------------------------------
  99.  
  100.     Procedure PROC001(Var Integer INTEGER002, Var Integer INTEGER003)
  101.  
  102.     Integer  INTEGER004
  103.     Integer  INTEGER005
  104.     Integer  INTEGER006
  105.     Integer  INTEGER007
  106.     Integer  INTEGER008
  107.  
  108.     INTEGER004 = RegDI()
  109.     INTEGER007 = RegES()
  110.     INTEGER006 = RegDS()
  111.     INTEGER005 = RegSI()
  112.     INTEGER008 = RegF()
  113.     DoIntr 33, 6400, 0, 0, 0, 0, INTEGER004, INTEGER008, INTEGER006, INTEGER007
  114.     If (IsBitSet(RegF(), 0)) Then
  115.         INTEGER003 = RegAL()
  116.     Else
  117.         INTEGER003 = 0
  118.     Endif
  119.     If (INTEGER003 == 32) INTEGER003 = 0
  120.     INTEGER002 = RegAL()
  121.  
  122.     EndProc
  123.  
  124.  
  125. ;------------------------------------------------------------------------------
  126.  
  127.     Procedure PROC002(Integer INTEGER009, Var Integer INTEGER010)
  128.  
  129.     Integer  INTEGER011
  130.     Integer  INTEGER012
  131.     Integer  INTEGER013
  132.     Integer  INTEGER014
  133.     Integer  INTEGER015
  134.  
  135.     INTEGER011 = RegDI()
  136.     INTEGER014 = RegES()
  137.     INTEGER013 = RegDS()
  138.     INTEGER012 = RegSI()
  139.     INTEGER015 = RegF()
  140.     DoIntr 33, 3584, 0, 0, INTEGER009, 0, INTEGER011, INTEGER015, INTEGER013, INTEGER014
  141.     If (IsBitSet(RegF(), 0)) Then
  142.         INTEGER010 = RegAL()
  143.         PROC003(INTEGER010)
  144.     Else
  145.         INTEGER010 = 0
  146.     Endif
  147.     If (INTEGER010 == 32) INTEGER010 = 0
  148.  
  149.     EndProc
  150.  
  151.     :LABEL002
  152.     PrintLn "@X0BBIGDOS@X03(tm) 1.0"
  153.     PrintLn "@X0BC@X03oded @X0Bb@X03y @X0BL@X03ars @X0BU@X03lrich @X08[DRiNK OR DiE] @X0Bi@X03n @X0B1@X03995"
  154.     PrintLn 
  155.     PrintLn "@X0BT@X03ype '@X0Bexit@X03' @X0Bt@X03o @X0Br@X03eturn @X0Bt@X03o @X0BP@X03CBoard"
  156.     PrintLn 
  157.     PrintLn 
  158.     Gosub LABEL012
  159.     GetToken STRING008
  160.     If (STRING008 <> "") Then
  161.         STRING006 = Mid(STRING008, 1, 1)
  162.         STRING002 = Strip(STRING008, " ")
  163.     Else
  164.         STRING006 = "C"
  165.         STRING002 = "C:\"
  166.     Endif
  167.     Gosub LABEL011
  168.     :LABEL003
  169.     STRING004 = ""
  170.     DispStr "@X0F" + STRING002
  171.     InputStr "@X0F>@X07_", STRING004, 7, 128, Mask_Ascii(), 256 + 1024
  172.     If ((Upper(STRING004) == "EXIT") || (Upper(STRING004) == "QUIT")) Goto LABEL005
  173.     If (Strip(STRING004, " ") == "") Goto LABEL003
  174.     If ((Upper(Mid(STRING004, 1, 2)) == "CD") || (Upper(Mid(STRING004, 1, 5)) == "CHDIR")) Then
  175.         Gosub LABEL008
  176.         Goto LABEL003
  177.     Endif
  178.     If ((Upper(Mid(STRING004, 1, 2)) == "MD") || (Upper(Mid(STRING004, 1, 5)) == "MKDIR")) Then
  179.         Gosub LABEL009
  180.         Goto LABEL003
  181.     Endif
  182.     If ((Upper(Mid(STRING004, 1, 2)) == "RD") || (Upper(Mid(STRING004, 1, 5)) == "RMDIR")) Then
  183.         Gosub LABEL010
  184.         Goto LABEL003
  185.     Endif
  186.     If ((Len(STRING004) == 2) && (Mid(STRING004, 2, 1) == ":")) Then
  187.         STRING007 = STRING002
  188.         STRING002 = STRING004 + "\"
  189.         STRING006 = Upper(Mid(STRING002, 1, 1))
  190.         Gosub LABEL011
  191.         If (INTEGER022 <> 0) Then
  192.             STRING002 = STRING007
  193.             STRING006 = Mid(STRING002, 1, 1)
  194.         Endif
  195.         Goto LABEL003
  196.     Endif
  197.     If (Upper(Mid(STRING004, 1, 5)) == "TYPE ") Then
  198.         If (Len(STRING004) <= 5) Then
  199.             PrintLn "@X07Required argument missing"
  200.             Goto LABEL004
  201.         Endif
  202.         STRING001 = Strip(Mid(STRING004, InStr(STRING004, " ") + 1, Len(STRING004)), " ")
  203.         If (Exist(STRING001)) Then
  204.             DispFile STRING001, 1
  205.             Goto LABEL004
  206.         Endif
  207.         PrintLn "@X07File not found"
  208.         :LABEL004
  209.         Goto LABEL003
  210.     Endif
  211.     If ((STRING004 == "?") || (Upper(STRING004) == "HELP")) Then
  212.         PrintLn "             @X03    @X0BBigDos@X03(tm) @X0BFunctions@X03 "
  213.         PrintLn ""
  214.         PrintLn " @X0Fx:   @X03- Change drive         @X0FCLS   @X03- Clear screen"
  215.         PrintLn " @X0FCD   @X03- Change directory     @X0BDEL   @X03- Delete file(s)"
  216.         PrintLn " @X0BCOPY @X03- Copy file(s)         @X0BDIR   @X03- Directory"
  217.         PrintLn " @X0FEXIT @X03- Exit BigDos          @X0FMD    @X03- Create directory"
  218.         PrintLn " @X0BREN  @X03- Rename file          @X0FRD    @X03- Remove directory"
  219.         PrintLn " @X0FTYPE @X03- Type file            @X0F?     @X03- This help screen"
  220.         PrintLn " @X0FVER  @X03- Version info"
  221.         PrintLn ""
  222.         Goto LABEL003
  223.     Endif
  224.     If (Upper(STRING004) == "CLS") Then
  225.         PrintLn "@X07@CLS@"
  226.         Goto LABEL003
  227.     Endif
  228.     If (Upper(STRING004) == "VER") Then
  229.         PrintLn "@X0BBIGDOS@X03<tm> 1.0"
  230.         PrintLn "@X0BC@X03oded @X0Bb@X03y @X0BL@X03ars @X0BU@X03lrich @X0Bi@X03n @X0B1@X03995"
  231.         PrintLn 
  232.         Goto LABEL003
  233.     Endif
  234.     If (InStr(STRING004, " ") <> 0) Then
  235.         STRING009 = Mid(STRING004, 1, InStr(STRING004, " ") - 1)
  236.     Else
  237.         STRING009 = STRING004
  238.     Endif
  239.     STRING010 = ""
  240.     If (Mid(Right(STRING009, 4), 1, 1) <> ".") Then
  241.         If (Exist(STRING009 + ".COM")) STRING009 = STRING009 + ".COM"
  242.         If (Exist(STRING009 + ".BAT")) STRING009 = STRING009 + ".BAT"
  243.         If (Exist(STRING009 + ".EXE")) STRING009 = STRING009 + ".EXE"
  244.         If (Exist(STRING009 + ".PPE")) STRING009 = STRING009 + ".PPE"
  245.     Endif
  246.     If (((Len(FileInf(STRING009, 9)) == 3) && (InStr(" COM EXE BAT PPE ", FileInf(STRING009, 9)) <> 0)) && Exist(STRING009)) STRING010 = FileInf(STRING009, 9)
  247.     If (STRING010 == "PPE") Then
  248.         STRING001 = "!" + STRING009
  249.         If (InStr(STRING004, " ") <> 0) STRING001 = STRING001 + " " + Mid(STRING004, InStr(STRING004, " ") + 1, Len(STRING004))
  250.         DispStr STRING001
  251.     Else
  252.         If (OnLocal() == 1) Gosub LABEL006
  253.         Shell 0, INTEGER016, GetEnv("COMSPEC"), "/C " + STRING004 + " >" + "C:\" + "BIGDOS.TMP"
  254.         If (OnLocal() == 1) Gosub LABEL007
  255.         If (Exist("C:\" + "BIGDOS.TMP")) Then
  256.             DispFile "C:\" + "BIGDOS.TMP", 1
  257.             Delete "C:\" + "BIGDOS.TMP"
  258.         Endif
  259.     Endif
  260.     Goto LABEL003
  261.     :LABEL005
  262.     Gosub LABEL013
  263.     Stop
  264.     :LABEL006
  265.     For INTEGER017 = 1 To 23
  266.         TSTRING005(INTEGER017) = ScrText(1, INTEGER017, 80, 1)
  267.     Next
  268.     INTEGER018 = GetX()
  269.     INTEGER019 = GetY()
  270.     Return
  271.     :LABEL007
  272.     For INTEGER017 = 1 To 23
  273.         AnsiPos 1, INTEGER017
  274.         DispStr TSTRING005(INTEGER017)
  275.         AnsiPos INTEGER018, INTEGER019
  276.     Next
  277.     Return
  278.     :LABEL008
  279.     STRING003 = Strip(Mid(STRING004, InStr(STRING004, " ") + 1, Len(STRING004)), " ")
  280.     If ((InStr(STRING004, " ") == 0) && (Upper(Mid(STRING004, 1, 2)) == "CD")) STRING003 = Strip(Mid(STRING004, 3, Len(STRING004)), " ")
  281.     If (Mid(STRING003, 2, 1) <> ":") STRING003 = STRING006 + ":" + STRING003
  282.     STRING007 = STRING002
  283.     STRING002 = Upper(STRING003)
  284.     STRING006 = Upper(Mid(STRING002, 1, 1))
  285.     Gosub LABEL011
  286.     If (INTEGER022 <> 0) Then
  287.         STRING002 = STRING007
  288.         STRING006 = Mid(STRING007, 1, 1)
  289.     Endif
  290.     Return
  291.     :LABEL009
  292.     STRING003 = Strip(Mid(STRING004, InStr(STRING004, " ") + 1, Len(STRING004)), " ")
  293.     If ((STRING003 == "") || (InStr(STRING004, " ") == 0)) Then
  294.         PrintLn "@X07Required argument missing"
  295.         Return
  296.     Endif
  297.     If (Mid(STRING003, 2, 1) <> ":") STRING003 = STRING006 + ":" + STRING003
  298.     STRING001 = Upper(STRING003)
  299.     INTEGER022 = 0
  300.     VarOff STRING001, INTEGER021
  301.     VarSeg STRING001, INTEGER020
  302.     DoIntr 33, 14592, 0, 0, INTEGER021, RegSI(), RegDI(), RegF(), INTEGER020, RegES()
  303.     If (IsBitSet(RegF(), 0)) Then
  304.         INTEGER022 = RegAX()
  305.         PROC003(INTEGER022)
  306.         Return
  307.     Endif
  308.     Return
  309.     :LABEL010
  310.     STRING003 = Strip(Mid(STRING004, InStr(STRING004, " ") + 1, Len(STRING004)), " ")
  311.     If ((STRING003 == "") || (InStr(STRING004, " ") == 0)) Then
  312.         PrintLn "@X07Required argument missing"
  313.         Return
  314.     Endif
  315.     If (Mid(STRING003, 2, 1) <> ":") STRING003 = STRING006 + ":" + STRING003
  316.     STRING001 = Upper(STRING003)
  317.     INTEGER022 = 0
  318.     VarOff STRING001, INTEGER021
  319.     VarSeg STRING001, INTEGER020
  320.     DoIntr 33, 14848, 0, 0, INTEGER021, RegSI(), RegDI(), RegF(), INTEGER020, RegES()
  321.     If (IsBitSet(RegF(), 0)) Then
  322.         INTEGER022 = RegAX()
  323.         PROC003(INTEGER022)
  324.         Return
  325.     Endif
  326.     Return
  327.     :LABEL011
  328.     INTEGER022 = 0
  329.     VarOff STRING002, INTEGER021
  330.     VarSeg STRING002, INTEGER020
  331.     DoIntr 33, 15104, 0, 0, INTEGER021, RegSI(), RegDI(), RegF(), INTEGER020, RegES()
  332.     If (IsBitSet(RegF(), 0)) Then
  333.         INTEGER022 = RegAX()
  334.         PROC003(INTEGER022)
  335.         Return
  336.     Endif
  337.     INTEGER016 = Asc(STRING006) - 65
  338.     PROC002(INTEGER016, INTEGER022)
  339.     DoIntr 33, 18176, 0, 0, 0, INTEGER021, RegDI(), RegF(), INTEGER020, RegES()
  340.     STRING002 = Chr(INTEGER016 + 65) + ":\" + STRING002
  341.     STRING006 = Chr(INTEGER016 + 65)
  342.     Return
  343.     End
  344.     :LABEL012
  345.     VarOff STRING011, INTEGER021
  346.     VarSeg STRING011, INTEGER020
  347.     DoIntr 33, 18176, 0, 0, 0, INTEGER021, RegDI(), RegF(), INTEGER020, RegES()
  348.     PROC001(INTEGER016, INTEGER022)
  349.     STRING011 = Chr(INTEGER016 + 65) + ":\" + STRING011
  350.     Return
  351.     :LABEL013
  352.     VarOff STRING011, INTEGER021
  353.     VarSeg STRING011, INTEGER020
  354.     DoIntr 33, 15104, 0, 0, INTEGER021, RegSI(), RegDI(), RegF(), INTEGER020, RegES()
  355.     INTEGER016 = Asc(Mid(STRING011, 1, 1)) - 65
  356.     PROC002(INTEGER016, INTEGER022)
  357.     Return
  358.  
  359. ;------------------------------------------------------------------------------
  360. ;
  361. ; Usage report (before postprocessing)
  362. ;
  363. ; ■ Statements used :
  364. ;
  365. ;    2       End
  366. ;    83      Goto 
  367. ;    71      Let 
  368. ;    43      PrintLn 
  369. ;    61      If 
  370. ;    2       DispFile 
  371. ;    1       Delete 
  372. ;    1       InputStr 
  373. ;    10      Gosub 
  374. ;    13      Return
  375. ;    1       GetToken 
  376. ;    1       Shell 
  377. ;    1       Stop
  378. ;    3       DispStr 
  379. ;    8       DoIntr 
  380. ;    5       VarSeg 
  381. ;    5       VarOff 
  382. ;    2       AnsiPos 
  383. ;    3       EndProc
  384. ;
  385. ;
  386. ; ■ Functions used :
  387. ;
  388. ;    41      +
  389. ;    3       -
  390. ;    46      ==
  391. ;    11      <>
  392. ;    2       <
  393. ;    3       <=
  394. ;    4       >=
  395. ;    44      !
  396. ;    8       &&
  397. ;    9       ||
  398. ;    9       Len(
  399. ;    18      Upper()
  400. ;    26      Mid()
  401. ;    1       Right()
  402. ;    3       Chr()
  403. ;    2       Asc()
  404. ;    12      InStr()
  405. ;    7       Strip()
  406. ;    1       Mask_Ascii()
  407. ;    2       OnLocal()
  408. ;    1       GetEnv()
  409. ;    3       RegAL()
  410. ;    3       RegAX()
  411. ;    6       RegSI()
  412. ;    8       RegDI()
  413. ;    13      RegF()
  414. ;    2       RegDS()
  415. ;    8       RegES()
  416. ;    7       Exist()
  417. ;    1       GetX()
  418. ;    1       GetY()
  419. ;    3       FileInf()
  420. ;    1       ScrText()
  421. ;    5       IsBitSet()
  422. ;
  423. ;------------------------------------------------------------------------------
  424. ;
  425. ; Analysis flags : SI
  426. ;
  427. ; S - Shell to DOS ■ 5
  428. ;     This may be normal if the PPE need to execute an external command,
  429. ;     but may be actually anything... nasty (formating HD, rebooting,...)
  430. ;     or usefull (sorting, maintenance,...). Check!
  431. ;     ■ Search for : SHELL
  432. ;
  433. ; I - Interrupt call ■ 5
  434. ;     This is rare in PPE... Although it may be a way to replace a PPE
  435. ;     command by its fast interrupt equivalent. Be aware that an
  436. ;     interrupt call may do anything... nasty (formating HD, rebooting,...)
  437. ;     or usefull (fast screen i/o, hardware ressource access,...). Check!
  438. ;     ■ Search for : DOINTR
  439. ;
  440. ;------------------------------------------------------------------------------
  441. ;
  442. ; Postprocessing report
  443. ;
  444. ;    2       For/Next
  445. ;    0       While/EndWhile
  446. ;    24      If/Then or If/Then/Else
  447. ;    1       Select Case
  448. ;
  449. ;------------------------------------------------------------------------------
  450. ;                 AEGiS Corp - Break the routines, code against the machines!
  451. ;------------------------------------------------------------------------------
  452.