DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC759 "Piccoline"

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

See our Wiki for more about RegneCentralen RC759 "Piccoline"

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c864451fd⟧ TextFile

    Length: 21632 (0x5480)
    Types: TextFile
    Names: »FILEX.A86«

Derivation

└─⟦58894fb3b⟧ Bits:30004536 SW1400 Piccoline Distributions system 1.2
    └─ ⟦this⟧ »FILEX.A86« 
└─⟦a818288f1⟧ Bits:30002685 SW1400-10 Piccoline Distributions system 2.3 - disk 1/4
    └─ ⟦this⟧ »FILEX.A86« 
└─⟦b6f6b6beb⟧ Bits:30002689 SW1400 Piccoline Distributions system 2.3 - disk 1/3
    └─ ⟦this⟧ »FILEX.A86« 
└─⟦f4f24e427⟧ Bits:30002697 SW1458 Concurrent DOS Distributionsdiskette 4.0 - disk 2/3
    └─ ⟦this⟧ »FILEX.A86« 

TextFile

    				;FILEX program version 1.0  19 jan 83
                                ; edited 84.07.19  kneh version 1.1
				; edited 84.08.08  ndh
				;
false	equ	0		;
true	equ	1		;
				;
c_getnum	equ	99h	;
c_setnum	equ	94h	;
c_read		equ	01h	;
c_write		equ	02h	;
c_rawio         equ     06H     ;
print	equ	9		;
rdco	equ	10		;
open	equ	15		;
close	equ	16		;
delete	equ	19		;
read	equ	20		;
write	equ	21		;
make	equ	22		;
dmaoff	equ	26		;
dmaseg	equ	51		;
				;
ok	equ	0		; result values
nexist	equ	1		;
full	equ	2		;
eof	equ	3		;
transm	equ	4		;

CSEG
start:				;
	mov	cl,c_getnum	;
	int	224		;
	mov	def_console,al	;
	mov	cl,91h		; set priority
	mov	dl,0b0h		;
	int	224		;
	mov	ax,ds		;
	mov	es,ax		;

	MOV	DX,0080H	;
	MOV	BX,OFFSET conslen
				; move program call parameters
	MOV	SI,DX
	LODSB			; to cons buffer
	MOV	CH,AL		;
	MOV	ÆBXÅ,AL		;
	INC	BX
	INC	DX
m1:	MOV	AL,CH		;	
	OR	AL,AL		;
	JZ	mm		;
	MOV	SI,DX
	LODSB			;
	MOV	ÆBXÅ,AL		;
	INC	BX
	INC	DX
	DEC	CH		;
	JMP	m1		;
mm:	MOV	DX,0080H	;
	MOV	SI,DX
	LODSB			;
	CMP	AL,0		;
	JNZ	m2		; rdcons:=no parameters specified
	MOV	BYTE PTR rdcons,true
				; after program name
m2:	MOV	DX,OFFSET sttext; write('FILEX - ver x.x');
	MOV	CL,print	;
	INT	224		;
				;
act:
	CALL	getnextitem	; getnextitem;
	MOV	BX,OFFSET itemlen
	MOV	DX,OFFSET receive
	CALL	comp		;
	JNZ	l0000		;
	JMP	sleep		; if item='remote' then goto sleep;
l0000:	MOV	AL,itemlen	;
	CMP	AL,0		;
	JNZ	l0001		;
	JMP	endprog		; if item='' then goto endprog;
l0001:	MOV	BX,OFFSET itemlen
	MOV	DX,OFFSET noend	;
	CALL	comp		;
	JNZ	act2		;
	JMP	boot		; if item='NOEND' then goto boot;
act2:	CALL	buildname	; name:=buildname(item) 
	MOV	DX,OFFSET unitnr;
	MOV	AL,remote	;
	MOV	lhandside,AL	; lhandside:= (Rx: specified)
	CMP	AL,true		;
	JZ	act3		; if not Rx: specified then  
	XOR	AL,AL		; begin
	MOV	sfcbcr,AL	;   sfcbrc:=0;
	MOV	BX,OFFSET sfcb	;   sfcbname:=name
	JMP	act4		; end
act3:	MOV	BX,OFFSET bufname
				; else
act4:	CALL	movename	; begin
	CALL	getnextitem	;   buf.name:=name
	MOV	BX,OFFSET itemlen
				; end;
	MOV	DX,OFFSET equal	; getnextitem;
	CALL	comp		; if item<>'=' then goto parameter-rror;
	JZ	l0002		;
	JMP	parmerr		; getnextitem;
