home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
501-525
/
apd520
/
hexeditor
/
hexed.amos
/
hexed.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1991-01-02
|
31KB
|
1,147 lines
Set Buffer 96
Break Off
Close Editor : Show On
On Error Proc ERRHANDLER
Resume Label HERE
DRW$="DF0:" : Rem **** default search path ****
HERE:
INITALISE
Global DRW$,NAME$,CHANGED,EXTRA,XC,YC
HELP
Do
If Choice
On Choice(1) Proc CHKMENU1,CHKMENU2
End If
If Length(6)<>2
CURS[XC,YC]
End If
Loop
Procedure ERRHANDLER
If Errn=94 : Resume Next : End If
If Errn=97
REQUEST["File Does Not Exist","Select Cancel To Continue",1]
Resume Next
End If
If Errn=84
REQUEST["Disk is Write Protected","",1]
Else
REQUEST["Error number"+Str$(Errn),"Select Cancel to Continue",1]
End If
Resume Next
End Proc
Procedure FILEREQ[A$,M]
On Error Proc ERRHANDLER
Dim G$(128),F$(6)
DEFDRW$=DRW$
Colour Back $68F
Unpack 7 To 2
Screen Display 2,128,50,576,208
Palette $68F,$FEE,$FFF,$F00,$C,0,$333,$900
Colour 17,$F00 : Colour 18,$FCC : Colour 19,0
Curs Off : Flash Off
Ink 4
Bar 0,0 To 8,1
Bar 0,0 To 3,8
Ink 0
Bar 572,0 To 640,208
Reserve Zone 52
Ink 5,0
Pen 5 : Paper 0
If M=0 Then REQ$="LOAD" : REQ=40 Else REQ$="SAVE" : REQ=33
Set Dir 30,""
Get Rom Fonts
Set Font 1
Set Text 2
Text(((62-Len(A$))/2)*8)+10,14,A$
For T=1 To 5
F$(T)=""
Next
F$(0)="DF0:"
If Exist("df1:") : F$(1)="DF1:" : End If
If Exist("df2:") : F$(2)="DF2:" : End If
If Exist("df3:") : F$(3)="DF3:" : End If
If Exist("dh0:") : F$(4)="DH0:" : End If
If Exist("dh1:") : F$(5)="DH1:" : End If
Gosub STZONES
Gosub SEARCH
MNLOP:
TEMP=-1
Do
K$=Inkey$ : SC=Scancode : KS=Key Shift : MZ=Mouse Zone : MK=Mouse Key
If SC=69 and KS=0 : OUT$="" : Goto OUT : End If
If(MK=1 and MZ=5) or(SC=51 and(KS=16 or KS=32)) : OUT$="" : Goto OUT : End If
If(MZ=1 and MK=1) or(SC=34 and(KS=16 or KS=32))
If FILE$<>""
REQUEST["WARNING: It is NOT possible","to get back a deleted file",0]
If Param=1
If Exist(DRW$+FILE$) : Kill DRW$+FILE$
Gosub SEARCH : Goto MNLOP
Else
REQUEST["File Does Not","Exist",0]
End If
End If
End If
End If
If MZ>7 and MZ<14 and MK=1
If MZ<12
DRW$="DF"+(Str$(MZ-8)-" ")+":"
End If
If MZ=12 or MZ=13
DRW$="DH"+(Str$(MZ-12)-" ")+":"
End If
FILE$=""
Gosub SEARCH : Goto MNLOP
End If
If MK=1 and MZ=6
If FILE$<>""
OUT$=DRW$+FILE$
Else
OUT$=""
End If
Goto OUT
End If
If(MZ=4 and MK=1) or(SC=25 and(KS=16 or KS=32))
If DRW$<>""
For T=Len(DRW$)-1 To 0 Step -1
If Mid$(DRW$,T,1)="/"
DRW$=Left$(DRW$,T)
Exit
End If
If Mid$(DRW$,T,1)=":"
DRW$=Left$(DRW$,T)
Exit
End If
Next
If T<1 : DRW$="" : End If
FILE$="" : TEMP$=""
Gosub SEARCH : Goto MNLOP
End If
End If
If SC=77 : Inc POS : End If
If SC=76 : Dec POS : End If
If MZ=2 or MZ=3
If MK=1
If MZ=2 : Dec POS : End If
If MZ=3 : Inc POS : End If
Wait 7
End If
End If
If SC=78 : POS=POS+16 : End If
If SC=79 : POS=POS-16 : End If
If MZ>19 and MZ<52 : POS=MZ-20 : End If
If POS>31 : OS=OS+16 : POS=POS-16 : Gosub RELIST : Goto MNLOP : End If
If POS<0 and OS>15 : OS=OS-16 : POS=POS+16 : Gosub RELIST : Goto MNLOP : End If
If POS>FLAG-OS-1 : POS=FLAG-OS-1 : End If
If POS<0 : POS=0 : End If
If POS<>TEMP
If TEMP>-1
X1=15 : Y1=3
If TEMP>15
X1=42 : Y1=-13
End If
Locate X1,TEMP+Y1
Print Left$(G$(TEMP+OS),26)
End If
X1=15 : Y1=3
If POS>15
X1=42 : Y1=-13
End If
Locate X1,POS+Y1
Pen 2 : Paper 4 : TEMP=POS
Print Left$(G$(POS+OS),26)
TEMP$=G$(POS+OS)
Pen 5 : Paper 0
End If
If EDLIN>0
If(MZ<>7 and MK=1) or SC=67 or SC=68
EDLIN=0
Text 165,168,Left$(DRW$+FILE$+Space$(48),48)
If Asc(Right$(ALL$,1))=58 or Asc(Right$(ALL$,1))=47
DRW$=ALL$ : Gosub SEARCH : Goto MNLOP
End If
If SC=67 or SC=68
OUT$=DRW$+FILE$ : Goto OUT
End If
End If
End If
If(Mouse Click=1 and Mouse Zone>19) or Asc(K$)=13
If FILE$<>Left$(TEMP$,Instr(TEMP$," ")-1)
If Left$(TEMP$,5)="(Dir)"
DRW$=DRW$+Mid$(TEMP$,7,Instr(TEMP$," ")-7)+"/"
FILE$="" : TEMP$=""
Gosub SEARCH : Goto MNLOP
Else
FILE$=Left$(TEMP$,Instr(TEMP$," ")-1)
End If
Else
If FILE$<>""
OUT$=DRW$+FILE$
End If
Goto OUT
End If
Text 165,168,Left$(DRW$+FILE$+Space$(48),48)
End If
If SC=REQ
If KS=16 or KS=32
OUT$=DRW$+FILE$ : Goto OUT
End If
End If
If(MZ=7 and MK=1) or EDLIN>0 or(SC=35 and(KS=16 or KS=32))
ALL$=DRW$+FILE$ : EDLIN=1
If Instr("`1234567890-=\~!@#$%^&*()_+|qwertyuiop[]{}asdfghjkl;':zxcvbnm,./<>? ",Lower$(K$))=0 : K$="" : End If
ALL$=ALL$+K$
If SC=65 : ALL$=Left$(ALL$,Len(ALL$)-1) : End If
Text 165,168,ALL$+" "
Ink 3 : Bar 165+(8*Len(ALL$)),162 To 166+(8*Len(ALL$)),169 : Ink 5
For T=Len(ALL$) To 0 Step -1
If Mid$(ALL$,T,1)="/"
DRW$=Left$(ALL$,T)
Exit
End If
If Mid$(ALL$,T,1)=":"
DRW$=Left$(ALL$,T)
Exit
End If
Next
If T<1 : DRW$="" : End If
FILE$=Right$(ALL$,Len(ALL$)-T)
End If
Loop
SEARCH:
CHKDSK[DRW$]
If Param=0 : DRW$=DEFDRW$ : Pop : Goto MNLOP : End If
FILE$=""
Change Mouse 5
FLAG=0 : OS=0 : POS=0
Ink 0 : Bar 114,22 To 550,152 : Ink 5,0
Text 165,168,Left$(DRW$+FILE$+Space$(48),48)
G$(0)=Dir First$(DRW$)
For T=0 To 128
If T>0
G$(T)=Dir Next$
End If
Gosub CONVERT
If G$(T)="" : If FLAG=0 : FLAG=T : End If : End If
Next
Gosub RELIST
Change Mouse 4
Return
CONVERT:
If G$(T)<>""
If Left$(G$(T),1)="*"
G$(T)="(Dir) "+Mid$(G$(T),2,30)
Else
G$(T)=Mid$(G$(T),2,29)
End If
End If
Return
RELIST:
Ink 0 : Bar 114,22 To 550,152 : Ink 5,0
Reserve Zone
Gosub STZONES
X1=15 : Y1=3
For T=20 To 51
If T+OS<FLAG+20
If G$(T+OS-20)<>""
Print At(X1,Y1);Zone$(Left$(G$(T+OS-20),26),T)
Inc Y1
End If
If Y1>18 : X1=42 : Y1=3 : End If
End If
Next
Return
STZONES:
Set Font 1 : Set Text 2
Reserve Zone 52
Set Zone 1,20,24 To 98,40
Set Zone 2,50,57 To 98,74
Set Zone 3,50,82 To 98,99
Set Zone 4,18,109 To 98,125
Set Zone 5,18,133 To 98,149
Set Zone 6,18,157 To 98,173 : Text 38,168,REQ$
Set Zone 7,118,158 To 552,174
N=0
For T=0 To 5
If F$(T)<>""
If N=0 : X=28 : X1=88 : End If
If N=1 : X=118 : X1=188 : End If
If N=2 : X=208 : X1=276 : End If
If N=3 : X=296 : X1=364 : End If
If N=4 : X=386 : X1=454 : End If
If N=5 : X=476 : X1=544 : End If
Text X+16,189,F$(T)
Set Zone T+8,X,179 To X1,194
Inc N
End If
Next
Set Font 2
Return
OUT:
For X=0 To 127
If Upper$(Left$(G$(X),25))=Upper$(Left$("(Dir) "+FILE$+Space$(19),25))
DRW$=OUT$+"/" : Gosub SEARCH : Goto MNLOP
End If
Next
If Asc(Right$(OUT$,1))=58 or Asc(Right$(OUT$,1))=47
OUT$=""
End If
Screen Close 2
End Proc[OUT$]
Procedure HEXPRINT
On Error Proc ERRHANDLER
If NAME$<>""
REQUEST["Print Hex and ASCII","Please Set Paper To Top Of Form",0]
If Param=0 : Pop Proc : End If
MSG["****** Press Esc To Abort Printing ******"]
Lprint "Name. ";NAME$
Lprint "File Size. ";Length(6)-EXTRA
Lprint
For X1=0 To(Length(6)-EXTRA)/16
If Inkey$=Chr$(27) : Lprint "" : Pop Proc : End If
Gosub CALC3
Next
Else
REQUEST["File Must","Be Loaded First",1]
End If
MSG["|"]
Lprint : Lprint
Pop Proc
CALC3:
A$=""
Lprint Right$("00000"+Str$(X1)-" ",6);" ";
For Y1=0 To 15
B=Start(6)+(16*X1)+Y1
BYTE=Peek(B)
If B<Start(6)+Length(6)
Lprint Hex$(BYTE,2)-"$"+" ";
A$=A$+Chr$(BYTE)
Else
A$=A$+" "
Lprint " ";
End If
Pen 1
If Y1=3 or Y1=7 or Y1=11
Lprint " ";
End If
Next
FILTER2[A$]
Lprint " ";Param$;
Return
End Proc
Procedure TEXPRINT
On Error Proc ERRHANDLER
If NAME$<>""
REQUEST["Print ASCII (Unformatted)","Please Set Paper To Top Of Form",0]
If Param=0 : Pop Proc : End If
MSG["****** Press Esc To Abort Printing ******"]
Lprint "Name. ";NAME$
Lprint "File Size. ";Length(6)-EXTRA
Lprint
For X1=0 To(Length(6)-EXTRA)
If Inkey$=Chr$(27) : Lprint "" : Pop Proc : End If
FILTER2[Chr$(Peek(Start(6)+X1))]
Lprint Param$;
Next
Else
REQUEST["File Must","Be Loaded First",1]
End If
MSG["|"]
End Proc
Procedure FTEXPRINT
On Error Proc ERRHANDLER
If NAME$<>""
REQUEST["Print ASCII (Formatted)","Please Set Paper To Top Of Form",0]
If Param=0 : Pop Proc : End If
MSG["****** Press Esc To Abort Printing ******"]
For X1=0 To(Length(6)-EXTRA)
BYTE$=Chr$(Peek(Start(6)+X1))
If Instr(" `1234567890-=\~!@#$%^&*()_+|qwertyuiop{}[]asdfghjkl;':zxcvbnm,./<>?"+Chr$(34)+Chr$(13)+Chr$(10),Lower$(BYTE$))=0 : BYTE$="" : End If
If Inkey$=Chr$(27) : Lprint "" : Pop Proc : End If
If BYTE$=Chr$(10) : Lprint Chr$(13); : End If
If BYTE$<>""
If TEMP$=""
Lprint
End If
End If
Lprint BYTE$;
TEMP$=BYTE$
Next
Else
REQUEST["File Must","Be Loaded First",1]
End If
MSG["|"]
End Proc
Procedure CURS[X,Y]
Shared OFFSET
On Error Proc ERRHANDLER
If Windon=1 : Wind Close : End If
Paper 0
Wind Open 1,8,16,80,29,0
Window 2 : Curs Off
Paper 4
Window 1 : Curs Off
Paper 0 : Clw
MAIN:
Window 2
Pen 3
Print At(37,0);Left$(NAME$+Space$(25),25);
Print At(69,);Left$(Str$(Length(6)-EXTRA)-" "+Space$(9),10)
Window 1
Pen 1
Set Curs 192,192,192,192,192,192,192,192
FRE=Free
If OFFSET<0 Then OFFSET=0
If OFFSET>Length(6)/16-27 Then OFFSET=Length(6)/16-27
Clw : Curs Off
For X1=Length(6)-EXTRA To Length(6)
If Peek(X1+Start(6))>0 : EXTRA=Length(6)-X1-1 : End If
Next
For X1=0 To 27
Gosub CALC
Next
MSG["|"]
If X>63
ACURS[X,Y]
Wind Close
Pop Proc
End If
Dec X1
Do
Curs On
If Choice
On Choice(1) Proc CHKMENU1,CHKMENU2
Exit
End If
K$=Inkey$ : SC=Scancode : KS=Key Shift
If K$=Chr$(27)
ACURS[64,Y]
Wind Close
Pop Proc
End If
If SC=0
If COUNT>300
MSG["|"]
COUNT=0
Else
Inc COUNT
End If
Else
MSG["|"]
End If
If SC=78 : Inc X : End If
If SC=79
Dec X
If X<8
Dec Y : X=60
End If
If X=10 or X=13 or X=16 or X=24 or X=27 or X=30 or X=38 or X=41 or X=44 or X=52 or X=55 or X=58
Dec X
End If
If X=21 or X=35 or X=49
X=X-3
End If
End If
If SC=77
Curs Off
If KS=8
OFFSET=Length(6)/16
Goto MAIN
End If
If KS=16 or KS=32
OFFSET=OFFSET+28
Goto MAIN
End If
If KS=64 or KS=128
OFFSET=OFFSET+280
Goto MAIN
End If
Inc Y : Clear Key
End If
If SC=76
Curs Off
If KS=8
OFFSET=0
Goto MAIN
End If
If KS=16 or KS=32
OFFSET=OFFSET-28
Goto MAIN
End If
If KS=64 or KS=128
OFFSET=OFFSET-280
Goto MAIN
End If
Dec Y : Clear Key
End If
If Mouse Key=1
XC=X Text((X Mouse-111)*2) : YC=Y Text(Y Mouse-40)
If XC>63 and XC<80
ACURS[XC,YC]
Wind Close
Pop Proc
End If
If XC>7 and XC<61
X=XC : Y=YC
End If
End If
If SC=70 and(KS=16 or KS=32) and EXTRA>0
TELL["How Many Bytes To Insert ?"]
If Param=0 : Goto MAIN : End If
NO=Param : MSG["****** Inserting Byte(s) ******"]
If NO>EXTRA : NO=EXTRA : End If
For X1=Start(6)+Length(6) To BYTE+NO Step -1
Poke X1,Peek(X1-NO)
Next
For X1=0 To NO-1
Poke BYTE+X1,0
Next
Clear Key : CHANGED=1
EXTRA=EXTRA-NO
Goto MAIN
End If
If SC=70 and KS=0
TELL["How Many Bytes To Delete ?"]
If Param=0 : Goto MAIN : End If
NO=Param : MSG["****** Deleting Byte(s) ******"]
If NO>Length(6)-EXTRA : NO=Length(6)-EXTRA : End If
For X1=BYTE To Start(6)+Length(6)
Poke X1,Peek(X1+NO)
Next
For X1=Start(6)+Length(6)-NO To Start(6)+Length(6)
Poke X1,0
Next
Clear Key : CHANGED=1
EXTRA=EXTRA+NO
Goto MAIN
End If
If Y<0 : Y=0
OFFSET=OFFSET-28
If OFFSET>-28
Locate 0,27 : Print Space$(80);
Locate 0,0
Vscroll 1
Gosub CALC
OFFSET=OFFSET+27
Else
OFFSET=OFFSET+28
MSG["******** Start Of File ********"]
End If
End If
If K$=Chr$(13) or(KS=69 and SC=0) : Goto MAIN : End If
If X<9 : X=8 : B=1 : P=0 : End If
If X=9 : B=2 : P=0 : End If
If X=10 or X=11 : B=1 : X=11 : P=1 : End If
If X=12 : P=1 : B=2 : End If
If X=13 or X=14 : B=1 : X=14 : P=2 : End If
If X=15 : P=2 : B=2 : End If
If X=16 or X=17 : B=1 : X=17 : P=3 : End If
If X=18 : P=3 : B=2 : End If
If X>18 and X<23 : X=22 : B=1 : P=4 : End If
If X=23 : P=4 : B=2 : End If
If X=24 or X=25 : B=1 : X=25 : P=5 : End If
If X=26 : P=5 : B=2 : End If
If X=27 or X=28 : B=1 : X=28 : P=6 : End If
If X=29 : P=6 : B=2 : End If
If X=30 or X=31 : B=1 : X=31 : P=7 : End If
If X=32 : P=7 : B=2 : End If
If X>32 and X<37 : B=1 : X=36 : P=8 : End If
If X=37 : P=8 : B=2 : End If
If X=38 or X=39 : B=1 : X=39 : P=9 : End If
If X=40 : P=9 : B=2 : End If
If X=41 or X=42 : B=1 : X=42 : P=10 : End If
If X=43 : P=10 : B=2 : End If
If X=44 or X=45 : B=1 : X=45 : P=11 : End If
If X=46 : P=11 : B=2 : End If
If X>46 and X<51 : B=1 : X=50 : P=12 : End If
If X=51 : P=12 : B=2 : End If
If X=52 or X=53 : B=1 : X=53 : P=13 : End If
If X=54 : P=13 : B=2 : End If
If X=55 or X=56 : B=1 : X=56 : P=14 : End If
If X=57 : P=14 : B=2 : End If
If X=58 or X=59 : B=1 : X=59 : P=15 : End If
If X=60 : P=15 : B=2 : End If
If X>60
If Y>26
Y=27
End If
X=8 : P=0 : Inc Y
End If
If Y>27 and(SC=77 or(TEMP>0 and X=8))
OFFSET=OFFSET+1 : Y=27
If OFFSET<Length(6)/16-27
Locate 0,28 : Print Space$(80);
Locate 0,27
Gosub CALC
Else
Dec OFFSET
MSG["******** End Of File ********"]
End If
End If
Locate X,Y
BYTE=Start(6)+(OFFSET*16)+(Y*16)+P
If Y<0 : Y=0 : End If
If Instr("1234567890ABCDEF",Upper$(K$))=0 : K$="" : End If
K$=Upper$(K$)
If K$<>""
If BYTE>=Start(6) and BYTE<Start(6)+Length(6)
CHANGED=1
If B=1
B1$=Right$(Hex$(Peek(BYTE),2),1)
Poke BYTE,Val("$"+K$+B1$)
B1$=Chr$(Val("$"+K$+B1$))
FILTER[B1$]
Curs Off
Locate P+64,Y
Print Param$;
Curs On
B1$=""
End If
If B=2
B1$=Left$(Hex$(Peek(BYTE),2)-"$",1)
Poke BYTE,Val("$"+B1$+K$)
B1$=Chr$(Val("$"+B1$+K$))
FILTER[B1$]
Curs Off
Locate P+64,Y
Print Param$;
Curs On
B1$=""
End If
End If
CHANGED=1
Locate X,Y
Print K$;
Inc X
Locate X,Y
End If
TEMP=SC
Loop
Wind Close
Pop Proc
CALC:
A$=""
Print Right$("00000"+Str$(X1+OFFSET)-" ",6);" ";
For Y1=0 To 15
B=Start(6)+(16*X1)+Y1+(OFFSET*16)
BYTE=Peek(B)
If B>=Start(6)+Length(6)-EXTRA Then Pen 7 Else Pen 1
If B<Start(6)+Length(6)
Print Hex$(BYTE,2)-"$"+" ";
A$=A$+Chr$(BYTE)
Else
A$=A$+" "
Print " ";
End If
Pen 1
If Y1=3 or Y1=7 or Y1=11
Print " ";
End If
Next
FILTER[A$]
Print " ";Param$;
Return
End Proc
Procedure ACURS[X,Y]
On Error Proc ERRHANDLER
Shared OFFSET
MSG[Space$(20)+"ASCII Editing"+Space$(20)]
X1=27
Do
Curs On
If Choice
On Choice(1) Proc CHKMENU1,CHKMENU2
Exit
End If
K$=Inkey$ : SC=Scancode : KS=Key Shift
If K$=Chr$(27) : XC=8 : YC=Y : Exit : End If
BYTE=Start(6)+(OFFSET*16)+(Y*16)+(X-64)
If SC=70 and(KS=16 or KS=32) and EXTRA>0
TELL["How Many Bytes To Insert ?"]
If Param=0 : Goto MAIN : End If
NO=Param : MSG["****** Inserting Byte(s) ******"]
If NO>EXTRA : NO=EXTRA : End If
For X1=Start(6)+Length(6) To BYTE+NO Step -1
Poke X1,Peek(X1-NO)
Next
For X1=0 To NO-1
Poke BYTE+X1,0
Next
Clear Key : CHANGED=1
EXTRA=EXTRA-NO
Goto MAIN2
End If
If SC=70 and KS=0
TELL["How Many Bytes To Delete ?"]
If Param=0 : Goto MAIN : End If
NO=Param : MSG["****** Deleting Byte(s) ******"]
If NO>Length(6)-EXTRA : NO=Length(6)-EXTRA : End If
For X1=BYTE To Start(6)+Length(6)
Poke X1,Peek(X1+NO)
Next
For X1=Start(6)+Length(6)-NO To Start(6)+Length(6)
Poke X1,0
Next
Clear Key : CHANGED=1
EXTRA=EXTRA+NO
Goto MAIN2
End If
If SC=0
If COUNT>500
MSG["|"]
COUNT=0
Else
Inc COUNT
End If
Else
MSG["|"]
End If
If SC=78 : Inc X : End If
If SC=79
Dec X
If X<64
Dec Y : X=79
If Y<0
Y=0 : X=63
End If
End If
End If
If SC=77
Curs Off
If KS=8
OFFSET=Length(6)/16
Goto MAIN2
End If
If KS=16 or KS=32
OFFSET=OFFSET+28
Goto MAIN2
End If
If KS=64 or KS=128
OFFSET=OFFSET+280
Goto MAIN2
End If
Inc Y : Clear Key
End If
If SC=76
Curs Off
If KS=8
OFFSET=0
Goto MAIN2
End If
If KS=16 or KS=32
OFFSET=OFFSET-28
Goto MAIN2
End If
If KS=64 or KS=128
OFFSET=OFFSET-280
Goto MAIN2
End If
Dec Y : Clear Key
End If
If X<64 : X=79 : Dec Y : End If
If X>79
X=64 : Inc Y
End If
If Y<0 : Y=0
OFFSET=OFFSET-28
If OFFSET>-28
Locate 0,27 : Print Space$(80);
Locate 0,0
Vscroll 1
Gosub CALC2
OFFSET=OFFSET+27
Else
OFFSET=OFFSET+28
MSG["******** Start Of File ********"]
End If
End If
If Y>27 and(SC=77 or(TEMP>0 and X=64))
Inc OFFSET : Y=27
If OFFSET<Length(6)/16-27
Locate 0,28 : Print Space$(80);
Locate 0,27
Gosub CALC2
Else
Dec OFFSET
MSG["******** End Of File ********"]
End If
End If
Locate X,Y
If Mouse Key=1
XC=X Text((X Mouse-111)*2) : YC=Y Text(Y Mouse-40)
If XC>63 and XC<80
X=XC : Y=YC
End If
If XC>7 and XC<61
Pop Proc
End If
End If
If Instr(" `1234567890-=\~!@#$%^&*()_+|qwertyuiop[]{}asdfghjkl;:'zxcvbnm,./<>?"+Chr$(34)+Chr$(13),Lower$(K$))=0 : K$="" : End If
If KS>7 : K$="" : End If
If K$<>""
If K$=Chr$(13)
Print Chr$(186)
Else
Print K$;
End If
CHANGED=1
Inc X
Poke Start(6)+(OFFSET*16)+(Y*16)+(X-65),Asc(K$)
End If
TEMP=SC
Loop
Pop Proc
CALC2:
A$=""
Print Right$("00000"+Str$(X1+OFFSET)-" ",6);" ";
For Y1=0 To 15
B=Start(6)+(16*X1)+Y1+(OFFSET*16)
BYTE=Peek(B)
If B>=Start(6)+Length(6)-EXTRA Then Pen 7 Else Pen 1
If B<Start(6)+Length(6)
Print Hex$(BYTE,2)-"$"+" ";
A$=A$+Chr$(BYTE)
Else
A$=A$+" "
Print " ";
End If
Pen 1
If Y1=3 or Y1=7 or Y1=11
Print " ";
End If
Next
FILTER[A$]
Print " ";Param$;
Return
MAIN2:
XC=X : YC=Y
End Proc
Procedure TELL[A$]
Window 2
Pen 2
Set Curs 192,192,192,192,192,192,192,192
Locate 24,1
Print A$;
Do
K$=Inkey$ : SC=Scancode
Exit If K$=Chr$(13)
If Instr("1234567890",K$)=0 Then K$=""
O$=O$+K$
Wait 5
If SC=65 Then O$=Left$(O$,Len(O$)-1) : Print Cleft$;" ";
Curs Off
Locate 51,1 : Print O$;
Curs On
Loop
Curs Off
Window 1
MSG["|"]
End Proc[Val(O$)]
Procedure MSG[A$]
Window 2
Pen 2
Locate 0,1
If A$="|" : A$=Space$(79) : End If
Centre A$
Window 1
End Proc
Procedure CHKDSK[FIL$]
EX=1
DF0:
If Upper$(FIL$)="DF0:"
If Not Exist("df0:")
REQUEST["No Disk In","Drive df0:",1]
EX=Param
If EX=0 : Goto EXTCHK : End If
End If
If Exist("df0:")
Goto EXTCHK
Else
Goto DF0
End If
End If
DF1:
If Upper$(FIL$)="DF1:"
If Not Exist("df1:")
REQUEST["No Disk In","Drive df1:",1]
EX=Param
If EX=0 : Goto EXTCHK : End If
End If
If Exist("df1:")
Goto EXTCHK
Else
Goto DF1
End If
End If
If FIL$="" Then FIL$=" "
FILE:
If Not Exist(FIL$)
REQUEST["Path Or File Not Found","Select Cancel To Continue",1]
EX=Param
If EX=0 : Goto EXTCHK : End If
If Exist(FIL$)
Goto EXTCHK
Else
Goto FILE
End If
End If
EXTCHK: If EX<>0 Then EX=1
End Proc[EX]
Procedure REQUEST[A$,B$,R]
Screen Open 1,320,96,8,Hires
Screen Display 1,200,110,,
Get Palette 0
Flash Off : Curs Off : Paper 0
Cls 0
Border 0,7,2
Reserve Zone 3
Clear Key
If R=1 Then C$=" Cancel " : R$=" Retry " : CK$="C" : RK$="R"
If R=0 Then C$=" Abort " : R$=" Continue " : CK$="A" : RK$="C"
Border ,1,2
Wind Open 11,0,0,37,12,1
Pen 1 : Paper 2 : Clw : Curs Off
Print " ";
Print Border$(" System Interupt ",1)
Cdown : Cdown : Cdown
Centre Left$(A$,34)
Cdown
Centre Left$(B$,34)
PR: Pen 1
Locate 2,8 : Print Border$(Zone$(R$,1),1)
Locate 24,8 : Print Border$(Zone$(C$,2),1)
Pen 3
Locate 3,8 : Print Mid$(R$,2,1)
Locate 25,8 : Print Mid$(C$,2,1)
Do
If B$="Drive df0:" Then Gosub CHKDF0
If B$="Drive df1:" Then Gosub CHKDF1
MZ=Mouse Zone
If MZ=1
Locate 2,8 : Print Border$(R$,1)
Repeat : Gosub KECHK
If Mouse Key=1 : Goto RELOP : End If
Until Mouse Zone<>1
Goto PR
End If
If MZ=2
Locate 24,8 : Print Border$(C$,1)
Repeat : Gosub KECHK
If Mouse Key=1 : Goto CALOP : End If
Until Mouse Zone<>2
Goto PR
End If
Gosub KECHK
Loop
CHKDF0:
If Exist("df0:") Then Pop : Goto RELOP
Return
CHKDF1:
If Exist("df1:") Then Pop : Goto RELOP
Return
KECHK: K$=Upper$(Inkey$)
If K$=Chr$(13) : Pop : Goto RELOP : End If
If K$=CK$ : Pop : Goto CALOP : End If
If K$=RK$ : Pop : Goto RELOP : End If
Return
CALOP: E=-1
RELOP: E=E+1
Wind Close
Screen Close 1
End Proc[E]
Procedure INITALISE
If Screen>-1
Screen Close Screen
End If
Colour Back $68F
Screen Open 0,640,260,8,Hires
Screen Display 0,120,40,,
Change Mouse 4
DEFMENU
Palette $68F,0,$FFF,$F00,$C,$888,$333,$900
Colour 17,$F00 : Colour 18,$FCC : Colour 19,0
Flash Off
Border 0,7,2
Wind Open 2,8,0,80,2,0
Curs Off : Cls 0
Paper 0
Wind Open 1,8,16,80,29,0
Curs Off
Window 2
Paper 4
Limit Mouse 112,40 To 430,295
Pen 2 : Clw
Print " < HexEd V 1.1 > FILE. SIZE.";
Key Speed 20,5
Reserve As Work 6,1
End Proc
Procedure GTFILE[NME$]
On Error Proc ERRHANDLER
Shared OFFSET
CHKDSK["df0:"]
CHKDSK[NME$]
If Param=0 Then Pop Proc
If CHANGED=1
REQUEST["File Has Not Been Saved","Do You Want To Discard Changes",0]
If Param=0 : Pop Proc : End If
End If
Open In 1,NME$
EXTRA=128
X=Lof(1)
If X<433
EXTRA=446-X
End If
X=X+EXTRA
Close 1
MSG["**** Loading "+NME$+" ****"]
Erase 6
Reserve As Work 6,X
Bload NME$,6
OFFSET=0 : CHANGED=0
End Proc
Procedure PTFILE[NME$]
On Error Proc ERRHANDLER
CHKDSK["df0:"]
If Param=0 Then Pop Proc
If NME$<>""
MSG["**** Saving "+NME$+" ****"]
Bsave NME$,Start(6) To Start(6)+Length(6)-EXTRA
CHANGED=0
MSG["|"]
End If
End Proc
Procedure HELP
Screen Open 1,576,224,8,Hires
Screen Display 1,128,48,,
Get Palette 0
Flash Off : Curs Off : Paper 0
Cls 0
Clear Key
Border ,1,2
Wind Open 10,0,0,68,28,1
Pen 1 : Paper 2 : Clw : Curs Off
Print " ";
Print Border$(" HexEd. Version 1.1 - INSTRUCTIONS - M. Warren. 1991 ",1)
Cdown : Cdown
Print " EDITING KEYS -"
Print At(7,);"Cursor keys - Move around file (One character)"
Print At(7,);"Cntrl + Cursor keys - To top or bottom of file"
Print At(7,);"Alt + Cursor keys - Up or down one page (28 lines)"
Print At(7,);"Amiga + Cursor keys - Up or down 10 pages"
Print At(7,);"Esc Key - Switch between Hex & ASCII editing "
Print At(7,);"Del Key (Delete) - Enter number of bytes to delete"
Print At(7,);"Alt + Del (Insert) - Enter number of bytes to insert"
Print At(7,);"NOTE: Insert & Delete should be used carefully" : Print
Print " MENU SHORCUTS -"
Print At(7,);"F1. Load file F6. Print Hex & ASCII"
Print At(7,);"F2. Save file F7. Print Unformatted ASCII"
Print At(7,);"F3. Save file as... F8. Print Formatted ASCII"
Print At(7,);"F10. Quit program NOTE: File must be standard"
Print At(7,);"Help. This requestor ASCII to format properly"
Print : Print " FILE REQUESTOR -"
Print At(7,);"All Functions may use the mouse or keyboard"
Print At(7,);"For LOAD, FILE, DELETE etc. use Alt + first letter"
Cdown : Centre "< Click Mouse To Continue >"
Do
K$=Inkey$
Exit If K$<>""
Exit If Mouse Key
Loop
Wind Close
Screen Close 1
End Proc
Procedure FILTER[ST$]
If ST$="" Then ST$=" "
TX$="`1234567890-=\qwertyuiop[]asdfghjkl;'zxcvbnm,./ !~@#$%^&*()_+|{}:<>?"+Chr$(34)
For X=1 To Len(ST$)
TEMP$=Mid$(ST$,X,1)
If Instr(TX$,Lower$(TEMP$))=0 Then TEMP$=Chr$(186)
OUT$=OUT$+TEMP$
Next
End Proc[OUT$]
Procedure FILTER2[ST$]
If ST$="" Then ST$=" "
TX$="`1234567890-=\qwertyuiop[]asdfghjkl;'zxcvbnm,./ !~@#$%^&*()_+|{}:<>?"+Chr$(34)
For X=1 To Len(ST$)
TEMP$=Mid$(ST$,X,1)
If Instr(TX$,Lower$(TEMP$))=0 Then TEMP$="."
OUT$=OUT$+TEMP$
Next
End Proc[OUT$]
Procedure CHKMENU1
Menu Off
If Choice(1)=1
If Choice(2)=2
CHKDSK[NAME$]
If Param=1 : PTFILE[NAME$] : End If
End If
If Choice(2)=3
CHKDSK["df0:"]
If Param=1
FILEREQ["<<< SAVE FILE AS >>>",1]
NME$=Param$
If NME$<>"" : PTFILE[NME$] : NAME$=NME$ : End If
End If
End If
If Choice(2)=5
REQUEST["Are You Sure","You Want To Quit",0]
E=Param
If E=1
If CHANGED>0
REQUEST["File Has Been Modified","Are You Sure",0]
E=Param
End If
End If
If E=1 : Run "MenuProgram" : End If
End If
If Choice(2)=4
HELP
End If
If Choice(2)=1
FILEREQ["<<< LOAD FILE >>>",0]
NME$=Param$
If NME$<>""
NAME$=NME$
GTFILE[NAME$]
End If
End If
End If
Clear Key
Menu On
End Proc
Procedure CHKMENU2
Menu Off
If Choice(1)=2
If Choice(2)=1
HEXPRINT
End If
If Choice(2)=2
TEXPRINT
End If
If Choice(2)=3
FTEXPRINT
End If
End If
Clear Key
Menu On
End Proc
Procedure DEFMENU
Menu$(1)="System "
Menu$(1,1)="Load File...... F1 "
Menu$(1,2)="Save File...... F2 "
Menu$(1,3)="Save as........ F3 "
Menu$(1,4)="About.......... Help "
Menu$(1,5)="Quit........... F10 "
Menu$(2)="Print "
Menu$(2,1)="Print HEXADECIMAL....... F6 "
Menu$(2,2)="Print ASCII Unformated.. F7 "
Menu$(2,3)="Print ASCII Formated.... F8 "
Menu On
Menu Key(1,1) To 80
Menu Key(1,2) To 81
Menu Key(1,3) To 82
Menu Key(1,4) To 95
Menu Key(1,5) To 89
Menu Key(2,1) To 85
Menu Key(2,2) To 86
Menu Key(2,3) To 87
End Proc