;Released as public domain 28-Jan-1996 by the author Dave Dustin

	SECTION	CHOPFILE,CODE

EXECBASE	EQU	4

FORBID		EQU	-132

OPENLIBRARY	EQU	-552
CLOSELIBRARY	EQU	-414

ALLOCMEM	EQU	-198
FREEMEM		EQU	-210

FINDTASK	EQU	-294

WAITPORT	EQU	-384
GETMSG		EQU	-372
REPLYMSG	EQU	-378

***************************************
LOCK		EQU	-84
UNLOCK		EQU	-90
EXAMINE		EQU	-102

OPEN		EQU	-30
CLOSE		EQU	-36
OUTPUT		EQU	-60

READ		EQU	-42
WRITE		EQU	-48
SEEK		EQU	-66
DELETE		EQU	-72

DELAY		EQU	-198

	INCLUDE	PPBASE.I

*************************************************************************
*************************************************************************
START:
	MOVEM.L	D0/A0,-(SP)

	LEA	FILEINFO,A0
	MOVEQ	#0,D1
	MOVE.L	#192,D0	
.CLEARLOOP
	MOVE.L	D1,(A0)+
	DBRA	D0,.CLEARLOOP

	MOVEM.L	(SP)+,D0/A0
	BSR	CHECKARGUMENTS

	MOVE.L	(EXECBASE).W,A6
	SUB.L	A1,A1
	JSR	FINDTASK(A6)
	MOVE.L	D0,A4
	TST.L	172(A4)
	BNE.S	.FROMCLI

	LEA	92(A4),A0
	JSR	WAITPORT(A6)
	LEA	92(A4),A0
	JSR	GETMSG(A6)
	MOVE.L	D0,WBMESSAGE

.FROMCLI
	LEA	DOSLIBRARY(PC),A1
	MOVEQ	#0,D0
	JSR	OPENLIBRARY(A6)
	MOVE.L	D0,DOSBASE
	MOVE.L	D0,A1
	JSR	CLOSELIBRARY(A6)

	LEA	PPLIB(PC),A1
	MOVEQ	#PPVERSION,D0
	JSR	OPENLIBRARY(A6)
	MOVE.L	D0,PPBASE

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	#WINDOWNAME,D1
	MOVE.L	#1006,D2
	JSR	OPEN(A6)
	TST.L	D0
	BEQ	WINDOWERROR
	MOVE.L	D0,WINDOWHANDLE

	MOVE.L	#INFO,D2
	MOVEQ	#INFOLENGTH,D3
	BSR	TYPETEXT

	TST.B	ARGUMENTSTATUS
	BNE.S	.NAMEOK

	MOVE.L	#USAGE,D2
	MOVEQ	#USAGELENGTH,D3
	BSR	TYPETEXT
	BRA	LOADEXIT

.NAMEOK
	LEA	NAMESPACE,A0
	MOVEQ.L	#0,D0
	BSR	READFILE
	BEQ.S	LOADOK

	CMP.B	#3,D0
	BNE.S	.NOTREAD
	MOVE.L	#READERROR,D2
	MOVEQ	#READERRORLENGTH,D3
	BRA.S	TYPEERROR

.NOTREAD
	CMP.B	#2,D0
	BNE.S	.NOTNOMEM
	MOVE.L	#MEMERROR,D2
	MOVEQ	#MEMERRORLENGTH,D3
	BRA.S	TYPEERROR

.NOTNOMEM
	MOVE.L	#LOADERROR,D2
	MOVEQ	#LOADERRORLENGTH,D3

TYPEERROR:
	BSR	TYPETEXT
	BRA.S	LOADEXIT

**************************************
LOADOK:
	BSR	BACKUPLOG
	TST.L	D0
	BNE.S	BACKERROR

	MOVE.L	#BACKOK,D2
	MOVEQ	#BACKOKLENGTH,D3
	BSR	TYPETEXT

	CMP.B	#0,NUMBEROFCHARS
	BEQ.S	NOTRIM

	BSR	CALCTRIM
	BSR	DOTRIM
	TST.L	D0
	BNE.S	BACKERROR

	MOVE.L	#TRIMOK,D2
	MOVEQ	#TRIMOKLENGTH,D3
	BSR.S	TYPETEXT

