96 lines
2.6 KiB
Plaintext
96 lines
2.6 KiB
Plaintext
|
|
|||
|
|
|||
|
If you wish to use MT+86 programs in a stand-alone mode, you
|
|||
|
must rewrite @RNC, @WNC, GET and PUT. Skeletons for these routines
|
|||
|
are provided below.
|
|||
|
|
|||
|
Copyright 1982 by Digital Research, Inc.
|
|||
|
|
|||
|
(*$I FIBDEF.LIB*)
|
|||
|
TYPE
|
|||
|
PTR = ^BYTE;
|
|||
|
var
|
|||
|
@lfb : external ^fib;
|
|||
|
@SYSIN : EXTERNAL PTR;
|
|||
|
@SYSOU : EXTERNAL PTR;
|
|||
|
|
|||
|
EXTERNAL PROCEDURE @PUTCH(CH:CHAR);
|
|||
|
EXTERNAL FUNCTION @GETCH : CHAR;
|
|||
|
EXTERNAL PROCEDURE @RNB;
|
|||
|
EXTERNAL PROCEDURE @WNB;
|
|||
|
|
|||
|
FUNCTION @RNC:CHAR;
|
|||
|
(* this function returns the first character in the file buffer. *)
|
|||
|
(* It is used for TEXT and File of Char input. *)
|
|||
|
BEGIN
|
|||
|
IF @LFB^.OPTION > FRANDOM THEN (* DON'T GIVE BUFFER, BUT READ DIRECTLY *)
|
|||
|
(* IF CONSOLE/TERMINAL FILE *)
|
|||
|
BEGIN
|
|||
|
GET(@LFB^,@LFB^.BUFLEN); (* fill input buffer *)
|
|||
|
@RNC := @LFB^.FBUFFER[0] (* return window variable *)
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
@RNC := @LFB^.FBUFFER[0]; (* @RNC := F^ *)
|
|||
|
GET(@LFB^,@LFB^.BUFLEN); (* GET(F) *)
|
|||
|
END
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE @WNC(CH:CHAR);
|
|||
|
(* The oposite of RNC *)
|
|||
|
BEGIN
|
|||
|
@LFB^.FBUFFER[0] := CH; (* F^ := CH *)
|
|||
|
PUT(@LFB^,@LFB^.BUFLEN) (* PUT(F) *)
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE GET(VAR F:FIB; SZ:INTEGER);
|
|||
|
(* This routine fills the buffer in the FIB and checks for *)
|
|||
|
(* EOF and EOLN. @RNB must be written by the user. IOSIZE *)
|
|||
|
(* is the window size in bytes *)
|
|||
|
VAR
|
|||
|
IS_EOLN : BOOLEAN;
|
|||
|
BEGIN
|
|||
|
F.FEOLN := FALSE; (* DEFAULT IS THAT WE RESET IT *)
|
|||
|
|
|||
|
@LFB := ADDR(F);
|
|||
|
IF F.FEOF THEN
|
|||
|
BEGIN
|
|||
|
F.FEOLN := TRUE;
|
|||
|
EXIT
|
|||
|
END;
|
|||
|
|
|||
|
@RNB; (* GO READ FROM THE FILE/CONSOLE *)
|
|||
|
(* into f.fbuffer *)
|
|||
|
IF F.FTEXT THEN (* TEXT FILE, EOLN/EOF MUST BE SET *)
|
|||
|
BEGIN
|
|||
|
F.FEOF := (F.FBUFFER[0] = CHR($1A)) OR (F.FEOF);
|
|||
|
IS_EOLN := (F.FBUFFER[0] = CHR($0D)); (* $0D for rmx/udi/cpm *)
|
|||
|
IF (IS_EOLN) OR (F.FEOF) THEN
|
|||
|
F.FEOLN := TRUE;
|
|||
|
|
|||
|
IF (IS_EOLN) AND (F.OPTION = FRDWR) THEN (* GOBBLE LF *)
|
|||
|
@RNB;
|
|||
|
|
|||
|
IF F.FEOF OR F.FEOLN THEN
|
|||
|
F.FBUFFER[0] := ' ';
|
|||
|
END
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE PUT(VAR F:FIB; SZ:INTEGER);
|
|||
|
BEGIN
|
|||
|
@LFB := ADDR(F);
|
|||
|
@WNB (* GO WRITE BUFFER OUT *)
|
|||
|
END;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sample routines for @RNB and @WNB can be found in IOMOD.
|
|||
|
|
|||
|
|
|||
|
Licensed users are granted the right to use these skeleton
|
|||
|
routines.
|
|||
|
|
|||
|
Pascal/MT+86 is a trademark of Digital Research. Inc.
|
|||
|
All information Presented Here Is Proprietary to Digital Research.
|
|||
|
|
|||
|
|