l0002:	CALL	getnextitem	; buildname(item);
	CALL	buildname	; if lhandside=(Rx: specified)
	MOV	AL,remote	;   then goto parameter-error;
	MOV	BX,OFFSET lhandside
				; if Rx: specified then goto rtol;
	CMP	AL,ÆBXÅ		;
	JNZ	act5		;
	JMP	parmerr		;
act5:	CMP	AL,true		;
	JNZ	act6		;
	JMP	rtol		; sfcbname:=name;
act6:	MOV	DX,OFFSET unitnr; sfcbrc:=0;
	MOV	BX,OFFSET sfcb	;
	CALL	movename	;
	XOR	AL,AL		;
	MOV	sfcbcr,AL	;
				;
				; LOCAL -> remote
ltor:	MOV	CL,open		; open(source);
	MOV	DX,OFFSET sfcb	;
	INT	224		;
	CMP	AL,0FFH		; if open-error then abort
	JNZ	l003		;
	JMP	openerr		;
l003:	MOV	AL,bufname+1	; if buf.name='' then
	CMP	AL,' '		;
	JNZ	ltor1		; begin
	MOV	DX,OFFSET name	;   buf.name:=name (except unitno)
	MOV	BX,OFFSET bufname+1
				; end;
	CALL	moveonlyname	;
ltor1:	MOV	AL,2		;
	MOV	bufop,AL	; buf.operation:=2; (*make*)
	MOV	WORD PTR antal,19	; antal:=19;
	CALL	outandin	; outline(buf,antal);
				; inline(buf,antal);
	MOV	AL,bufst	;
	CMP	AL,transm	; if transmission error then abort
	JNZ	l004		;
	JMP	trxerr		;
l004:	CMP	AL,ok		; if make-error then abort
	JZ	l005		;
	JMP	makeerr		;
l005:	MOV	CL,dmaoff	;
	MOV	DX,OFFSET bufarea
	INT	224		; setdmaoffset(buf.area);
	MOV	CL,dmaseg	;
	MOV	DX,DS		;
	INT	224		; setdmaseg(buf.area);
	MOV	AL,4		;
	MOV	bufop,AL	; buf.operation:=4; (* write *)
ltor2:	MOV	DX,OFFSET sfcb	; while not eof(source) do
				; begin
	MOV	CL,read		;   read(source);
	INT	224		;
	OR	AL,AL		;
	JZ	l006		;
	JMP	closfiles	;
l006:	MOV	WORD PTR antal,131; antal := 131;
	CALL	outandin	;   outline(buf,antal);
				;   inline(buf,antal);
	MOV	AL,bufst	;
	CMP	AL,transm	;   if transmission-error then abort
	JNZ	l007		;
	JMP	trxerr		; 
l007:	CMP	AL,ok		;   if write-error then abort
	JZ	l008		;
	JMP	writeerr	;
l008:	JMP	ltor2		; end;
				;
				;
				; remote -> LOCAL
rtol:	MOV	DX,OFFSET unitnr; buf.name:=name
	MOV	BX,OFFSET bufname
	CALL	movename	;
	XOR	AL,AL		;
	MOV	sfcbcr,AL	; sfcbcr:=0;
	MOV	AL,sfcb+1	; if destname='' then
	CMP	AL,' '		; begin
	JNZ	rtol1		;   sfcbname:=name;
	MOV	DX,OFFSET name	;
	MOV	BX,OFFSET sfcb+1; 
	CALL	moveonlyname	; end;
rtol1:	MOV	AL,1		;
	MOV	bufop,AL	; buf.operation:=1; (*open*)
	MOV	WORD PTR antal,19; antal := 19;
	CALL	outandin	; outline(buf,antal);
				; inline(buf,antal)	;
	MOV	AL,bufst	;
	CMP	AL,transm	; if transmission-error then abort
	JNZ	l009		;
	JMP	trxerr		;
l009:	CMP	AL,ok		; if open-error then abort
	JZ	l010		;
	JMP	openerr		;
l010:	MOV	CL,delete	; delete(destination);
	MOV	DX,OFFSET sfcb	;
	INT	224		;
	MOV	CL,make		; make(destination);
	MOV	DX,OFFSET sfcb	;
	INT	224		;
	CMP	AL,0FFH		; if make-error then abort
	JNZ	l011		;
	JMP	makeerr		;
