DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b37fc5a96⟧ TextFile

    Length: 3840 (0xf00)
    Types: TextFile
    Names: »FILNAM.SRC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »FILNAM.SRC« 

TextFile

;DECODES A STRING FROM THE TEXT BUFFER AS A FILE SPECIFICATION
;
	NAME FILNAM
	ENTRY FILNAM
	EXT TIN,NAMERR,TXTYP,POPHDB,PUSHBD
	INCLUDE DEFLT.SRC
;
;
;IT STORES THE CORRESPONDING CP/M FILE CONTROL BLOCK (FCB) IN A 34 BYTE
;BLOCK STARTING AT HL.  THE 34TH BYTE IS THE DRIVE NUMBER AND IS NOT
;LOOKED AT BY CP/M (IT IS LOOKED AT BY SELDSK).
FILNAM	CALL	PUSHBD		;SAVE ALL REGISTERS EXCEPT A
	PUSH	PSW
	MVI	M,0		; MAKE FIRST BYTE OF FCB ZERO.
	DCX	H
	DCX	H
	DCX	H		; FILE BUFFER ADDRESS
	MVI	M,0		; SET ALL FLAGS TO ZERO
	LXI	B,4
	DAD	B
	PUSH	H		; HL POINTS TO START OF FCB NAME FIELD.
;FILL THE NAME FIELD WITH SPACES (THE DEFAULT CHARACTER).
	MVI	B,11		; 8 CHARACTERS FOR FILE NAME + 3 FOR FILE TYPE.
DEFSP	MVI	M,' '		; STUFF A SPACE.
	INX	H
	DJNZ	DEFSP

;MAKE THE REST OF THE FCB ZERO.
	MVI	B,DEVNUM-11-1	;NUMBER OF BYTES TO ZERO.
ZEROLP	MVI	M,0
	INX	H
	DJNZ	ZEROLP

SKIPSP	CALL	FTIN		; GET A CHARACTER FROM THE TEXT BUFFER.
	JRZ	SKIPSP		; IGNORE SPACES.
	JRC	FILNER		; Error if no characters in buffer.
; CHECK FOR LST: OR CON:
	PUSH	PSW		; SAVE CHAR.
	PUSH	H
	LHLD	6		; HL POINTS TO TOP OF MEMORY
	LXI	D,-GETP
	DAD	D		; TEXT-IN POINTER
	MVI	A,3
	ADD	M
	MOV	E,A
	MVI	D,0
	DAD	D		; FOURTH CHAR OF FILE NAME
	MOV	A,M
	CPI	':'		; IS IT A ':'
	POP	H
	JRZ	LSTCON		; YES, CHECK FOR LST: OR CON:
; CHECK FOR SPECIFIED DRIVE
	POP	PSW		; GET CHAR.
	SUI	'A'		; A..P ===> 0..15
	MOV	B,A
	PUSH	H		; SAVE 34th BYTE
	LHLD	6
	LXI	D,-GETP
	DAD	D		; TEXT_IN_POINTER
	MVI	A,1
	ADD	M
	MOV	E,A
	MVI	D,0
	DAD	D		; LOOK AT NEXT CHARACTER
	MOV	A,M
	CPI	CR		; IS IT A CARRIAGE RETURN?
	JRNZ	DLET		; NO
	MVI	A,' '		; FILENAME IS 1 CHAR, ADD A SPACE
DLET:	POP	H		; 34th BYTE OF FCB
	CPI	':'		; IS A DRIVE SPECIFIED?
	JRZ	DRVSP
	PUSH	H
	LHLD	6		; HL POINTS TO TOP OF MEMORY.
	LXI	D,-GETP
	DAD	D		; HL POINTS TO TEXT IN POINTER.
	DCR	M		; PUSH IT BACK 1 CHARACTER.

	LHLD	6
	DCX	H		; HL POINTS TO DEFAULT DRIVE #.
	MOV	A,M
	POP	H
	JR	DRVNSP		; Drive not specified

;CHARACTER IN A SHOULD BE THE DRIVE LETTER.
DRVSP:	CALL	FTIN		; read past the :
	MOV	A,B		; DRIVE LETTER ===> A
DRVNSP:	CPI	MAXDRV		; IS IT A VALID DRIVE NUMBER?
	JRC	DRVOK
;RETURN AN ERROR CODE.
FILNER	POP	H		; CLEAN UP THE STACK.
NAMER	LXI	H,NAMERR
	CALL	TXTYP		; 'Bad filename'
	POP	PSW
	STC
	JMP	POPHDB

LSTCON:	POP	PSW		; GET CHAR.
	CPI	'L' 		; CHECKING FOR LST:
	JRZ	LST1
	CPI	'C'		; CHECKING FOR CON:
	JRNZ	NAMER		; NEITHER, BAD FILE NAME
	CALL 	FTIN
	CPI	'O'		; SECOND LETTER OF CON:
	JRNZ	NAMER		; NO, BAD FILE NAME
	CALL 	FTIN
	CPI	'N'		; THIRD LETTER OF CON:
	JRNZ	NAMER
	POP	H		; CON:!
	LXI	B,-4
	DAD	B		; FBA
	BSET	7,M		; SET FLAG FOR CONSOLE FILE
	JR	LST2
LST1:	CALL	FTIN
	CPI	'S'		; SECOND LETTER OF LST:
	JRNZ	NAMER
	CALL 	FTIN
	CPI	'T'		; THIRD LETTER
	JRNZ	NAMER
	POP 	H
	LXI	B,-4
	DAD	B		; FBA
	BSET	6,M		; SET FLAG FOR LISTING DEVICE
LST2:	CALL 	FTIN		; READ THE ':'

NOMORE:	POP	PSW
	ORA	A
	JMP	POPHDB

DRVOK	MOV	M,A		; STORE DRIVE NUMBER IN 34TH BYTE OF FCB
	POP	H		; START OF FCB NAME FIELD
	MVI	B,9		; LIMIT + 1 TO # OF CHARS IN FILE NAME.
SKSP	CALL	FTIN
	JRC	NOMORE		; Branch if the text in buffer is empty.
	JRZ	SKSP		; Skip spaces.
	CPI	'.'
	JRZ	NXTPT		; Branch if we have reached the type field.
	MOV	M,A		; STORE THE CHARACTER IN THE FCB.
	INX	H		; INCREMENT THE FCB POINTER.
	DJNZ	SKSP
	JMPR	NAMER		;TOO MANY CHARACTERS IN A FIELD.

NXTPT	MOV	C,B
	MVI	B,4		; LIMIT +1 OF # OF CHARS IN FILE TYPE.
NOIMAG	DCR	C
	JRZ	SKSP
	INX	H
	JMPR	NOIMAG

;
; FTIN -- FILE TIN, CONVERTS ALL LETTERS TO UPPER CASE
FTIN:	CALL	TIN
	CPI	'a'		; is it >= 'a'
	JRC	FTIN1		; YES,
	CPI	'z'+1		; IS IT <= 'z'
	JRNC	FTIN1		; YES,
	ANI	5FH		; THEN CONVERT TO UPPER CASE
FTIN1:	CPI	' '		; COMPARE TO A SPACE
	RET			; AND RETURN
;
«eof»