NOTRIM:
	BTST.B	#1,CRUNCHFLAG
	BEQ.S	BACKERROR
	BSR	CRUNCHBACKUP
	TST.L	D0
	BNE.S	BACKERROR

	BTST.B	#2,CRUNCHFLAG
	BEQ.S	BACKERROR
	BSR	DELETEFILE

**************************************
BACKERROR:
	MOVE.L	(EXECBASE).W,A6
	MOVE.L	MEMSTART(PC),A1
	MOVE.L	MEMSIZE(PC),D0
	JSR	FREEMEM(A6)

LOADEXIT:
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	#200,D1
	JSR	DELAY(A6)

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	WINDOWHANDLE(PC),D1
	JSR	CLOSE(A6)

WINDOWERROR:
	MOVE.L	(EXECBASE).W,A6
	TST.L	PPBASE
	BEQ.S	.NOPP
	MOVE.L	PPBASE(PC),A1
	JSR	CLOSELIBRARY(A6)
	
.NOPP
	MOVE.L	(EXECBASE).W,A6
	TST.L	WBMESSAGE
	BEQ.S	.NOWB
	MOVE.L	WBMESSAGE(PC),A1
	JSR	FORBID(A6)
	JSR	REPLYMSG(A6)
.NOWB
	MOVEQ	#0,D0
	RTS

*************************************************************************
*************************************************************************
TYPETEXT:
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	WINDOWHANDLE(PC),D1
	JSR	WRITE(A6)
	RTS

*************************************************************************
CHECKARGUMENTS:
	CMP.L	#1,D0
	BEQ.S	.EXIT
	CMP.L	#0,D0
	BEQ.S	.EXIT
	CMP.B	#'?',(A0)
	BEQ.S	.EXIT

	MOVEQ	#0,D1
	SUBQ	#2,D0
	MOVE.L	D0,ARGSIZE
	MOVE.L	A0,ARGSTART
	MOVE.B	#1,ARGUMENTSTATUS

***************************************
	LEA	NAMESPACE,A1
	LEA	NAMESPACE2,A2

.COPYLOOP
	MOVE.B	(A0)+,D1
	CMP.B	#'"',D1
	BNE.S	.NOQUOTE
	NOT.B	QUOTE
	BEQ.S	.NOCOPY
	DBRA	D0,.COPYLOOP
.NOQUOTE
	TST.B	QUOTE
	BNE.S	.QUOTEON
	CMP.B	#' ',D1
	BEQ.S	FINDTRIM
.QUOTEON
	MOVE.B	D1,(A1)+
	MOVE.B	D1,(A2)+
.NOCOPY
	DBRA	D0,.COPYLOOP
.EXIT
	RTS

***************************************
FINDTRIM:
	MOVE.L	ARGSIZE(PC),D0
	MOVE.L	ARGSTART(PC),A0
	MOVEQ	#0,D1
	MOVEQ	#0,D2
	ADD.L	D0,A0
	LEA	TRIMSPACE(PC),A1
.LOOP
	CMP.B	#'-',-(A0)
	BEQ.S	GETNUMBER
	DBRA	D0,.LOOP
	RTS

GETNUMBER:
	SUBQ	#2,D0
	ADDQ	#1,A0
.LOOP2
	MOVE.B	(A0)+,D1
	CMP.B	#' ',D1
	BEQ.S	.GOTIT
	CMP.B	#10,D1
	BEQ.S	.GOTIT
	MOVE.B	D1,(A1)+
	ADDQ	#1,D2
	CMP.B	#3,D2
	BEQ.S	.GOTIT
	DBRA	D0,.LOOP2
.GOTIT
	MOVE.B	D2,NUMBEROFCHARS