l011:	MOV	CL,dmaoff	;
	MOV	DX,OFFSET bufarea
				; setdma(buf.area);
	INT	224		;
	MOV	DX,DS		;
	MOV	CL,dmaseg	;
	INT	224		; setdmaseg(buf.area);
	MOV	AL,3		; buf.operation:=3; (* read *)
	MOV	bufop,AL	;
rtol2:	MOV	WORD PTR antal,3; antal :=3;
	CALL	outandin	; outline(buffer,antal);
				; inline(buffer,antal);
	MOV	AL,status	; 
	OR	AL,AL		; if receive_status=error or
	JZ	l012		;
	JMP	trxerr		;    buffer_status=transm_error
l012:	MOV	AL,bufst	; then exit to transmission_error
	CMP	AL,transm	; else
	JNZ	l013		;
	JMP	trxerr		; begin
l013:	OR	AL,AL		;   if buffer_status<>0
	JZ	l014		;
	JMP	closfiles	;   then close files
l014:	MOV	DX,OFFSET sfcb	; end;
	MOV	CL,write	;
	INT	224		;
	OR	AL,AL		; if write-error then abort
	JZ	l015		;
	JMP	writeerr	;
l015:	JMP	rtol2		;
				;
closfiles:			;
	MOV	AL,5		;
	MOV	bufop,AL	; buf.operation:=5 (* close *)
	MOV	WORD PTR antal,3	; antal:=3;
	CALL	outandin	; outline(buf,antal);
				; inline(buf,antal);
	MOV	AL,bufst	;
	CMP	AL,transm	; if transmission-error then abort
	JNZ	l016		;
	JMP	trxerr		;
l016:	CMP	AL,ok		;
	JZ	l017		;
	JMP	clsrerr		; if close-error on remote then abort
l017:	MOV	CL,close	;
	MOV	DX,OFFSET sfcb	;
	INT	224		; close(source/destination);
	CMP	AL,0FFH		;
	JNZ	l018		;
	JMP	clslerr		; if close-error on local then abort
l018:	JMP	act		; goto start:
				;
endprog:			;
	MOV	AL,6		;
	MOV	bufop,AL	; buf.operation:=6 (* end *)
	MOV	WORD PTR antal,3	; antal:=3;
	CALL	outandin	; outline(buf,antal);
				; inline(buf,antal);
	JMP	boot		; warmboot;
				;end.
				;


	; ****************************************
	; *                                      *
	; *      sleeping partner                *
	; *                                      *
	; ****************************************
				; sleep:
sleep:	MOV	DX,OFFSET oktext; write('remote OPERATION');
	MOV	CL,print	;
	INT	224		;
sleep1:	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,ok;
	CALL	inline		; repeat
	MOV	AL,status	;   inline(buffer,antal)
	CMP	AL,ok		;   if ok then
	JZ	l019		;
	JMP	transerr	;   begin
l019:	MOV	AL,bufop	;     case buf.operation of
	MOV	BX,OFFSET jptable-3
	MOV	CH,AL		;
	ADD	AL,CH		;
	ADD	AL,CH		;
	MOV	CL,AL		;
	XOR	AL,AL		;
	MOV	CH,AL		;
	ADD	BX,CX
	RCR	SI,1
	RCL	SI,1		;
	JMP	BX		;
jptable:			;
	JMP	openf		; 1: openfile(buf.name);
	JMP	makef		; 2: makefile(buf.name);
	JMP	readf		; 3: readfile;
	JMP	writef		; 4: writefile;
	JMP	closf		; 5: closefile;
	JMP	endf		; 6: endsession;
				;
				;
transerr:			;
	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,transm
	JMP	senda3		;
openf:	MOV	DX,OFFSET bufname
	MOV	BX,OFFSET sfcb	;
	CALL	movename	;     1: begin (* open *)
	SUB	AL,AL		;
	MOV	sfcbcr,AL	;
	MOV	CL,open		;          movename;
	MOV	DX,OFFSET sfcb	;
	INT	224		;          open(buf.name)
	INC	AL		;
	JNZ	open1		;
	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,nexist
	JMP	senda3		;
open1:	MOV	CL,dmaoff	;          setdma(buf.area)
	MOV	DX,OFFSET bufarea
	INT	224		;
	MOV	CL,dmaseg	;
	MOV	DX,DS		;
	INT	224		;          setdmaseg(buf.area)
	JMP	senda3		;        end;
				;
