Я как-то попробовал, ничего не получилось. Вот это:
Код:
/* SCLView */
parse arg scl
if scl='?' then do
options prompt 'FILE/A: '
parse pull scl
end
if scl='' then do
say 'required argument missing'
say 'No file to view'
exit
end
scl=strip(scl,,' "')
if ~open(file,scl,'R') then do
say 'No file to view'
exit
end
if readch(file,8)~='SINCLAIR' then do
say 'File is not SCL format'
exit
end
say 'SCLView (R) View Utility Version 1.0 03-Dec-2000'
say ' (c) 2000 Alex Kovrigin, 2:5000/28.19'
say
say 'Name Start Length Sector'
say '---------- ----- ------ ------'
do c2d(readch(file))
say readch(file,8) readch(file)||right(c2d(reverse(readch(file,2))),7)||right(c2d(reverse(readch(file,2))),8)||right(c2d(readch(file)),8)
end
На Амиге пашет как танк.
Или так:
Код:
/* TAPView */
PARSE ARG TAPFILE
IF TAPFILE='?' THEN DO
OPTIONS PROMPT 'FILE/A: '
PARSE PULL TAPFILE
END
IF TAPFILE='' THEN DO
SAY 'required argument missing'
SAY 'No file to view'
EXIT
END
TAPFILE=STRIP(TAPFILE,,' "')
IF ~OPEN(FILE,TAPFILE,'R') THEN DO
SAY 'No file to view'
EXIT
END
FILELENGTH=SEEK(FILE,0,'E')
SEEK(FILE,0,'B')
SAY 'TAPView (R) View Utility Version 1.0 10-Dec-2000'
SAY ' (c) 2000 Alex Kovrigin, 2:5000/28.19'
SAY
SAY 'Type Name Length Start Size'
SAY '--------------- ---------- ------ ----- -----'
LOOP:
BLOCKLENGTH=C2D(REVERSE(READCH(FILE,2)))-2
FLAG=C2D(READCH(FILE,1))
IF FLAG=0&BLOCKLENGTH=17 THEN DO
TYPE=C2D(READCH(FILE,1))
SELECT
WHEN TYPE=0 THEN TYPE='Programm'
WHEN TYPE=1 THEN TYPE='Number Array'
WHEN TYPE=2 THEN TYPE='Character Array'
WHEN TYPE=3 THEN TYPE='Bytes'
OTHERWISE
END
NAME=READCH(FILE,10)
SIZE=C2D(REVERSE(READCH(FILE,2)))
START=C2D(REVERSE(READCH(FILE,2)))
IF TYPE='Program'&START>32767 THEN START=NONE
LENGTH=C2D(REVERSE(READCH(FILE,2)))
IF TYPE='Bytes' THEN LENGTH=''
SAY LEFT(TYPE,15)||RIGHT(NAME,12)||RIGHT(LENGTH,8)||RIGHT(START,7)||RIGHT(SIZE,7)
END
ELSE DO
SAY '-----Headerless--block-----'RIGHT(FLAG,15)||RIGHT(BLOCKLENGTH,7)
SEEK(FILE,BLOCKLENGTH)
END
IF SEEK(FILE,1)=FILELENGTH THEN EXIT
SIGNAL LOOP