***************************************
FINDCRUNCH:
	MOVE.L	ARGSIZE(PC),D0
	MOVE.L	ARGSTART(PC),A0
	MOVEQ	#0,D1
	MOVEQ	#0,D2
.LOOP
	CMP.B	#'+',(A0)+
	BEQ.S	GETFLAG
	DBRA	D0,.LOOP
	RTS

GETFLAG:
	MOVEQ	#1,D0
.LOOP2
	MOVE.B	(A0)+,D1
	CMP.B	#' ',D1
	BEQ.S	.GOTIT
	CMP.B	#10,D1
	BEQ.S	.GOTIT
	AND.W	#65503,D1
	CMP.B	#'C',D1
	BNE.S	.NOCRUNCH
	BSET	#1,D2
.NOCRUNCH
	CMP.B	#'D',D1
	BNE.S	.NODEL
	BSET	#2,D2
.NODEL
	DBRA	D0,.LOOP2
.GOTIT
	MOVE.B	D2,CRUNCHFLAG
	RTS

*************************************************************************
BACKUPLOG:
	LEA	NAMESPACE2,A0
	MOVEQ	#0,D0
.LOOP
	MOVE.B	(A0)+,D0
	CMP.B	#0,D0
	BEQ.S	.FOUND
	CMP.B	#'.',D0
	BNE.S	.LOOP
.FOUND
	SUBQ	#1,A0
	MOVE.B	#'.',(A0)+
	MOVE.B	#'B',(A0)+
	MOVE.B	#'A',(A0)+
	MOVE.B	#'K',(A0)+
	MOVE.B	#0,(A0)

	MOVE.L	#NAMESPACE2,D1
	MOVE.L	MEMSIZE(PC),WRITESIZE
	MOVE.L	MEMSTART(PC),WRITESTART
	BSR	WRITEFILE
	TST.L	D0
	BNE.S	BACKUPERROR

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#0,D0
	RTS

BACKUPERROR:
	MOVE.L	#BACKUPTEXT,D2
	MOVEQ	#BACKUPTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#-1,D0
	RTS

*************************************************************************
CALCTRIM:
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVEQ	#0,D2
	MOVE.B	NUMBEROFCHARS(PC),D0
	SUBQ	#1,D0
	LEA	TRIMSPACE(PC),A1
.NUMBERLOOP
	LSL.L	#4,D2
	MOVE.B	(A1)+,D1
	SUB.L	#48,D1
	ADD.L	D1,D2
	DBRA	D0,.NUMBERLOOP
	MOVEQ	#0,D0

	MOVE.W	D2,D1
	AND.W	#$F000,D1
	LSR.L	#8,D1
	LSR.L	#4,D1
	MULU.W	#1000,D1
	ADD.W	D1,D0
	MOVE.W	D2,D1
	AND.W	#$0F00,D1
	LSR.L	#8,D1
	MULU.W	#100,D1
	ADD.W	D1,D0
	MOVE.W	D2,D1
	AND.W	#$00F0,D1
	LSR.L	#4,D1
	MULU.W	#10,D1
	ADD.W	D1,D0
	MOVE.W	D2,D1
	AND.W	#$000F,D1
	ADD.W	D1,D0
	MOVE.W	D0,TRIMSIZE
	RTS

*************************************************************************
DOTRIM:
	MOVE.L	MEMSTART(PC),A0
	MOVE.L	A0,A1
	MOVE.L	MEMSIZE(PC),D0
	ADD.L	D0,A0
	MOVE.L	A0,A2
	MOVEQ	#0,D0
	MOVE.W	TRIMSIZE(PC),D0
.LOOP
	CMP.L	A0,A1
	BGE.S	NOMORELINES
	CMP.B	#10,-(A0)
	BNE.S	.LOOP
	DBRA	D0,.LOOP
	ADDQ	#1,A0
	MOVE.L	A0,NEWFILESTART
	SUB.L	A0,A2
	MOVE.L	A2,NEWFILESIZE

	MOVE.L	#NAMESPACE,D1
	MOVE.L	NEWFILESIZE(PC),WRITESIZE
	MOVE.L	NEWFILESTART(PC),WRITESTART
	BSR.S	WRITEFILE
	TST.L	D0
	BNE.S	NOMORELINES

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#0,D0
	RTS