makef:	MOV	DX,OFFSET bufname
	MOV	BX,OFFSET sfcb	;
	CALL	movename	;     2: begin (* make *)
	SUB	AL,AL		;
	MOV	sfcbcr,AL	;
	MOV	CL,delete	;          movename;
	MOV	DX,OFFSET sfcb	;
	INT	224		;          delete(buf.name);
	MOV	CL,make		;          make(buf.name);
	MOV	DX,OFFSET sfcb	;
	INT	224		;
	INC	AL		;
	JNZ	make1		;
	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,full
	JMP	senda3		;
make1:	MOV	CL,dmaoff	;          setdma(buf.area);
	MOV	DX,OFFSET bufarea
	INT	224		;
	MOV	CL,dmaseg	;
	MOV	DX,DS		;
	INT	224		;          setdmaseg(buf.area);
	JMP	senda3		;        end;
				;
readf:	MOV	DX,OFFSET sfcb	;     3: begin (* read *)
	MOV	CL,read		;          read;
	INT	224		;
	OR	AL,AL		;
	JZ	senda131	;
	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,eof
	JMP	senda3		;        end;
				;
writef:	MOV	DX,OFFSET sfcb	;     4: begin (* write *)
	MOV	CL,write	;          write;
	INT	224		;
	OR	AL,AL		;
	JNZ	l020		;
	JMP	senda3		;
l020:	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,full
	JMP	senda3		;        end;
				;
closf:	MOV	DX,OFFSET sfcb	;     5: begin (* close *)
	MOV	CL,close	;          close;
	INT	224		;
	INC	AL		;
	JZ	l021		;
	JMP	senda3		;
l021:	MOV	BX,OFFSET result;
	MOV	BYTE PTR ÆBXÅ,full
	JMP	senda3		;        end;
				;
endf:				;     6: begin (* end *)
				;
				;        end;
				;     end;
				;
senda3:	MOV	BX,OFFSET antal	;
	MOV	BYTE PTR ÆBXÅ,3	;
	JMP	senda		;
				;
senda131:			;
	MOV	BX,OFFSET antal	;
	MOV	BYTE PTR ÆBXÅ,131
				;
senda:	INC	BX
	MOV	BYTE PTR ÆBXÅ,0	;
	MOV	AL,result	;
	MOV	bufst,AL	;
	CALL	outline		;     outline(buffer,antal);
	MOV	AL,bufop	;
	CMP	AL,6		;   until bufop=6;
	JZ	l022		;
	JMP	sleep1		;
l022:				;
	JMP	boot		;
				;
boot:	MOV	CL,8FH		;
	INT	224		;


openerr:			;
	MOV	DX,OFFSET mopen	;
	JMP	printerr	;
				;
makeerr:			;
	MOV	DX,OFFSET mmake	;
	JMP	printerr	;
				;
writeerr:			;
	MOV	DX,OFFSET mwrite;
	JMP	printerr	;
				;
clsrerr:			;
	MOV	DX,OFFSET mremclose
	JMP	printerr	;
				;
clslerr:			;
	MOV	DX,OFFSET mlocclose
	JMP	printerr	;
				;
trxerr:				;
	MOV	DX,OFFSET mtxmerr
	JMP	printerr	;
				;
parmerr:			;
	MOV	DX,OFFSET mparmerr
	JMP	printerr	;
				;
				;
printerr:			;
	MOV	CL,print	;
	INT	224		; write error message to console
	MOV	AL,rdcons	; if read-from-console=false
	CMP	AL,false	;  then goto cpm
	JNZ	l023		;
	JMP	boot		;  else 
l023:	XOR	AL,AL		;   begin
	MOV	conslen,AL	;     len(cons):=0   
	JMP	act		;   end;  
				; goto start;
				;
				;
getnextitem:			; procedure getnextitem
	MOV	BX,OFFSET conspil
				; begin
	MOV	CH,0		;   while conspil<=len(cons) and
	MOV	CL,ÆBXÅ		;         cons(conspil)=' ' do 
	MOV	BX,OFFSET cons	;   begin
	DEC	BX
	ADD	BX,CX
	RCR	SI,1
	RCL	SI,1		;     conspil:=conspil+1;          
getn2:	MOV	AL,conslen	;   end;
	CMP	AL,CL		;
	JS	getn3		;
	MOV	AL,ÆBXÅ		;
	CMP	AL,' '		;
	JNZ	getn5		;
	INC	CL		;
	INC	BX
	JMP	getn2		;
