home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 226-250 / apd246 / codemaster.amos / codemaster.amosSourceCode
AMOS Source Code  |  1991-07-19  |  18KB  |  638 lines

  1. Dim FILE$(50),ST(50),C(50)
  2. Dim S_FILE$(50),S_C(50),S_ST(50),S_SAV(50),S_NF$(50)
  3. S:
  4. Screen Open 0,320,260,16,LOWREZ
  5. Limit Mouse 128,68 To 430,293
  6. Flash Off 
  7. Load Iff "iff/codemaster.iff"
  8. Screen Offset 0,10,0
  9. '
  10. '
  11. '
  12. FILENAME$="     "
  13. CF=0 : OUT=0
  14. CODE=123
  15. SCRAMBLE_TYPE=1
  16. SAV=1
  17. I=1
  18. Shared S_FILE$(),S_ST(),S_C(),S_SAV(),S_NF$(),SCRIPT_NUM,QNTY,OUT,CF,ST(),C(),FILE$(),I,MZ,MK,CODE,SCRAMBLE_TYPE,FILENAME$,ACCESS,FILE_LENGTH,SAV,NEWFILE$
  19. '
  20. '
  21. '
  22. CLEAR_INDICATORS
  23. PREP_ZONE
  24. PREP_CODE
  25. SAV_TYPE
  26. MARKER:
  27. TEST_ZONE
  28. ACTION
  29. If OUT=0 Then Goto MARKER Else Goto S
  30. '
  31. '
  32. '
  33. '
  34. '
  35. '
  36. Procedure SAV_TYPE
  37.    If SAV=1 Then Text 77,241,"   OVERWRITE   " : NEWFILE$=""
  38.    If SAV=-1 Then Text 77,241,"SAVE SEPERATELY"
  39.    If SAV=-1 Then Screen Hide : NEWFILE$=Fsel$("df0:","","-->CODEMASTER<--","ENTER A DESTINATION FILE") : Screen Show : If NEWFILE$="" Then SAV=1 : SAV_TYPE
  40. End Proc
  41. '
  42. Procedure ACTION
  43.    Rem *** ALTER CODE KEY *** 
  44.       If MZ=1 and MK=1 and CODE<900 Then CODE=CODE+100
  45.       If MZ=1 and MK=2 and CODE>99 Then CODE=CODE-100
  46.       If MZ=2 and MK=1 and CODE<990 Then CODE=CODE+10
  47.       If MZ=2 and MK=2 and CODE>9 Then CODE=CODE-10
  48.       If MZ=3 and MK=1 and CODE<999 Then CODE=CODE+1
  49.       If MZ=3 and MK=2 and CODE>0 Then CODE=CODE-1
  50.       PREP_CODE
  51.    Rem *** select a file ***
  52.       If MZ=6 Then WOT_FILE
  53.    Rem *** change scramble type *** 
  54.       If MZ>6 and MZ<14 Then SCRAMBLE_TYPE=MZ-6 : CLEAR_INDICATORS
  55.    Rem *** scramble *** 
  56.       If MZ=4 Then SCRAMBLE
  57.    Rem *** unscramble *** 
  58.       If MZ=5 Then UNSCRAMBLE
  59.    Rem *** quit *** 
  60.       If MZ=14 and MK=3 Then Close : Stop 
  61.    Rem *** log menu 
  62.       If MZ=15 and MK=1 Then SCRAMBLE_LOG
  63.    Rem *** exe script *** 
  64.       If MZ=16 and MK=3 Then EXECUTE
  65.    Rem *** script *** 
  66.       If MZ=17 and(MK=1 or MK=2) Then SCRIPT
  67.    Rem *** FILE *** 
  68.       If MZ=19 and MK=1 Then FILE_OPTIONS
  69.    Rem *** save type ***
  70.       If MZ=18 Then SAV=SAV*-1 : SAV_TYPE
  71.    Rem *** information window *** 
  72.       If MZ=20 Then INFORMATION
  73. '
  74. End Proc
  75. '
  76. Procedure TEST_ZONE
  77.    Repeat 
  78.    MZ=Mouse Zone
  79.    MK=Mouse Key
  80.    Until MK=1 or MK=2 or MK=3 and MZ>0
  81.    Wait 5
  82. End Proc
  83. '
  84. Procedure PREP_ZONE
  85.    Reserve Zone 20
  86.    Set Zone 1,215,133 To 235,151
  87.    Set Zone 2,249,133 To 268,151
  88.    Set Zone 3,286,133 To 303,151
  89.    Set Zone 4,11,56 To 121,85
  90.    Set Zone 5,180,56 To 310,85
  91.    Set Zone 6,210,90 To 310,120
  92.    Set Zone 7,30,115 To 140,130
  93.    Set Zone 8,30,130 To 140,145
  94.    Set Zone 9,30,145 To 140,159
  95.    Set Zone 10,30,159 To 140,173
  96.    Set Zone 11,30,173 To 140,187
  97.    Set Zone 12,30,187 To 140,201
  98.    Set Zone 13,30,201 To 180,215
  99.    Set Zone 14,213,203 To 306,220
  100.    Set Zone 15,8,26 To 111,50
  101.    Set Zone 16,111,26 To 206,50
  102.    Set Zone 17,208,26 To 310,50
  103.    Set Zone 18,8,225 To 205,250
  104.    Set Zone 19,210,225 To 310,250
  105.    Set Zone 20,213,170 To 306,190
  106. End Proc
  107. '
  108. Procedure CLEAR_INDICATORS
  109.    Ink 1,0
  110.    If SCRAMBLE_TYPE=1 Then Text 16,127,"><" Else Text 16,127,"  "
  111.    If SCRAMBLE_TYPE=2 Then Text 16,140,"><" Else Text 16,140,"  "
  112.    If SCRAMBLE_TYPE=3 Then Text 16,155,"><" Else Text 16,155,"  "
  113.    If SCRAMBLE_TYPE=4 Then Text 16,168,"><" Else Text 16,168,"  "
  114.    If SCRAMBLE_TYPE=5 Then Text 16,182,"><" Else Text 16,182,"  "
  115.    If SCRAMBLE_TYPE=6 Then Text 16,196,"><" Else Text 16,196,"  "
  116.    If SCRAMBLE_TYPE=7 Then Text 16,210,"><" Else Text 16,210,"  "
  117. End Proc
  118. '
  119. Procedure PREP_CODE
  120.    Ink 1,0
  121.    If CODE>99
  122.       Text 220,145,Mid$(Str$(CODE),2,1)
  123.       Text 256,145,Mid$(Str$(CODE),3,1)
  124.       Text 291,145,Mid$(Str$(CODE),4,1)
  125.       End If 
  126.    If CODE<100
  127.       Text 220,145," "
  128.       Text 256,145,Mid$(Str$(CODE),2,1)
  129.       Text 291,145,Mid$(Str$(CODE),3,1)
  130.       End If 
  131.    If CODE<10
  132.       Text 220,145," "
  133.       Text 256,145," "
  134.       Text 291,145,Mid$(Str$(CODE),2,1)
  135.       End If 
  136. End Proc
  137. '
  138. Procedure INFORMATION
  139.    INFO$="          Codemaster was written by andrew king ( in AMOS ) from the 15th of june to the 27th of june 1991. You should look out for annother disc of mine which contains various convertors and an organiser. "
  140.    INFO$=INFO$+"The convertors manipulate the following :- weights, linear measures, square measures, morse code and roman numerals. The disc is available from the AMOS pd library, i'm not sure which disc but im sure "
  141.    INFO$=INFO$+"owner ( Sandra ) will know. If you find any bugs in this program, or you are having some problems, I would appreciate a call. ( 0273 683998). "
  142.    INFO$=INFO$+"Appologies go to those fellow amos programmers who find the procedures locked "
  143.    INFO$=INFO$+"this is because of security reasons. The program wouldn't be much good if everyone could hack it. The procedures are simple, but if you really cant figure out roughly how this works I will be glad to get you started.          "
  144.    SPEED=7
  145.    Repeat 
  146.    Text 220,183,Mid$(INFO$,I,10)
  147.    Inc I
  148.    Wait SPEED
  149.    If I+10=Len(INFO$) Then I=1
  150.    Until Mouse Key=1 or Mouse Key=2 or Mouse Key=3
  151. End Proc
  152. '
  153. Procedure WOT_FILE
  154.    WF_MARKER:
  155.       Screen Hide 
  156.       FILENAME$=Fsel$("","","CODEMASTER V1.0","select a file")
  157.       If FILENAME$="" Then FILENAME$=" "
  158.       Screen Show 
  159. End Proc
  160. '
  161. Procedure FILE_OPTIONS
  162. Screen Open 1,320,260,2,LOWREZ
  163. Curs Off 
  164. Palette $0,$FFF
  165. Cls 0
  166. Locate 8,5 : Print "DISC OPERATIONS MENU"
  167. Locate 8,6 : Print "--------------------"
  168. Locate 3,10 : Print "(1)...MAKE NEW DIRECTORY...(1)"
  169. Locate 3,12 : Print "(2).....RENAME A FILE......(2)"
  170. Locate 3,14 : Print "(3).....DELETE A FILE......(3)"
  171. Locate 3,16 : Print "(4)..RETURN TO CODEMASTER..(4)"
  172. FILE_MARKER:
  173. Locate 6,20 : Input "WHAT IS YOU CHOICE.....";CH
  174.    If CH=1 Then NEWDIR$=Fsel$("df0:","","-->CODEMASTER<--","enter new directory ") : If NEWDIR$<>"" Then Mkdir NEWDIR$ : NEWDIR$=""
  175.    If CH=2 Then OLD$=Fsel$("df0:","","-->CODEMASTER<--","select file") : NEW$=Fsel$("df0:","","-->CODEMASTER<--","enter a new name") : Rename OLD$ To NEW$
  176.    If CH=3 Then DEADUN$=Fsel$("df0:","","-->CODEMASTER<--","select file to kill") : If DEADUN$<>"" Then Kill DEADUN$ : DEADUN$=""
  177.    If CH=4 Then Screen Close 1 : Screen To Front 0 : Screen 0 Else Goto FILE_MARKER
  178. End Proc
  179. '
  180. Procedure PERCENT_DONE
  181.    A#=ACCESS
  182.    B#=FILE_LENGTH
  183.    C#=100
  184.    D#=A#/(B#/C#)
  185.    E=D#
  186.    OUTPUT$=Str$(E)
  187.    Ink 1,0
  188.    Text 135,76,OUTPUT$
  189.    If OUTPUT$>Str$(98) Then Text 135,76,"    "
  190. End Proc
  191. '
  192. Procedure SCRIPT
  193.    If SCRIPT_NUM<50 Then Inc SCRIPT_NUM : S_FILE$(SCRIPT_NUM)=FILENAME$ : S_C(SCRIPT_NUM)=CODE : S_ST(SCRIPT_NUM)=SCRAMBLE_TYPE : S_SAV(SCRIPT_NUM)=SAV : S_NF$(SCRIPT_NUM)=NEWFILE$ : Bell : Wait 30 Else Boom : Wait 30
  194. End Proc
  195. '
  196. Procedure EXECUTE
  197.    If SCRIPT_NUM=0 Then Pop Proc
  198.    For S=1 To SCRIPT_NUM
  199.       FILENAME$=S_FILE$(S)
  200.       SCRAMBLE_TYPE=S_ST(S)
  201.       CODE=S_C(S)
  202.       SAV=S_SAV(S)
  203.       NEWFILE$=S_NF$(S)
  204.       SCRAMBLE
  205.    Next S
  206.    Bell 
  207.    Wait 10
  208.    SCRIPT_NUM=0
  209. End Proc
  210. '
  211. Procedure SCRAMBLE_LOG
  212.    CF=1
  213.    Open Random 1,"df0:log_dat_1"
  214.       Field 1,5 As QNTY$
  215.       Get 1,1
  216.       Close 1
  217.       QNTY=Val(QNTY$)
  218. '
  219.    If QNTY>0 Then Open Random 1,"df0:log_dat_2" : Field 1,20 As FILE$,4 As C$,2 As T$ : For IND=1 To QNTY : Get 1,IND : ST(IND)=Val(T$) : C(IND)=Val(C$) : FILE$(IND)=FILE$ : Next IND : Close 1
  220. '
  221.    Load Iff "df0:iff/log.iff"
  222.    Reserve Zone 6
  223.    Set Zone 1,14,39 To 146,72
  224.    Set Zone 2,14,79 To 146,112
  225.    Set Zone 3,14,119 To 140,152
  226.    Set Zone 4,14,159 To 50,192
  227.    Set Zone 5,203,161 To 234,191
  228.    Set Zone 6,242,160 To 273,193
  229.    AP=1
  230. '
  231. '
  232. SHRED:
  233.    Ink 2,0
  234.    Text 225,125,Str$(QNTY)
  235.    Text 50,250,"                              "
  236.    If QNTY>0 Then Text 50,220,FILE$(AP)
  237.    Repeat : Until Mouse Key=1 or FINISH=True : Wait 10
  238.    If Mouse Zone=1 and FINISH<>True and QNTY<50 Then Goto SL_ADD
  239.    If Mouse Zone=2 and FINISH<>True and QNTY>0 Then Goto SL_UNS
  240.    If Mouse Zone=3 and FINISH<>True Then FINISH=True
  241.    If Mouse Zone=4 and FINISH<>True and QNTY>0 Then Goto SL_QUES
  242.    If Mouse Zone=5 and FINISH<>True and AP>1 Then AP=AP-1 : Text 70,170,"             " : Text 100,185,"    "
  243.    If Mouse Zone=6 and FINISH<>True and AP<QNTY Then AP=AP+1 : Text 70,170,"             " : Text 100,185,"    "
  244.    If FINISH=True Then OUT=1 : FINISH=False : Pop Proc
  245.    Goto SHRED
  246. '
  247. '
  248. '
  249. SL_ADD:
  250.    If SAV=1 Then If FILENAME$="" Then Boom : Wait 10 : Goto SHRED
  251.    If SAV=-1 Then If NEWFILE$="" Then Boom : Wait 10 : Goto SHRED
  252.    QNTY=QNTY+1
  253.    If SAV=1 Then FILE$(QNTY)=FILENAME$
  254.    If SAV=-1 Then FILE$(QNTY)=NEWFILE$
  255.    ST(QNTY)=SCRAMBLE_TYPE
  256.    C(QNTY)=CODE
  257.    Open Random 1,"log_dat_2"
  258.    Field 1,20 As FILE$,4 As C$,2 As T$
  259.    FILE$=FILENAME$
  260.    C$=Str$(CODE)
  261.    T$=Str$(SCRAMBLE_TYPE)
  262.    Put 1,QNTY
  263.    Close 1
  264.    Open Random 1,"log_dat_1"
  265.    Field 1,5 As QNTY$
  266.    QNTY$=Str$(QNTY)
  267.    Put 1,1
  268.    Close 1
  269.    FINISH=True
  270.    Goto SHRED
  271. '
  272. '
  273. SL_UNS:
  274.    SCRAMBLE_TYPE=ST(AP) : CODE=C(AP) : FILENAME$=FILE$(AP) : Repeat : If Mid$(FILENAME$,Len(FILENAME$),1)=" " Then FILENAME$=Mid$(FILENAME$,1,Len(FILENAME$)-1) : Until Mid$(FILENAME$,Len(FILENAME$),1)<>" "
  275.    UNSCRAMBLE
  276.    Open Random 1,"log_dat_2"
  277.    Field 1,20 As F$,4 As C$,2 As T$
  278.    Get 1,QNTY
  279.    ST(AP)=Val(T$) : FILE$(AP)=F$ : C(AP)=Val(C$)
  280.    QNTY=QNTY-1
  281.    For X=1 To QNTY
  282.    F$=FILE$(X) : C$=Str$(C(X)) : T$=Str$(ST(X))
  283.    Field 1,20 As F$,4 As C$,2 As T$
  284.    Put 1,X
  285.    Next X
  286.    Close 1
  287.    Open Random 1,"log_dat_1"
  288.    Q$=Str$(QNTY)
  289.    Field 1,5 As Q$
  290.    Put 1,1
  291.    Close 1
  292.    FINISH=True
  293. Goto SHRED
  294. '
  295. '
  296. '
  297. SL_QUES:
  298.    If ST(AP)=1 Then Text 70,170," INCREMENT   "
  299.    If ST(AP)=2 Then Text 70,170,"  FORMULA    "
  300.    If ST(AP)=3 Then Text 70,170,"   SIMPLE    "
  301.    If ST(AP)=4 Then Text 70,170,"  COMPLEX    "
  302.    If ST(AP)=5 Then Text 70,170," DIABOLICAL  "
  303.    If ST(AP)=6 Then Text 70,170," RIDICULOUS  "
  304.    If ST(AP)=7 Then Text 70,170,"SHEER MADNESS"
  305.    Text 100,185,Mid$(Str$(C(AP)),2,3)
  306.    Goto SHRED
  307. End Proc
  308. '
  309. '
  310. Procedure SCRAMBLE
  311.    If Not Exist(FILENAME$) Then Pop Proc
  312.    If SCRAMBLE_TYPE=1 Then SCRAMBLE_INCREMENT
  313.    If SCRAMBLE_TYPE=2 Then SCRAMBLE_FORMULA
  314.    If SCRAMBLE_TYPE=3 Then SCRAMBLE_SIMPLE
  315.    If SCRAMBLE_TYPE=4 Then SCRAMBLE_COMPLEX
  316.    If SCRAMBLE_TYPE=5 Then SCRAMBLE_DIABOLICAL
  317.    If SCRAMBLE_TYPE=6 Then SCRAMBLE_RIDICULOUS
  318.    If SCRAMBLE_TYPE=7 Then SCRAMBLE_SHEERMADNESS
  319. End Proc
  320. Procedure SCRAMBLE_INCREMENT
  321.    Open Random 1,FILENAME$
  322.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  323.    FILE_LENGTH=Lof(1)
  324.    Field 1,1 As CHARACTER$
  325.    For ACCESS=1 To Lof(1)
  326.    Get 1,ACCESS
  327.    CHAR=Asc(CHARACTER$)+CODE
  328.    Repeat 
  329.       If CHAR>255 Then CHAR=CHAR-255
  330.       If CHAR<1 Then CHAR=CHAR+255
  331.    Until CHAR<256 and CHAR>0
  332.    CHARACTER$=Chr$(CHAR)
  333.    If SAV=1 Then Put 1,ACCESS
  334.    If SAV=-1 Then Put 2,ACCESS
  335.    If CF=0 Then PERCENT_DONE
  336.    Next ACCESS
  337.    Close 
  338.    Bell 
  339. End Proc
  340. Procedure SCRAMBLE_FORMULA
  341.    Open Random 1,FILENAME$
  342.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  343.    FILE_LENGTH=Lof(1)
  344.    Field 1,1 As CHARACTER$
  345.    For ACCESS=1 To Lof(1)
  346.    Get 1,ACCESS
  347.    CHAR=Asc(CHARACTER$)+(ACCESS-CODE)
  348.    Repeat 
  349.       If CHAR>255 Then CHAR=CHAR-255
  350.       If CHAR<1 Then CHAR=CHAR+255
  351.    Until CHAR<256 and CHAR>0
  352.    CHARACTER$=Chr$(CHAR)
  353.    If SAV=1 Then Put 1,ACCESS
  354.    If SAV=2 Then Put 2,ACCESS
  355.    If CF=0 Then PERCENT_DONE
  356.    Next ACCESS
  357.    Close 
  358.    Bell 
  359. End Proc
  360. Procedure SCRAMBLE_SIMPLE
  361.    OLD=0
  362.    Open Random 1,FILENAME$
  363.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  364.    FILE_LENGTH=Lof(1)
  365.    Field 1,1 As CHARACTER$
  366.    For ACCESS=1 To Lof(1)
  367.    Get 1,ACCESS
  368.    CHAR=Asc(CHARACTER$)+(OLD-CODE)
  369.    OLD=Asc(CHARACTER$)
  370.    Repeat 
  371.       If CHAR>255 Then CHAR=CHAR-255
  372.       If CHAR<1 Then CHAR=CHAR+255
  373.    Until CHAR<256 and CHAR>0
  374.    CHARACTER$=Chr$(CHAR)
  375.    If SAV=1 Then Put 1,ACCESS
  376.    If SVA=-1 Then Put 2,ACCESS
  377.    If CF=0 Then PERCENT_DONE
  378.    Next ACCESS
  379.    Close 
  380.    Bell 
  381. End Proc
  382. Procedure SCRAMBLE_COMPLEX
  383.    OLD=0 : VERYOLD=0
  384.    Open Random 1,FILENAME$
  385.    If SAV=-1 Then Open Random 1,NEWFILE$ : Field 2,1 As CHARACTER$
  386.    FILE_LENGTH=Lof(1)
  387.    Field 1,1 As CHARACTER$
  388.    For ACCESS=1 To Lof(1)
  389.    Get 1,ACCESS
  390.    CHAR=Asc(CHARACTER$)+((OLD-CODE)-(VERYOLD-CODE))
  391.    VERYOLD=OLD
  392.    OLD=Asc(CHARACTER$)
  393.    Repeat 
  394.       If CHAR>255 Then CHAR=CHAR-255
  395.       If CHAR<1 Then CHAR=CHAR+255
  396.    Until CHAR<256 and CHAR>0
  397.    CHARACTER$=Chr$(CHAR)
  398.    If SAV=1 Then Put 1,ACCESS
  399.    If SAV=-1 Then Put 2,ACCESS
  400.    If CF=0 Then PERCENT_DONE
  401.    Next ACCESS
  402.    Close 
  403.    Bell 
  404. End Proc
  405. Procedure SCRAMBLE_DIABOLICAL
  406.    OLD=0 : VERYOLD=0
  407.    Open Random 1,FILENAME$
  408.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  409.    FILE_LENGTH=Lof(1)
  410.    Field 1,1 As CHARACTER$
  411.    For ACCESS=1 To Lof(1)
  412.    Get 1,ACCESS
  413.    CHAR=Asc(CHARACTER$)+((ACCESS-OLD+CODE)-(ACCESS-VERYOLD+CODE))
  414.    VERYOLD=OLD
  415.    OLD=Asc(CHARACTER$)
  416.    Repeat 
  417.       If CHAR>255 Then CHAR=CHAR-255
  418.       If CHAR<1 Then CHAR=CHAR+255
  419.    Until CHAR<256 and CHAR>0
  420.    CHARACTER$=Chr$(CHAR)
  421.    If SAV=1 Then Put 1,ACCESS
  422.    If SAV=-1 Then Put 2,ACCESS
  423.    If CF=0 Then PERCENT_DONE
  424.    Next ACCESS
  425.    Close 
  426.    Bell 
  427. End Proc
  428. Procedure SCRAMBLE_RIDICULOUS
  429.    OLD=0 : VERYOLD=0
  430.    Open Random 1,FILENAME$
  431.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  432.    FILE_LENGTH=Lof(1)
  433.    Field 1,1 As CHARACTER$
  434.    For ACCESS=1 To Lof(1)
  435.    Get 1,ACCESS
  436.    CHAR=Asc(CHARACTER$)+((ACCESS-OLD+CODE)-(ACCESS-VERYOLD+CODE)-(Lof(1)-ACCESS))
  437.    VERYOLD=OLD
  438.    OLD=Asc(CHARACTER$)
  439.    Repeat 
  440.       If CHAR>255 Then CHAR=CHAR-255
  441.       If CHAR<1 Then CHAR=CHAR+255
  442.    Until CHAR<256 and CHAR>0
  443.    CHARACTER$=Chr$(CHAR)
  444.    If SAV=1 Then Put 1,ACCESS
  445.    If SAV=-1 Then Put 2,ACCESS
  446.    If CF=0 Then PERCENT_DONE
  447.    Next ACCESS
  448.    Close 
  449.    Bell 
  450. End Proc
  451. Procedure SCRAMBLE_SHEERMADNESS
  452.    OLD=0 : VERYOLD=0
  453.    Open Random 1,FILENAME$
  454.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  455.    FILE_LENGTH=Lof(1)
  456.    Field 1,1 As CHARACTER$
  457.    For ACCESS=1 To Lof(1)
  458.    Get 1,ACCESS
  459.    CHAR=Asc(CHARACTER$)+((OLD-(ACCESS-CODE))+(VERYOLD-(ACCESS-CODE))+(VERYOLD-OLD)+(CODE-ACCESS)-Lof(1))
  460.    VERYOLD=OLD
  461.    OLD=Asc(CHARACTER$)
  462.    Repeat 
  463.       If CHAR>255 Then CHAR=CHAR-255
  464.       If CHAR<1 Then CHAR=CHAR+255
  465.    Until CHAR<256 and CHAR>0
  466.    CHARACTER$=Chr$(CHAR)
  467.    If SAV=1 Then Put 1,ACCESS
  468.    If SAV=-1 Then Put 2,ACCESS
  469.    If CF=0 Then PERCENT_DONE
  470.    Next ACCESS
  471.    Close 
  472.    Bell 
  473. End Proc
  474. '
  475. '
  476. '
  477. Procedure UNSCRAMBLE
  478.    If Not Exist(FILENAME$) Then Pop Proc
  479.    If SCRAMBLE_TYPE=1 Then UNSCRAMBLE_INCREMENT
  480.    If SCRAMBLE_TYPE=2 Then UNSCRAMBLE_FORMULA
  481.    If SCRAMBLE_TYPE=3 Then UNSCRAMBLE_SIMPLE
  482.    If SCRAMBLE_TYPE=4 Then UNSCRAMBLE_COMPLEX
  483.    If SCRAMBLE_TYPE=5 Then UNSCRAMBLE_DIABOLICAL
  484.    If SCRAMBLE_TYPE=6 Then UNSCRAMBLE_RIDICULOUS
  485.    If SCRAMBLE_TYPE=7 Then UNSCRAMBLE_SHEERMADNESS
  486. End Proc
  487. Procedure UNSCRAMBLE_INCREMENT
  488.    Open Random 1,FILENAME$
  489.    FILE_LENGTH=Lof(1)
  490.    Field 1,1 As CHARACTER$
  491.    For ACCESS=1 To Lof(1)
  492.    Get 1,ACCESS
  493.    CHAR=Asc(CHARACTER$)-CODE
  494.    Repeat 
  495.       If CHAR>255 Then CHAR=CHAR-255
  496.       If CHAR<1 Then CHAR=CHAR+255
  497.    Until CHAR<256 and CHAR>0
  498.    CHARACTER$=Chr$(CHAR)
  499.    Put 1,ACCESS
  500.    If CF=0 Then PERCENT_DONE
  501.    Next ACCESS
  502.    Close 1
  503.    Bell 
  504. End Proc
  505. Procedure UNSCRAMBLE_FORMULA
  506.    Open Random 1,FILENAME$
  507.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  508.    FILE_LENGTH=Lof(1)
  509.    Field 1,1 As CHARACTER$
  510.    For ACCESS=1 To Lof(1)
  511.    Get 1,ACCESS
  512.    CHAR=Asc(CHARACTER$)-(ACCESS-CODE)
  513.    Repeat 
  514.       If CHAR>255 Then CHAR=CHAR-255
  515.       If CHAR<1 Then CHAR=CHAR+255
  516.    Until CHAR<256 and CHAR>0
  517.    CHARACTER$=Chr$(CHAR)
  518.    If SAV=1 Then Put 1,ACCESS
  519.    If SAV=-1 Then Put 2,ACCESS
  520.    If CF=0 Then PERCENT_DONE
  521.    Next ACCESS
  522.    Close 
  523.    Bell 
  524. End Proc
  525. Procedure UNSCRAMBLE_SIMPLE
  526.    OLD=0
  527.    Open Random 1,FILENAME$
  528.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  529.    FILE_LENGTH=Lof(1)
  530.    Field 1,1 As CHARACTER$
  531.    For ACCESS=1 To Lof(1)
  532.    Get 1,ACCESS
  533.    CHAR=Asc(CHARACTER$)-(OLD-CODE)
  534.    Repeat 
  535.       If CHAR>255 Then CHAR=CHAR-255
  536.       If CHAR<1 Then CHAR=CHAR+255
  537.    Until CHAR<256 and CHAR>0
  538.    OLD=CHAR
  539.    CHARACTER$=Chr$(CHAR)
  540.    If SAV=1 Then Put 1,ACCESS
  541.    If SAV=2 Then Put 2,ACCESS
  542.    If CF=0 Then PERCENT_DONE
  543.    Next ACCESS
  544.    Close 
  545.    Bell 
  546. End Proc
  547. Procedure UNSCRAMBLE_COMPLEX
  548.    OLD=0 : VERYOLD=0
  549.    Open Random 1,FILENAME$
  550.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  551.    FILE_LENGTH=Lof(1)
  552.    Field 1,1 As CHARACTER$
  553.    For ACCESS=1 To Lof(1)
  554.    Get 1,ACCESS
  555.    CHAR=Asc(CHARACTER$)-((OLD-CODE)-(VERYOLD-CODE))
  556.    VERYOLD=OLD
  557.    Repeat 
  558.       If CHAR>255 Then CHAR=CHAR-255
  559.       If CHAR<1 Then CHAR=CHAR+255
  560.    Until CHAR<256 and CHAR>0
  561.    OLD=CHAR
  562.    CHARACTER$=Chr$(CHAR)
  563.    If SAV=1 Then Put 1,ACCESS
  564.    If SAV=-1 Then Put 2,ACCESS
  565.    If CF=0 Then PERCENT_DONE
  566.    Next ACCESS
  567.    Close 
  568.    Bell 
  569. End Proc
  570. Procedure UNSCRAMBLE_DIABOLICAL
  571.    OLD=0 : VERYOLD=0
  572.    Open Random 1,FILENAME$
  573.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  574.    FILE_LENGTH=Lof(1)
  575.    Field 1,1 As CHARACTER$
  576.    For ACCESS=1 To Lof(1)
  577.    Get 1,ACCESS
  578.    CHAR=Asc(CHARACTER$)-((ACCESS-OLD+CODE)-(ACCESS-VERYOLD+CODE))
  579.    VERYOLD=OLD
  580.    Repeat 
  581.       If CHAR>255 Then CHAR=CHAR-255
  582.       If CHAR<1 Then CHAR=CHAR+255
  583.    Until CHAR<256 and CHAR>0
  584.    OLD=CHAR
  585.    CHARACTER$=Chr$(CHAR)
  586.    If SAV=1 Then Put 1,ACCESS
  587.    If SAV=-1 Then Put 2,ACCESS
  588.    If CF=0 Then PERCENT_DONE
  589.    Next ACCESS
  590.    Close 
  591.    Bell 
  592. End Proc
  593. Procedure UNSCRAMBLE_RIDICULOUS
  594.    OLD=0 : VERYOLD=0
  595.    Open Random 1,FILENAME$
  596.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  597.    FILE_LENGTH=Lof(1)
  598.    Field 1,1 As CHARACTER$
  599.    For ACCESS=1 To Lof(1)
  600.    Get 1,ACCESS
  601.    CHAR=Asc(CHARACTER$)-((ACCESS-OLD+CODE)-(ACCESS-VERYOLD+CODE)-(Lof(1)-ACCESS))
  602.    VERYOLD=OLD
  603.    Repeat 
  604.       If CHAR>255 Then CHAR=CHAR-255
  605.       If CHAR<1 Then CHAR=CHAR+255
  606.    Until CHAR<256 and CHAR>0
  607.    OLD=CHAR
  608.    CHARACTER$=Chr$(CHAR)
  609.    If SAV=1 Then Put 1,ACCESS
  610.    If SVA=-1 Then Put 2,ACCESS
  611.    If CF=0 Then PERCENT_DONE
  612.    Next ACCESS
  613.    Close 
  614.    Bell 
  615. End Proc
  616. Procedure UNSCRAMBLE_SHEERMADNESS
  617.    OLD=0 : VERYOLD=0
  618.    Open Random 1,FILENAME$
  619.    If SAV=-1 Then Open Random 2,NEWFILE$ : Field 2,1 As CHARACTER$
  620.    FILE_LENGTH=Lof(1)
  621.    Field 1,1 As CHARACTER$
  622.    For ACCESS=1 To Lof(1)
  623.    Get 1,ACCESS
  624.    CHAR=Asc(CHARACTER$)-((OLD-(ACCESS-CODE))+(VERYOLD-(ACCESS-CODE))+(VERYOLD-OLD)+(CODE-ACCESS)-Lof(1))
  625.    VERYOLD=OLD
  626.    Repeat 
  627.       If CHAR>255 Then CHAR=CHAR-255
  628.       If CHAR<1 Then CHAR=CHAR+255
  629.    Until CHAR<256 and CHAR>0
  630.    OLD=CHAR
  631.    CHARACTER$=Chr$(CHAR)
  632.    If SAV=1 Then Put 1,ACCESS
  633.    If SAV=-1 Then Put 2,ACCESS
  634.    If CF=0 Then PERCENT_DONE
  635.    Next ACCESS
  636.    Close 
  637.    Bell 
  638. End Proc