NOMORELINES:
	MOVE.L	#TRIMTEXT,D2
	MOVEQ	#TRIMTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#-1,D0
	RTS

*************************************************************************
WRITEFILE:
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	#1006,D2
	JSR	OPEN(A6)
	TST.L	D0
	BEQ.S	OPENERROR
	MOVE.L	D0,FILEHANDLE

	MOVE.L	D0,D1
	MOVE.L	WRITESTART(PC),D2
	MOVE.L	WRITESIZE(PC),D3
	JSR	WRITE(A6)

	MOVE.L	FILEHANDLE(PC),D1
	JSR	CLOSE(A6)
	MOVEQ	#0,D0
	RTS

OPENERROR:
	MOVEQ	#-1,D0
	RTS

*************************************************************************
CRUNCHBACKUP:
	TST.L	PPBASE
	BNE.S	PPBASEOK

	MOVE.L	#NOPPTEXT,D2
	MOVEQ	#NOPPTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#-1,D0
	RTS

PPBASEOK:
	MOVE.L	PPBASE(PC),A6
	MOVEQ	#CRUN_FAST,D0
	MOVEQ	#SPEEDUP_BUFFMEDIUM,D1
	SUB.L	A0,A0
	SUB.L	A1,A1
	JSR	_LVOppAllocCrunchInfo(A6)
	MOVE.L	D0,CRUNCHINFO

	MOVE.L	CRUNCHINFO(PC),A0
	MOVE.L	MEMSTART(PC),A1
	MOVE.L	MEMSIZE(PC),D0
	JSR	_LVOppCrunchBuffer(A6)

	MOVE.L	D0,CRUNCHEDSIZE
	CMP.L	#PP_BUFFEROVERFLOW,D0
	BEQ	CRUNCHERROR

	LEA	NAMESPACE2,A0
	MOVEQ	#0,D0
.LOOP
	MOVE.B	(A0)+,D0
	CMP.B	#0,D0
	BNE.S	.LOOP
.FOUND
	SUBQ	#1,A0
	MOVE.B	#'.',(A0)+
	MOVE.B	#'p',(A0)+
	MOVE.B	#'p',(A0)+
	MOVE.B	#0,(A0)

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	#NAMESPACE2,D1
	MOVE.L	#1006,D2
	JSR	OPEN(A6)
	TST.L	D0
	BEQ.S	CRUNCHERROR
	MOVE.L	D0,FILEHANDLE

	MOVE.L	PPBASE(PC),A6
	MOVE.L	FILEHANDLE(PC),D0
	MOVEQ	#CRUN_FAST,D1
	MOVEQ	#0,D2
	MOVEQ	#0,D3	
	JSR	_LVOppWriteDataHeader(A6)

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	FILEHANDLE(PC),D1
	MOVE.L	MEMSTART(PC),D2
	MOVE.L	CRUNCHEDSIZE(PC),D3
	JSR	WRITE(A6)

	MOVE.L	FILEHANDLE(PC),D1
	JSR	CLOSE(A6)

	MOVE.L	#PPOKTEXT,D2
	MOVEQ	#PPOKTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	PPBASE(PC),A6
	MOVE.L	CRUNCHINFO(PC),A0
	JSR	_LVOppFreeCrunchInfo(A6)

	MOVEQ	#0,D0
	RTS

CRUNCHERROR:
	MOVE.L	PPBASE(PC),A6
	MOVE.L	CRUNCHINFO(PC),A0
	JSR	_LVOppFreeCrunchInfo(A6)

	MOVE.L	#PPERRTEXT,D2
	MOVEQ	#PPERRTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#-1,D0
	RTS

*************************************************************************
DELETEFILE:
	LEA	NAMESPACE,A0
	MOVEQ	#0,D0