getn3:	MOV	AL,rdcons	;   if conspil>len(cons) then  
	CMP	AL,0		;   begin
	JZ	getn10		;     if rdcons then
	MOV	DX,OFFSET star	;     begin
	MOV	CL,print	;       write('* ');
	INT	224		;       readln(cons);
	MOV	DX,OFFSET consmax
	MOV	CL,rdco		;
	INT	224		;
	MOV	DX,OFFSET crnl	;       writeln;
	MOV	CL,print	;
	INT	224		;
	MOV	AL,conslen	;       
	MOV	CL,AL		;       for i=1 to len(cons) do
	MOV	CH,32		;       begin
	MOV	BX,OFFSET cons	;         if consÆiÅ>='a' then    
getnn:	MOV	AL,ÆBXÅ		;           consÆiÅ:=consÆiÅ-('a'-'A');
	CMP	AL,'a'		;              (* convert lower case
	JS	getn		;                      to upper case *)
	SUB	AL,CH		;       end;
	MOV	ÆBXÅ,AL		;
getn:	INC	BX
	DEC	CL		;
	JNZ	getnn		;
	MOV	CH,0		;
	MOV	CL,1		;       pil := 1;
	MOV	BX,OFFSET cons	;
	ADD	BX,CX
	RCR	SI,1
	RCL	SI,1		;
	DEC	BX
getn4:	MOV	AL,conslen	;
	CMP	AL,CL		;       while conspil<=len(cons) and
	JS	getn10		;             cons(conspil)=' '  do 
	MOV	AL,ÆBXÅ		;       begin
	CMP	AL,' '		;         conspil:=conspil+1;
	JNZ	getn5		;       end;
	INC	CL		;
	INC	BX
	JMP	getn4		;     end
getn10:	MOV	BX,OFFSET itemlen
				;     else
	MOV	BYTE PTR ÆBXÅ,0	;     begin
	RET			;       itemlen:=0;
				;       return;
				;     end;
getn5:	MOV	DX,OFFSET item	;
	MOV	CH,1		; i := 1;
	MOV	AL,ÆBXÅ		;
	CMP	AL,'='		; if consÆpilÅ='=' then
	JNZ	getn6		; begin
	MOV	DI,DX
	STOSB			;   itemÆ1Å:='=';
	MOV	BX,OFFSET itemlen
				;
	MOV	BYTE PTR ÆBXÅ,1	;   itemlen:=1;
	INC	CL		;
	MOV	BX,OFFSET conspil
				;   pil:=pil+1;
	MOV	ÆBXÅ,CL		;   return;
	RET			; end;
getn6:	MOV	AL,conslen	; while pil<=len(cons) and
	CMP	AL,CL		;       cons(pil)<>' ' and
	JS	getn7		;       cons(pil)<>'=' do
	MOV	AL,ÆBXÅ		; begin
	CMP	AL,' '		;    
	JZ	getn7		; 
	CMP	AL,'='		; 
	JZ	getn7		; 
	PUSH	CX		;    
	PUSH	BX		;  
	MOV	BX,OFFSET badchar
				;   if pos('<>,;?*ÆÅ',consÆpilÅ)<>0 
	MOV	CH,ÆBXÅ		;   
getchk:	INC	BX		;          (* check for illegal characters *)
	CMP	AL,ÆBXÅ		;
	JNZ	l024		;
	JMP	parmerr		;     then exit to parameter-error
l024:	DEC	CH		;
	JNZ	getchk		;     else
	POP	BX		;     begin
	POP	CX		;       nameÆiÅ:=consÆpilÅ;
	MOV	DI,DX
	STOSB			;       i:=i+1;
	INC	CH		;       pil:=pil+1;
	INC	CL		;     end;
	INC	DX
	INC	BX		; end;
	JMP	getn6		; 
getn7:	MOV	DX,OFFSET itemlen
				; itemlen:=i-1;
	MOV	AL,CH		;
	DEC	AL		;
	MOV	DI,DX
	STOSB			;
	MOV	BX,OFFSET conspil
	MOV	ÆBXÅ,CL		;
	RET			;end;
				;
buildname:			; procedure buildname;
	MOV	BX,OFFSET fejl	; begin
	MOV	BYTE PTR ÆBXÅ,false
				 ;  fejl:=false;
	MOV	BX,OFFSET remote;
	MOV	BYTE PTR ÆBXÅ,false
				;  remote:=false;
	MOV	CH,11		;
	MOV	BX,OFFSET name	;
