peter 27 years ago
parent
commit
795801f770
1 changed files with 100 additions and 136 deletions
  1. 100 136
      rtl/linux/linux.pp

+ 100 - 136
rtl/linux/linux.pp

@@ -1,4 +1,5 @@
 {
+    $Id$
     This file is part of the Free Pascal run time library.
     Copyright (c) 1993,97 by Michael Van Canneyt,
     member of the Free Pascal development team.
@@ -154,16 +155,13 @@ Type
   SigSet  = Integer;
   PSigSet = ^SigSet;
 
-
-{$PACKRECORDS 1}
-  SigActionRec = record
+  SigActionRec = packed record
     Sa_Handler : SignalHandler;
     Sa_Mask : longint;
     Sa_Flags : Integer;
     Sa_restorer : SignalRestorer;{ Obsolete - Don't use }
   end;
   PSigActionRec = ^SigActionRec;
-{$PACKRECORDS NORMAL}
 
 
 {********************
@@ -240,15 +238,14 @@ Const
 
 
 Type
-{$PACKRECORDS 1}
-  winsize = record
+  winsize = packed record
     ws_row,
     ws_col,
     ws_xpixel,
-    ws_ypixel : byte;
+    ws_ypixel : word;
   end;
 
-  TermIO = record
+  TermIO = packed record
     c_iflag,                             { input mode flags }
     c_oflag,                             { output mode flags }
     c_cflag,                             { control mode flags }
@@ -257,19 +254,14 @@ Type
     c_cc     : array [0..NCC-1] of char;{ control characters }
   end;
 
-  TermIOS = record
+  TermIOS = packed record
     c_iflag,
-
     c_oflag,
-
     c_cflag,
-
     c_lflag  : longint;
     c_line  : char;
-
     c_cc     : array[0..NCCS-1] of byte;
   end;
-{$PACKRECORDS 2}
 
 const
   InitCC:array[0..NCCS-1] of byte=(3,34,177,25,4,0,1,0,21,23,32,0,22,17,27,26,0,0,0);
@@ -437,12 +429,11 @@ const
 ********************}
 
 Type
-{$PACKRECORDS 1}
-  utimbuf = record
+  utimbuf = packed record
     actime,modtime : Longint;
   end;
 
-  TSysinfo = record
+  TSysinfo = packed record
     uptime    : longint;
     loads     : array[1..3] of longint;
     totalram,
@@ -454,7 +445,7 @@ Type
     procs     : integer;
     s         : string[18];
   end;
-{$PACKRECORDS 2}
+
 
 {******************************************************************************
                             Procedure/Functions
@@ -1163,7 +1154,6 @@ begin
 end;
 
 
-
 Function GetEpochTime:longint;
 {
   Get the number of seconds since 00:00, January 1 1970, GMT
@@ -1188,7 +1178,6 @@ begin
 end;
 
 
-
 Procedure EpochToLocal(epoch:longint;var year,month,day,hour,minute,second:Word);
 {
   Transforms Epoch time(seconds since 00:00, january 1 1970, corrected for
@@ -1208,7 +1197,6 @@ Begin { Beginning of Localtime }
 End;
 
 
-
 Function LocalToEpoch(year,month,day,hour,minute,second:Word):Longint;
 {
   Transforms local time (year,month,day,hour,minutes,second) to Epoch time
@@ -1220,7 +1208,6 @@ Begin
 End;
 
 
-
 Procedure GetTime(Var Hour,Minute,Second:Word);
 {
   Gets the current time, adjusted to local time, but not DST,
@@ -1294,7 +1281,6 @@ end;
 
 
 Function  fdOpen(pathname:pchar;flags:longint):longint;
-
 begin
   fdOpen:=Sys_Open(pathname,flags,0);
   LinuxError:=Errno;
@@ -1302,9 +1288,7 @@ end;
 
 
 
-
 Function  fdOpen(pathname:pchar;flags,mode:longint):longint;
-
 begin
   fdOpen:=Sys_Open(pathname,flags,mode);
   LinuxError:=Errno;
@@ -1361,11 +1345,8 @@ end;
 
 
 Function  fdFlush (fd : Longint) : Boolean;
-
-
 var
   SR: SysCallRegs;
-
 begin
   SR.reg2 := fd;
   fdFlush := (SysCall(syscall_nr_fsync, SR)=0);
@@ -1424,7 +1405,6 @@ var
   sr : Syscallregs;
 begin
   if (cmd in [F_SetFd,F_SetFl,F_GetLk,F_SetLk,F_SetLkw,F_SetOwn]) then
-
    begin
      sr.reg2:=textrec(fd).handle;
      sr.reg3:=cmd;
@@ -1487,8 +1467,8 @@ end;
 
 
 Function  Flock (fd,mode : longint) : boolean;
-
-var sr : Syscallregs;
+var
+  sr : Syscallregs;
 begin
   sr.reg2:=fd;
   sr.reg3:=mode;
@@ -1499,15 +1479,13 @@ end;
 
 
 Function Flock (var T : text;mode : longint) : boolean;
-
 begin
-  Flock:=Flock( TextRec(T).Handle,mode );
+  Flock:=Flock(TextRec(T).Handle,mode);
 end;
 
 
 
 Function  Flock (var F : File;mode : longint) : boolean;
-
 begin
   Flock:=Flock(FileRec(F).Handle,mode);
 end;
@@ -1772,13 +1750,13 @@ Function Dup2(var oldfile,newfile:text):Boolean;
 var
   tmphandle : word;
 begin
- flush(oldfile);{ We cannot share buffers, so we flush them. }
- flush(newfile);
- tmphandle:=textrec(newfile).handle;
- textrec(newfile):=textrec(oldfile);
- textrec(newfile).handle:=tmphandle;
- textrec(newfile).bufptr:=@(textrec(newfile).buffer);{ No shared buffer. }
- Dup2:=Dup2(textrec(oldfile).handle,textrec(newfile).handle);
+  flush(oldfile);{ We cannot share buffers, so we flush them. }
+  flush(newfile);
+  tmphandle:=textrec(newfile).handle;
+  textrec(newfile):=textrec(oldfile);
+  textrec(newfile).handle:=tmphandle;
+  textrec(newfile).bufptr:=@(textrec(newfile).buffer);{ No shared buffer. }
+  Dup2:=Dup2(textrec(oldfile).handle,textrec(newfile).handle);
 end;
 
 
@@ -1982,7 +1960,6 @@ begin
      AssignPipe:=false;
      exit;
    end;
-
 { Set up input }
   Assign(Pipe_in,'.');
   Textrec(Pipe_in).Handle:=f_in;
@@ -2019,7 +1996,6 @@ begin
      AssignPipe:=false;
      exit;
    end;
-
 { Set up input }
   Assign(Pipe_in,'.');
   Filerec(Pipe_in).Handle:=f_in;
@@ -2037,12 +2013,10 @@ end;
 
 
 Function PClose(Var F:text) :longint;
-
 var
   sr  : syscallregs;
   pl  : ^longint;
   res : longint;
-
 begin
   flush (f);
   sr.reg2:=Textrec(F).Handle;
@@ -2059,8 +2033,6 @@ var
   sr : syscallregs;
   pl : ^longint;
   res : longint;
-
-
 begin
   sr.reg2:=FileRec(F).Handle;
   SysCall (Syscall_nr_close,sr);
@@ -2075,7 +2047,6 @@ Procedure PCloseText(Var F:text);
 {
   May not use @PClose due overloading
 }
-
 begin
   PClose(f);
 end;
@@ -2311,13 +2282,11 @@ begin
    begin
    { we're in the parent}
    {
-
      Let's redraw the schedule :
           Parent      Child
           pipo[1] --> pipi[1]
           pipi[0] <-- pipo[0]
       }
-
      close(pipo);
      // dup(pipi[0],streamin);
      // close (pipi[0]);
@@ -2325,7 +2294,6 @@ begin
      // dup(pipo[1],streamout);
      // close (pipo[1]);
    end;
-
 end;
 
 
@@ -2614,13 +2582,11 @@ begin
   with tios do
    begin
      c_iflag:=c_iflag and (not (IGNBRK or BRKINT or PARMRK or ISTRIP or
-
                                 INLCR or IGNCR or ICRNL or IXON));
      c_oflag:=c_oflag and (not OPOST);
      c_lflag:=c_lflag and (not (ECHO or ECHONL or ICANON or ISIG or IEXTEN));
      c_cflag:=(c_cflag and (not (CSIZE or PARENB))) or CS8;
    end;
-
 end;
 
 
@@ -2815,7 +2781,6 @@ end;
 
 
 
-
 Function FExpand(Const Path:PathStr):PathStr;
 var
   temp : pathstr;
@@ -2846,7 +2811,6 @@ Begin
       inc(i);
      temp:=temp+'/'+copy(path,i,length(path)-i+1)+'/';
    end;
-
 {First remove all references to '/./'}
   while pos('/./',temp)<>0 do
    delete(temp,pos('/./',temp),2);
@@ -2911,7 +2875,6 @@ Begin
        if NewDir[Length(NewDir)]<>'/' then
         NewDir:=NewDir+'/';
        NewDir:=NewDir+Path;
-
        Delete(DirList,1,p1);
        if FStat(NewDir,Info) then
         Begin
@@ -2984,7 +2947,6 @@ end;
 
 
 Function FNMatch(const Pattern,Name:string):Boolean;
-
 Var
   LenPat,LenName : longint;
 
@@ -3320,8 +3282,8 @@ Function  IOperm (From,Num : Cardinal; Value : Longint) : boolean;
   this works ONLY as root.
 }
 
-Var Sr : Syscallregs;
-
+Var
+  Sr : Syscallregs;
 begin
   Sr.Reg2:=From;
   Sr.Reg3:=Num;
@@ -3336,13 +3298,12 @@ Procedure WritePort (Port : Longint; Value : Byte);
 {
   Writes 'Value' to port 'Port'
 }
-
 begin
-	asm
-	movl 8(%ebp),%edx
-	movb 12(%ebp),%al
-	outb %al,%dx
-	end;
+        asm
+        movl 8(%ebp),%edx
+        movb 12(%ebp),%al
+        outb %al,%dx
+        end;
 end;
 
 Procedure WritePort (Port : Longint; Value : Word);
@@ -3351,11 +3312,11 @@ Procedure WritePort (Port : Longint; Value : Word);
 }
 
 begin
-	asm
-	movl 8(%ebp),%edx
-	movw 12(%ebp),%ax
-	outw %ax,%dx
-	end ['EAX','EBX'];
+        asm
+        movl 8(%ebp),%edx
+        movw 12(%ebp),%ax
+        outw %ax,%dx
+        end ['EAX','EBX'];
 end;
 
 
@@ -3366,27 +3327,27 @@ Procedure WritePort (Port : Longint; Value : Longint);
 }
 
 begin
-	asm
-	movl 8(%ebp),%edx
-	movl 12(%ebp),%eax
-	outl %eax,%dx
-	end ['EAX','EBX'];
+        asm
+        movl 8(%ebp),%edx
+        movl 12(%ebp),%eax
+        outl %eax,%dx
+        end ['EAX','EBX'];
 end;
 
 
 
 Procedure WritePortl (Port : Longint; Var Buf; Count: longint);
 {
- Writes 'Count' longints from 'Buf' to Port
+  Writes 'Count' longints from 'Buf' to Port
 }
 begin
   asm
-	movl 16(%ebp),%ecx
-	movl 12(%ebp),%esi
-	movl 8(%ebp),%edx
-	cld
-	rep
-	outsl
+        movl 16(%ebp),%ecx
+        movl 12(%ebp),%esi
+        movl 8(%ebp),%edx
+        cld
+        rep
+        outsl
   end ['ECX','ESI','EDX'];
 end;
 
@@ -3394,16 +3355,16 @@ end;
 
 Procedure WritePortW (Port : Longint; Var Buf; Count: longint);
 {
- Writes 'Count' words from 'Buf' to Port
+  Writes 'Count' words from 'Buf' to Port
 }
 begin
   asm
-	movl 16(%ebp),%ecx
-	movl 12(%ebp),%esi
-	movl 8(%ebp),%edx
-	cld
-	rep
-	outsw
+        movl 16(%ebp),%ecx
+        movl 12(%ebp),%esi
+        movl 8(%ebp),%edx
+        cld
+        rep
+        outsw
   end ['ECX','ESI','EDX'];
 end;
 
@@ -3411,16 +3372,16 @@ end;
 
 Procedure WritePortB (Port : Longint; Var Buf; Count: longint);
 {
- Writes 'Count' bytes from 'Buf' to Port
+  Writes 'Count' bytes from 'Buf' to Port
 }
 begin
   asm
-	movl 16(%ebp),%ecx
-	movl 12(%ebp),%esi
-	movl 8(%ebp),%edx
-	cld
-	rep
-	outsb
+        movl 16(%ebp),%ecx
+        movl 12(%ebp),%esi
+        movl 8(%ebp),%edx
+        cld
+        rep
+        outsb
   end ['ECX','ESI','EDX'];
 end;
 
@@ -3430,14 +3391,13 @@ Procedure ReadPort (Port : Longint; Var Value : Byte);
 {
   Reads 'Value' from port 'Port'
 }
-
 begin
-	asm
-	movl 8(%ebp),%edx
-	inb %dx,%al
-	andl $255,%eax
-	movl %eax,12(%ebp)
-	end ['EAX','EBX'];
+        asm
+        movl 8(%ebp),%edx
+        inb %dx,%al
+        andl $255,%eax
+        movl %eax,12(%ebp)
+        end ['EAX','EBX'];
 end;
 
 
@@ -3446,14 +3406,13 @@ Procedure ReadPort (Port : Longint; Var Value : Word);
 {
   Reads 'Value' from port 'Port'
 }
-
 begin
-	asm
-	movl 8(%ebp),%edx
-	inw %dx,%ax
-	andl $65535,%eax
-	movl %eax,12(%ebp)
-	end ['EAX','EBX'];
+        asm
+        movl 8(%ebp),%edx
+        inw %dx,%ax
+        andl $65535,%eax
+        movl %eax,12(%ebp)
+        end ['EAX','EBX'];
 end;
 
 
@@ -3462,27 +3421,27 @@ Procedure ReadPort (Port : Longint; Var Value : Longint);
 {
   Reads 'Value' from port 'Port'
 }
-
 begin
-	asm
-	movl 8(%ebp),%edx
-	inl %dx,%eax
-	movl %eax,12(%ebp)
-	end ['EAX','EBX'];
+        asm
+        movl 8(%ebp),%edx
+        inl %dx,%eax
+        movl %eax,12(%ebp)
+        end ['EAX','EBX'];
 end;
 
+
 Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
 {
   Reads 'Count' longints from port 'Port' to 'Buf'.
 }
 begin
   asm
-	movl 16(%ebp),%ecx
-	movl 12(%ebp),%edi
-	movl 8(%ebp),%edx
-	cld
-	rep
-	insl
+        movl 16(%ebp),%ecx
+        movl 12(%ebp),%edi
+        movl 8(%ebp),%edx
+        cld
+        rep
+        insl
   end ['ECX','ESI','EDX'];
 end;
 
@@ -3494,12 +3453,12 @@ Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
 }
 begin
   asm
-	movl 16(%ebp),%ecx
-	movl 12(%ebp),%edi
-	movl 8(%ebp),%edx
-	cld
-	rep
-	insw
+        movl 16(%ebp),%ecx
+        movl 12(%ebp),%edi
+        movl 8(%ebp),%edx
+        cld
+        rep
+        insw
   end ['ECX','ESI','EDX'];
 end;
 
@@ -3511,25 +3470,30 @@ Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
 }
 begin
   asm
-	movl 16(%ebp),%ecx
-	movl 12(%ebp),%edi
-	movl 8(%ebp),%edx
-	cld
-	rep
-	insb
+        movl 16(%ebp),%ecx
+        movl 12(%ebp),%edi
+        movl 8(%ebp),%edx
+        cld
+        rep
+        insb
   end ['ECX','ESI','EDX'];
 end;
 {$ENDIF}
 
 
-
 Begin
   InitEpochToLocal;
 End.
 
 {
   $Log$
-  Revision 1.18  1998-09-08 13:01:51  michael
+  Revision 1.19  1998-09-18 09:56:33  peter
+    * merged
+
+  Revision 1.18.2.1  1998/09/18 09:53:46  peter
+    * fixed winsize record
+
+  Revision 1.18  1998/09/08 13:01:51  michael
   + Signal call now correctly implemented
 
   Revision 1.17  1998/08/19 00:50:31  peter