.LOOP
	MOVE.B	(A0)+,D0
	CMP.B	#0,D0
	BEQ.S	.FOUND
	CMP.B	#'.',D0
	BNE.S	.LOOP
.FOUND
	SUBQ	#1,A0
	MOVE.B	#'.',(A0)+
	MOVE.B	#'B',(A0)+
	MOVE.B	#'A',(A0)+
	MOVE.B	#'K',(A0)+
	MOVE.B	#0,(A0)

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	#NAMESPACE,D1
	JSR	DELETE(A6)
	CMP.L	#-1,D0
	BNE.S	DELERROR

	MOVE.L	#DELTEXT,D2
	MOVEQ	#DELTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#0,D0
	RTS

DELERROR:
	MOVE.L	#DELERRTEXT,D2
	MOVEQ	#DELERRTEXTLENGTH,D3
	BSR	TYPETEXT

	MOVE.L	(EXECBASE).W,A6
	MOVEQ	#-1,D0
	RTS

*************************************************************************
READFILE:
	MOVE.L	#0,MEMSIZE
	MOVE.L	#0,MEMSTART

*******************
	MOVEQ	#1,D4
	LEA	FILENAME(PC),A1
	MOVE.L	A0,(A1)
	LEA	MEMTYPE(PC),A1
	MOVE.L	D0,(A1)

*******************
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	FILENAME(PC),D1
	MOVEQ	#-2,D2
	JSR	LOCK(A6)
	BEQ	.ERROR
	LEA	FILELOCK(PC),A0
	MOVE.L	D0,(A0)

*******************
	MOVE.L	FILELOCK(PC),D1
	LEA	FILEINFO,A0
	MOVE.L	A0,D2
	JSR	EXAMINE(A6)

*******************
	MOVE.L	FILEINFO+124,D0
	LEA	MEMSIZE(PC),A0
	MOVE.L	D0,(A0)

*******************
	MOVE.L	FILELOCK(PC),D1
	JSR	UNLOCK(A6)

*******************
	MOVE.L	FILENAME(PC),D1
	MOVE.L	#1005,D2
	JSR	OPEN(A6)
	BEQ.S	.ERROR
	LEA	FILEHANDLE(PC),A0
	MOVE.L	D0,(A0)

*******************
	MOVEQ	#3,D4
	MOVE.L	FILEHANDLE(PC),D1
	MOVEQ	#0,D2
	MOVEQ	#-1,D3
	JSR	SEEK(A6)

*******************
	MOVEQ	#2,D4
	MOVE.L	(EXECBASE).W,A6
	MOVE.L	MEMSIZE(PC),D0
	MOVE.L	MEMTYPE(PC),D1
	JSR	ALLOCMEM(A6)
	BEQ.S	.ALLOCERROR
	LEA	MEMSTART(PC),A0
	MOVE.L	D0,(A0)

*******************
	MOVEQ	#3,D4
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	FILEHANDLE(PC),D1
	MOVE.L	MEMSTART(PC),D2
	MOVE.L	FILEINFO+124,D3
	JSR	READ(A6)
	BEQ.S	.LOADERROR

*******************
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	FILEHANDLE(PC),D1
	JSR	CLOSE(A6)
	MOVEQ	#0,D4
.ERROR
	MOVE.L	D4,D0
	RTS

*******************
.LOADERROR
	MOVE.L	(EXECBASE).W,A6
	MOVE.L	MEMSTART(PC),A1
	MOVE.L	MEMSIZE(PC),D0
	MOVE.L	(EXECBASE).W,A6
	JSR	FREEMEM(A6)

.ALLOCERROR
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	FILEHANDLE(PC),D1
	JSR	CLOSE(A6)

	MOVE.L	D4,D0
	RTS

*************************************************************************
*************************************************************************
*************************************************************************
ARGUMENTSTATUS:
	DC.B	0
CRUNCHFLAG:
	DC.B	0
DOSLIBRARY:
	DC.B	'dos.library',0
PPLIB:
	PPNAME
NUMBEROFCHARS:
	DC.B	0