build1:	MOV	BYTE PTR ÆBXÅ,' '
				;  name:= '        ';
	INC	BX		;  name2:='   ';
	DEC	CH		;
	JNZ	build1		;
	MOV	BX,OFFSET item+1; 
	MOV	AL,ÆBXÅ		;
	CMP	AL,':'		; if itemÆ2Å=':' then
	JNZ	build2		;   begin
	DEC	BX
	MOV	AL,ÆBXÅ		;
	MOV	CL,'A'-1	;
	SUB	AL,CL		;
	MOV	BX,OFFSET unitnr;
	MOV	ÆBXÅ,AL		;     unitnr:=ord(itemÆ1Å)-(ord('A')-1);
	MOV	BX,OFFSET item+2;     pos := 3;
	MOV	CL,3		;
	JMP	build4		;   end;
build2:	INC	BX		; else
	MOV	AL,ÆBXÅ		;   begin
	CMP	AL,':'		;     if itemÆ3Å=':' and
	JNZ	build3		; 
	MOV	BX,OFFSET item	;
	MOV	AL,ÆBXÅ		;
	CMP	AL,'R'		;        itemÆ1Å='R' then
	JNZ	build3		;
	MOV	BX,OFFSET remote;          begin
	MOV	BYTE PTR ÆBXÅ,true
	MOV	BX,OFFSET item+1;            remote:=true;
	MOV	AL,ÆBXÅ		;
	MOV	CL,'A'-1	;
	SUB	AL,CL		;
	MOV	BX,OFFSET unitnr;
	MOV	ÆBXÅ,AL		;            unitnr:=ord(itemÆ2Å)-(ord('A')-1);
	MOV	BX,OFFSET item+3;
	MOV	CL,4		;          end; 
	JMP	build4		;     else
build3:	MOV	BX,OFFSET unitnr;       begin
	MOV	BYTE PTR ÆBXÅ,0	;       (* no disk specified *)
	MOV	BX,OFFSET item	;       end;
	MOV	CL,1		;   end;
build4:	MOV	CH,1		; pil :=1;
	MOV	DX,OFFSET name	;
build5:	MOV	AL,itemlen	; while pos<=itemlen and
	CMP	AL,CL		;       pil<=8       and
	JS	lret1		;       itemÆposÅ<>'.'    do
	MOV	AL,8		;   begin
	CMP	AL,CH		;     nameÆpilÅ:=itemÆposÅ;
	JS	build6		;     pil:=pil+1;
	MOV	AL,ÆBXÅ		;     pos:=pos+1;
	CMP	AL,'.'		;   end;
	JZ	build7		;
	MOV	AL,ÆBXÅ		;
	MOV	DI,DX
	STOSB			;
	INC	CH		;
	INC	CL		;
	INC	DX
	INC	BX
	JMP	build5		;
build6:	MOV	AL,itemlen	; while pos<=itemlen and
	CMP	AL,CL		;       itemÆposÅ<>'.'    do
	JS	lret1		;   begin	
	MOV	AL,ÆBXÅ		;     pos:=pos+1;
	CMP	AL,'.'		;   end;
	JZ	build7		;
	INC	CL		;
	INC	BX
	JMP	build6		;
build7:	INC	CL		; while pos<=itemlen and
	INC	BX		;       pil<=3            do
	MOV	CH,1		;
	MOV	DX,OFFSET name2	;  begin
build8:	MOV	AL,itemlen	;    name2ÆpilÅ:=itemÆposÅ;
	CMP	AL,CL		;    pil:=pil+1;
	JS	lret1		;    pos:=pos+1;
	MOV	AL,3		;  end;
	CMP	AL,CH		;
	JS	lret1		;
	MOV	AL,ÆBXÅ		;
	CMP	AL,'.'		;
	JNZ	l025		;
	JMP	parmerr		;
l025:	MOV	DI,DX
	STOSB			;
	INC	CH		;
	INC	CL		;
	INC	DX
	INC	BX
	JMP	build8		;
lret1:	RET			;
				;	
				;
movename:			; procedure movename;
	MOV	CL,16		; begin
move1:	MOV	SI,DX
	LODSB			;
	MOV	ÆBXÅ,AL		;
	INC	DX
	INC	BX
	DEC	CL		;
	JNZ	move1 		;
	RET			; end;
				;
