Unit KGlobals ;
Interface
  Const
    Version = '3.1 ' ;
    Date    = '1988 October 7   ' ;
    Buffersize = 10240 ;

    SOH  = $01 ;        (* Start of Header *)
    EOT  = $04 ;        (* End of transmission *)
    BEL  = $07 ;
    BS   = $08 ;        (* Back Space *)
    FF   = $0C ;
    CR   = $0D ;
    XON  = $11 ;
    XOFF = $13 ;
    SUB  = $1A ;
    ESC  = $1B ;
    FS   = $1C ;
    GS   = $1D ;
    RS   = $1E ;
    US   = $1F ;
    DEL  = $7F ;

  Var
    (* Operational Options Toggles *)
    LocalEcho,
    NoEcho,
    XonXoff,
    AudioFlag,
    AplFlag,
    ParmFlag,
    Line25Flag  : Boolean ;

    (* Execution Control flags *)
    Running,
    Connected,
    WaitXon,
    Logging,
    ForPrinter,
    TakeActive,
    GotSOH      : Boolean ;

    LogName : String ;
    Logfile : Text ;
    CommandFile : Text ;

    (* Global Functions *)
    Function GETTOKEN  ( var instring : String) : String ;
    Function UpperCase (     instring : String) : String ;
    Function Prefixof  (    afilename : String) : String ;
    Function NewAsFile (MyFiles,Filename,AsFiles : String ;
                                      var AsFile : String ): boolean;

Implementation
(* ----------------------------------------------------------------- *)
(* GETTOKEN - Function                                               *)
(* ----------------------------------------------------------------- *)
Function  GETTOKEN (var instring : String) : String ;
Var
    pt : byte ;
    Begin (* GETTOKEN *)
    While (instring[1] = ' ') and (length(instring)>1) do
          Delete(instring,1,1);    (* eliminate leading blanks *)
    pt := POS(' ',instring);
    if pt = 0 then pt := length(instring)+1 ;
    GETTOKEN := copy(instring,1,pt-1);
    DELETE(instring,1,pt);
    End ; (* GETTOKEN *)

(* ----------------------------------------------------------------- *)
(* UpperCase - Function                                              *)
(* ----------------------------------------------------------------- *)
Function UpperCase ( instring : String) : String ;
Var
    ix,len : integer ;

    Begin (* UpperCase *)
    len := length(instring) ;
    for ix := 1 to len do instring[ix] := Upcase(instring[ix]);
    UpperCase := instring ;
    End ; (* UpperCase *)

(* ----------------------------------------------------------------- *)
(* Prefixof Function - Returns a char string of the dir prefix.      *)
(* ----------------------------------------------------------------- *)
 function Prefixof(afilename:String) : String;
 var i :integer;
 label exit ;
    begin (* Prefixof *)
    while length(afilename)>0 do
         If afilename[length(afilename)] in [':','\','/']
             then goto exit
             else delete(afilename,length(afilename),1);
 exit:
    Prefixof := afilename ;
    end;  (* Prefixof *)

(* ----------------------------------------------------------------- *)
(*  NewAsFile - returns a new ASFILE name in the parameter AsFile.   *)
(*           MyFiles - is the wild char name.                        *)
(*           Filename - is the filename to be renamed .              *)
(*           AsFiles  - is the wild char name of new file.           *)
(*           AsFile   - is the new file name.                        *)
(*     returns TRUE if AsFile correctly assigned.                    *)
(*     returns FALSE if AsFile detected an error in assignment       *)
(*   There is a BUG in the MsDoS Call to get next Directory Entry    *)
(*   therefore this function may return FALSE.                       *)
(*                                                                   *)
(* ----------------------------------------------------------------- *)
Function NewAsFile (MyFiles,Filename,AsFiles: String ;
                                 var AsFile : String ): boolean;
var
    temp     : String ;
    si,ix,iy : integer ;
    star     : packed array[1..8] of string[20];
Label  Subdir,Subdir1,Exit;

Begin (* NewAsFile Function *)
for si := 1 to 8 do star[si] := '*';
si := 0 ;
 MyFiles  := Uppercase(Myfiles);
 FileName := Uppercase(Filename);
 AsFiles  := Uppercase(AsFiles);
 ix := Pos(':',MyFiles) ;
 If ix > 1 then delete(MyFiles,1,ix) ;  (* Eliminate filemode prefix *)
subdir:
 ix := Pos('\',MyFiles) ;
 If ix > 0 then delete(MyFiles,1,ix) ;  (* Eliminate sub-dir  prefixs *)
 if ix > 0 then goto subdir ;
 ix := Pos(':',AsFiles) ;
 If ix > 1 then delete(AsFiles,1,ix) ;  (* Eliminate filemode prefix *)
subdir1:
 ix := Pos('\',AsFiles) ;
 If ix > 0 then delete(AsFiles,1,ix) ;  (* Eliminate sub-dir  prefixs *)
 if ix > 0 then goto subdir1 ;
While (length(Filename) > 0) and (length(Myfiles)>0) Do
    Begin (* Scan filename *)
    If MyFiles[1] = Filename[1] then
        Begin delete(MyFiles,1,1) ; delete(Filename,1,1); end
                                else
         Begin (* get star string *)
         si:=si+1 ;
         delete(MyFiles,1,1);
         ix := Pos('*',MyFiles) - 1 ;  (* Next wild char *)
         if ix <= 0 then  temp := MyFiles
                    else  temp := copy(Myfiles,1,ix);
         iy := Pos(temp,Filename)-1 ;
         if iy < 0 then
              begin NEWASFILE:=FALSE; Asfile:='temp.dat'; Goto exit ; end;
         if iy = 0 then star[si] := filename
                    else star[si] := copy(filename,1,iy);
         delete(FileName,1,iy);
         End ;(* get star string *)
    End; (* Scan filename *)
ix := 1 ;
si := 1 ;
AsFile := '';
While ix <= length(AsFiles)  do
    Begin (* Create AsFile name *)
    If AsFiles[ix] in ['*','?'] then
         Begin (* wild char *)
         AsFile := Concat(AsFile,star[si]);
         si := si + 1 ;
         End
                                else
        AsFile := Concat(AsFile,Asfiles[ix]);
   ix := ix + 1 ;
   End ; (* Create AsFile name *)
NewAsFile := True ;
Exit:
End; (* NewASFile Function *)

Begin (* KGlobals *)
 (* Default Settings *)
    XonXoff    := False ;
    NoEcho     := True ;
    LocalEcho  := False ;
    AudioFlag  := False ;
    AplFlag    := False ;
    ParmFlag   := False ;
    Line25Flag := True ;

(*  Execution control flags *)
    Running    := true ;
    connected  := false ;
    logging    := false ;
    ForPrinter := false ;
    TakeActive := false ;
    GotSOH     := false ;
    WaitXon    := false ;
End. (* KGlobals *)