QUOTE:
	DC.B	0
WINDOWNAME:
	DC.B	'CON:20/20/600/100/ChopFile V1.1',0
	EVEN

***************************************
TRIMSIZE:
	DC.W	0

***************************************
ARGSIZE:
	DC.L	0
ARGSTART:
	DC.L	0
CRUNCHINFO:
	DC.L	0
CRUNCHEDSIZE:
	DC.L	0
DOSBASE:
	DC.L	0
FILEHANDLE:
	DC.L	0
FILELOCK:
	DC.L	0
FILENAME:
	DC.L	0
MEMSIZE:
	DC.L	0
MEMSTART:
	DC.L	0
MEMTYPE:
	DC.L	0
NEWFILESTART:
	DC.L	0
NEWFILESIZE:
	DC.L	0
PPBASE:
	DC.L	0
TRIMSPACE:
	DC.L	0
WBMESSAGE:
	DC.L	0
WINDOWHANDLE:
	DC.L	0
WRITESIZE:
	DC.L	0
WRITESTART:
	DC.L	0

*************************************************************************
*************************************************************************
INFO:
	DC.B	'[33;1mChopFile V1.1[0m'
	DC.B	'     © 1992  KAOS Productions',10,10
INFOLENGTH	EQU	*-INFO

*******************
USAGE:
	DC.B	'Usage:',10
	DC.B	'       [1mCHOPFILE[0m <path/logfile> -[# of lines] +CD',10,10,0
USAGELENGTH	EQU	*-USAGE

*******************
LOADERROR:
	DC.B	'[3mThere was a problem finding the log file.[0m',10,0
LOADERRORLENGTH	EQU	*-LOADERROR

*******************
MEMERROR:
	DC.B	'[3mThere is not enough memory to load the log file.[0m',10,0
MEMERRORLENGTH	EQU	*-MEMERROR

*******************
READERROR:
	DC.B	'[3mThere was a problem loading the log file.[0m',10,0
READERRORLENGTH	EQU	*-READERROR

*******************
BACKUPTEXT:
	DC.B	'[3mThere was a problem generating the backup log file.[0m',10,0
BACKUPTEXTLENGTH	EQU	*-BACKUPTEXT

*******************
BACKOK:
	DC.B	'[1mThe log file has been backed up correctly.[0m',10,0
BACKOKLENGTH	EQU	*-BACKOK

*******************
PPERRTEXT:
	DC.B	'[3mThere was a problem crunching the backup log file.[0m',10,0
PPERRTEXTLENGTH	EQU	*-PPERRTEXT

*******************
PPOKTEXT:
	DC.B	'[1mThe backup log file has been crunched and saved correctly.[0m',10,0
PPOKTEXTLENGTH	EQU	*-PPOKTEXT

*******************
DELERRTEXT:
	DC.B	'[3mThere was a problem removing the backup log file.[0m',10,0
DELERRTEXTLENGTH	EQU	*-DELERRTEXT

*******************
DELTEXT:
	DC.B	'[1mThe backup log file has been removed from the directory.[0m',10,0
DELTEXTLENGTH	EQU	*-DELTEXT

*******************
TRIMTEXT:
	DC.B	'[3mThere was a problem triming the log file.[0m',10,0
TRIMTEXTLENGTH	EQU	*-TRIMTEXT

*******************
TRIMOK:
	DC.B	'[1mThe log file has been reduced to the number of lines you wanted.[0m',10,0
TRIMOKLENGTH	EQU	*-TRIMOK
	EVEN

*******************
NOPPTEXT:
	DC.B	'[1mThe [4mpowerpacker.library[0;1m was not found in the LIBS: directory.[0m',10,0
NOPPTEXTLENGTH	EQU	*-NOPPTEXT
	EVEN

*************************************************************************
*************************************************************************
	SECTION	TEXTSPACE,BSS

	CNOP	0,4
FILEINFO:
	DS.B	260
NAMESPACE:
	DS.B	256
NAMESPACE2:
	DS.B	256