moveonlyname:			; procedure ldeonlyname;
	MOV	CL,15		; begin
	JMP	move1		; end;
				;
comp:	MOV	SI,DX
	LODSB			; function compare:boolean;
	CMP	AL,ÆBXÅ		; begin
	JNZ	lret2		;   if len(s1)<>len(s2) then return;
	MOV	CH,AL		;
cp1:	INC	DX		;   for i:=1 to len(s1) do
	INC	BX		;   begin
	MOV	SI,DX
	LODSB			;     if s1ÆiÅ<>s2ÆiÅ then return;
	CMP	AL,ÆBXÅ		;
	JNZ	lret2		;   end;
	DEC	CH		;
	JNZ	CP1		;
lret2:	RET			;  return;
				;end;
				;
				;
				;
outandin:			;procedure outandin;
	CALL	outline		;begin
	CALL	inline		;  outline(buf,antal);
	RET			;  inline(buf,antal);
				;end;
				;
				;
inline:				;procedure inline(buf,antal);
				;begin
	mov	cl,c_setnum	;
	mov	dl,4		;
	int	224		;
inl1:	CALL	rec		; repeat
	CMP	AL,35		;   rec(ch);
	JNZ	inl1		; until ord(ch)<>35;
	MOV	BX,OFFSET antal+1	;
	CALL	rdata		; rdata(right);
	DEC	BX
	CALL	rdata		; rdata(left);
	MOV	CX,antal	; antal:=left shift 8 + right;
	MOV	BX,OFFSET buffer;
				; i:=0;
				; while antal>0 do
	JCXZ	inl3		; begin
inl2:	CALL	rdata		;   rdata(buf.area(i));
	INC	BX		;   i:=i+1;
				;   antal:=antal-1;
	LOOP	inl2		; end;
inl3:	MOV	BX,OFFSET checksum
				; rdata(checksum);
	CALL	rdata		;
	CALL	rec		; if rec(ch)=13 then
	CMP	AL,13		;   
	JNZ	inl6		;   begin
	MOV	AL,0		;
	MOV	BX,antal	;
	MOV	CH,BH		;     i:=0;
	MOV	CL,BL		;
	MOV	BX,OFFSET buffer;
inl4:	MOV	DH,AL		;     while antal>0 do
	MOV	AL,CH		;     begin
	OR	AL,CL		;
	MOV	AL,DH		;
	JZ	inl5		;
	ADD	AL,ÆBXÅ		;       calc_check:=calc_check+buf.area(i)
	INC	BX		;       i:=i+1;
	DEC	CX		;       antal:=antal-1;
	JMP	inl4		;     end;
inl5:	MOV	BX,OFFSET checksum
				;     if calck_check+checksum=0 then
	ADD	AL,ÆBXÅ		;       status:=ok
	JNZ	inl6		;     else
	SUB	AL,AL		;       status:=error;
	MOV	status,AL	;   end; 
	jmp	inl7		;
				; else
inl6:	MOV	AL,1FH		;   status:=error;
	MOV	status,AL	;
inl7:
	mov	cl,c_setnum	;
	mov	dl,def_console	;
	int	224		;
	RET			; end;
				;
rdata:	CALL	rec		; procedure rdata(ch);
				; begin
	SHL	AL,1		;   rec(ch1);
	SHL	AL,1		;
	SHL	AL,1		;
	SHL	AL,1		;   ch1:=(ch1 and 1111B) shift 4;
	MOV	AH,AL		;
	CALL	rec		;   rec(ch2);
	AND	AL,0FH		;   ch2:=ch2 and 1111B;
	OR	AL,AH		;   ch:=ch1+ch2;
	MOV	ÆBXÅ,AL		;
	RET			; end;
				;
rec:	PUSH	BX		;
        PUSH    DX
	PUSH	CX		;
	push	ax		;
	mov	cl,c_rawio	;
        mov     dl,0FDH
	int	224		;
	and	al,7fh		;
	pop	cx		;
	mov	ah,ch		;
	POP	CX		;
        POP     DX
	POP	BX		;
	RET			;
				;
				;
				; procedure outline(buf,antal)
outline:			; begin
	mov	cl,c_setnum	;
	mov	dl,4		;
	int	224		;
	MOV	AL,35		; write(chr(35));
	CALL	xmt		;
	MOV	BX,OFFSET antal+1
	CALL	xdata		; xdata(antal div 256);
	DEC	BX
	CALL	xdata		; xdata(antal mod 256);
	MOV	BX,antal	;
	MOV	CH,BH		;
	MOV	CL,BL		;
	MOV	BX,OFFSET buffer; i:=0;
outl1:	MOV	AL,CH		; while antal>0 do
	OR	AL,CL		; begin
	JZ	outl2		;
	CALL	xdata		;   xdata(buffer(i));
	INC	BX		;   i:=i+1;
	DEC	CX		;   antal:=antal-1;
	JMP	outl1		; end;
outl2:	SUB	AL,AL		; checksum:=0;
	MOV	BX,antal	;
	MOV	CH,BH		;
	MOV	CL,BL		;
	MOV	BX,OFFSET buffer; i:=0;
outl3:	MOV	DH,AL		; while antal>0 do
	MOV	AL,CH		; begin
	OR	AL,CL		;
	MOV	AL,DH		;
	JZ	outl4		;
	ADD	AL,ÆBXÅ		;   checksum:=checksum+buffer(i);
	INC	BX		;   i:=i+1;
	DEC	CX		;   antal:=antal-1;
	JMP	outl3		; end;
outl4:	MOV	DH,AL		;
	SUB	AL,AL		;
	SUB	AL,DH		; checksum:=0-checksum;
	MOV	checksum,AL	;
	MOV	BX,OFFSET checksum
	CALL	xdata		;
	MOV	AL,13		; xmt(13);
	CALL	xmt		;
	MOV	AL,10		; xmt(10);
	CALL	xmt		;
	mov	cl,c_setnum	;
	mov	dl,def_console	;
	int	224		;
	RET			; end;
				;
xdata:	MOV	AL,ÆBXÅ		; procedure xdata(i:integer);
	ROR	AL,1		; begin
	ROR	AL,1		;   xmt((i div 256)+32);
	ROR	AL,1		;
	ROR	AL,1		;
	AND	AL,0FH		;
	OR	AL,40H		;
	CALL	xmt		;
	MOV	AL,ÆBXÅ		;
	AND	AL,0FH		;
	OR	AL,40H		;
	CALL	xmt		;  xmt((i mod 256)+32);
	RET			; end;
				;
xmt:
	PUSH	CX		;
	PUSH	DX		;
	PUSH	BX		;
	mov	dl,al		;
	mov	cl,c_write	;
	int	224		;
 	POP	BX		;
	POP	DX		;
	POP	CX		;
	RET			;
				;
				; end;
				; end;
				;
DSEG
ORG	100H
	
receive	DB	6,'REMOTE'	;
noend	DB	5,'NOEND'	;
equal	DB	1,'='		;

badchar	DB	8,'<>,;?*ÆÅ'	;


star	DB	'* $'		;

oktext	DB	'Remote operation'	;
	DB	13,10,'$'

sttext	DB	' PICCOLINE FILEX   vers. 1.1 '	;

crnl	DB	13,10,'$'			;

mopen	DB	'Cannot open source file'
	DB	13,10,'$'

mmake	DB	'Directory full on destination disk'
	DB	13,10,'$'

mwrite	DB	'No space on destination disk'
	DB	13,10,'$'

mremclose	DB	'Cannot close file on remote disk'
		DB	13,10,'$'

mlocclose	DB	'Cannot close file on local disk'
		DB	13,10,'$'

mtxmerr	DB	'Transmission error'
	DB	13,10,'$'

mparmerr	DB	'*** Parameter error ***'
		DB	13,10,'$'

fejl		DB	false	;
status		DB	0	;
result		DB	ok	;
lhandside	DB	false	;
checksum	DB	0	;
				;
buffer		RB	131	;
bufop		equ	buffer	;
bufref		equ	bufop+1	;
bufst		equ	bufref+1;
bufarea		equ	bufst+1	;
bufname		equ	bufst+1	;
antal		DW	0	;
				;
sfcb		RB	36	;
sfcbcr		EQU	sfcb+32	;
				;
conspil		DB	1	;
consmax		DB	80	;
conslen		DB	0	;
cons		RB	80	;
				;
itemlen		DB	0	;
item		RB	20	;
				;
remote		DB	false	;
				;
unitnr		DB	0	;
name		RB	8	;
name2		RB	3	;
blanks		DB	0,0,0,0	;
				;
rdcons		DB	false	;

def_console	db	0	;
	END

«eof»