Home
Zusätzliche Online-Daten zum Buch
Contents
1. Konstante Wert Adre familie _AF_UNSPEC _0 _Nicht angegeben AF UNIX i 1 _Unix Domain Sockets _AF_NETROM 6 _Amateur Radio NetROM 7 _Reserviert f r das X 25 Projekt _AF_DECnet l 12 _Reserviert f r das DECnet Project AF SECURITY 14 _Sicherheits Callback Pseudo AF AF ROUTE __AF_NETLINK Alias zum Emulieren von 4 4BSD AF ECONET l 19 Acorn Econet AF_WANPIPE 25 _Wanpipe APl Sockets AF MAX 32 Maximalwert Die Unit definiert die folgenden Fehlerkonstanten sind alles Alias Angaben Fehlercode Wert Bedeutung _EsockEACCESS ESysEAcces Zugriff verboten EsockEFAULT EsysEFAULT Alias Es ist ein Fehler aufgetreten Kapitel 4 18 Unit Sockets Konstanten Typen und Variablen 033 _EsockEINTR __EsysEINTR Alias Operation abgebrochen __EsysEINVAL Alias Ung ltiger Wert angegeben _EsockEMFILE __ESysEmfile Fehlercode ESysEMsgSize Fehlerhafte Meldungsgr e ESysENoBufs Kein Pufferspeicher verf gbar ESysENotConn Nicht verbunden __ESysENotSock Dateideskriptor ist kein Socket EsockEPROTONOSUPPORT ESysEProtoNoSupport Protokoll wird nicht unterst tzt EsockEWOULDBLOCK ESysEWouldBlock Operation w rde blockieren Die folgenden Konstanten sind spezielle IP Adressen die h ufig ben tigt werden wenn ein Socket an eine Schnittstelle auf der lokalen Maschine gebunden werden soll Konstante Wert Beschreibung INAD
2. end Listing 04 9 dosex ex2 pp GETENV function GetEnv envvar String String GetEnv liefert den Wert der Umgebungsvariablen EnvVar Unter Linux mu EnvVar unter Ber cksichtigung der Klein und Gro schreibung angegeben werden Wenn die Umgebungsvariable EnvVar nicht definiert ist wird ein leerer String zur ckgegeben Bei einigen Betriebssystemen wie beispielsweise Unix mu die Gro und Kleinschrei bung bei der Suche nach EnvVar beachtet werden Siehe auch EnvCount und EnvStr program Examplel4 Beispiel f r die Funktion GetEnv uses Dos begin WriteLn Der aktuelle PATH ist GetEnv PATH end Listing 04 10 dosex ex14 pp GETFATTR procedure GetFAttr var f var attr Word GetFAttr ermittelt die Dateiattribute der Dateivariable F Diese kann eine typisierte untypisierte oder Textdatei sein die zugewiesen sein mu aber nicht ge ffnet sein darf Die Attribute k nnen mit den folgenden Konstanten berpr ft werden ReadOnly 01 Hidden 02 SysFile 04 Volumeld 08 Directory 10 Archive 20 Linux Unix kennt die folgenden Attribute Directory ReadOnly falls der aktuelle Proze keinen Zugriff auf die Datei hat Hidden f r Dateinamen die mit einem Punkt beginnen Fehler Fehler werden in DosError gemeldet Siehe auch SetFAttr 018 Kapitel 4 Referenz der RTL Online Daten program Examples Beispiel f r die Funktion GetFAttr
3. SEM _SEMOPM 32 Semaphor Operation 2 SEM_SETALL 17 Semaphor Operation Alle Semaphorenwerte setzen SEM UNDO 1000 Konstante fur semop Die folgenden Konstanten fiir den shmctl Befehl sind nicht weiter beschrieben SHM_LOCK 11 SHM_R 4 shl 6 SHM_RDONLY 1 shl 12 SHM_REMAP 4 shl 12 SHM_RND 2 shl 12 SHM_UNLOCK 12 SHM_W 2 shl 6 Typdeklarationen TKey cint TKey ist der durch die schliisselerzeugende Funktion ftok zur ckgegebene Typ ey_t TKey Alias fiir den Datentyp TKey sglen_t culong Typ fiir die Langendefinition von Nachrichten sgqnum_t culong Typ fiir die Numerierung von Message Queues PSHMinfo TSHMinfo TIPC_Perm record key TKey uid uid_t gid gid_t cuid uid_t cgid gid_t mode mode_t seq cushort end Die Struktur TIPC_Perm legt in allen IPC Systemen Zugriffsrechte fest Sie darf niemals direkt aufgerufen werden TMSG record msg_next PMSG msg_type LongInt msg_spot PChar msg_stime LongInt msg_ts Integer end O60 Kapitel 4 Referenz der RTL Online Daten Der TMSG Record ist fiir das Handling von Botschafts Warteschlangen implementiert Der Programmierer ben tigt nie Zugriff auf diese Daten TMSGbuf record mtype clong mtext array 0 0 of Char end Der Record TMSGbuf enth lt Daten ber eine Botschaft Dieser Record sollte niemals direkt angewandt werden stattdessen besser ein eigener R
4. Member pting to unlock Member gt of semaphore ID nlock 1 1 then ock failed aphore resources incremented by one ber Sem ID LongInt Kapitel 4 19 Unit ipc semctl O69 S TSemun begin if semctl Id 0 IPC_RMID s lt gt 1 then WriteLn Semaphore removed else DoError Couldn t remove semaphore end procedure ChangeMode ID Mode LongInt var rc LongInt opts TSEMun semds TSEMid_ds begin opts buf semds if not semctl Id 0 IPC_STAT opts lt gt 1 then DoError Couldn t stat semaphore WriteLn Old permissions were semds sem_perm mode semds sem_perm mode mode if semctl id 0 IPC_SET opts lt gt 1 then riteLn Set permissions to mode else DoError Couldn t set permissions end procedure PrintSem ID LongInt var I cnt LongInt begin ent getMembercount ID WriteLn Semaphore ID has cnt Members for I 0 to cnt 1 Do DispVal id i end procedure Usage begin WriteLn Usage semtool c reate lt count gt WriteLn 1 ock lt Member gt WriteLn u nlock lt Member gt WriteLn d elete WriteLn m ode lt mode gt Halt 1 end function StrToInt S String LongInt var M LongInt C Integer begin Val S M C if C lt gt 0 then DoError StrToInt S StrToInt
5. Die Liste in diesem Beispiel ist nicht vollst ndig Version DosVersion WriteLn Current OS version is Lo Version Hi Version end Listing 04 3 dosex ex1 pp Linux endif FreeBSD endif NetBSD endif Solaris endif DTTOUNIXDATE function DTToUnixDate DT DateTime LongInt DTToUnixDate wandelt den DOS DateTime DT in einen Unix Zeitstempel um DTTo UnixDate ist eine interne Funktion fiir Unix Plattformen sie sollte in der Anwendungs entwicklung keine Anwendung finden Siehe auch UnixDateToDT PackTime UnpackTime GetTime und SetTime ENVCOUNT function EnvCount LongInt EnvCount ermittelt die Anzahl der Umgebungsvariablen Siehe auch EnvStr und GetEnv ENVSTR function EnvStr Index LongInt String EnvStr gibt das Name Wert Paar an der Position Index aus der Liste der Umgebungs variablen zur ck Der Index des ersten Paares ist Null Fehler Die L nge ist auf 255 Zeichen begrenzt Siehe auch EnvCount und GetEnv program Examplel3 Beispiel f r die Funktionen EnvCount und EnvStr uses Dos var O14 Kapitel 4 Referenz der RTL Online Daten i LongInt begin WriteLn Current Environment is for i 1 to EnvCount do WriteLn EnvStr i end Listing 04 4 dosex ex13 pp EXEC procedure Exec const path PathStr const comline ComStr Exec f hrt das Program in Path mit den Optionen die in ComLine gegeben sind
6. Computer amp Literatur Verlag C amp L Biicher erhalten Sie im gut sortierten Buch und Fachhandel oder ber www cul de Schon gelesen Testen Sie die freeX mit dem Miniabo 3 lt Wists Solaris BB Netzwerk Virtualisierung Sicherheit ate Hot tenor 26h 2049 Enchint aiponaich ETI nes sahen oak a PF ape U vn ae Ab jetzt immer mit DVD freeX ist eine Publikation des Computer und Literaturverlag Per Fax an 0 89 20 02 81 15 oder per Post an unten stehende Adresse oder formlos per E Mail auf www cul de Antwort Computer amp Literaturverlag freeX Abo Service CSJ Postfach 140 220 D 80452 M nchen RESSE Alle 2 Monate neu im Bahnhofsbuchhandel und am Kiosk mit diesem Zeichen Drei SRE Ausgaben freeX zum Preis von zwei nur 23 80 Bin Se in Linux BSD und Solaris Administration Anwendung und Programmierung Systemsicherheit Netzwerk und Datenbanken Hardware und Peripherie www cul de Ja ich bestelle 3 Ausgaben der Zeitschrift freeX im Mini Abo zum Sonderpreis von nur 23 80 frei Haus Ich war in den letzten 12 Monaten kein freeX Abonnent Name Vorname Stra e Nr PLZ Ort Datum Unterschrift x Solte sich meine Adresse a be ich der Deutschen Bundespost meine neue Adresse dem Verlag mitzuteilen Ich w nsche folgende Zahlungsweise wie angekreuzt C Bequem und bargeldlos durch Bankabbuchung Kontonummer Bank
7. DosExitCode enth lt im niederwertigen Byte den Exitcode eines Programms das mit dem Exec Befehl ausgef hrt wurde Siehe auch Exec program Exampled Beispiel f r die Funktionen Exec und DosExitCode uses Dos begin ifdef Unix riteLn Starte bin 1s la Exec bin 1s 1a else riteLn Starte Dir Exec GetEnv COMSPEC C dir endif riteLn Programme endete mit ExitCode Lo DosExitCode end Listing 04 2 dosex ex5 pp Kapitel 4 16 Unit DOS DosVersion 013 DOSVERSION function DosVersion Word DosVersion gibt die Versionsnummer des Betriebssystems oder die Kernelversion zu r ck Das h herwertige Byte enth lt die jeweilige Unter und das niederwertige Byte die Hauptversionsnummer Hinweis Auf Systemen deren Version mehr als zwei Zahlen enthalten werden nur die ersten beiden zur ckgegeben Unter Linux finden beispielsweise nur die ersten beiden Nummern Anwendung so da beispielsweise eine Linuxversion 2 6 24 nur 2 6 ausgibt Bei Betriebssystemen die keinen speziellen Systemaufruf besitzen um die Kernelversi on mitzuteilen erh lt man eine Versionsnummer von 0 program Examplel Beispiel f r die Funktion DosVersion uses Dos var OS String 32 Version Word begin ifdef LINUX 0S ifdef FreeBSD OS ifdef NetBSD OS ifdef Solaris OS ifdef QNX OS QNX endif ifdef DOS OS Dos endif
8. uses keyboard var K K2 TKeyEvent begin InitKeyBoard WriteLn Drticken Sie eine Taste K2 0 repeat K GetKeyEvent if k lt gt 0 then begin if k2 mod 2 0 then K2 K 1 else K2 0 K TranslateKeyEvent K WriteLn Taste erhalten KeyEventToString K if K2 lt gt 0 then begin PutKeyEvent k2 K2 TranslateKeyEVent K2 WriteLn Taste gesandt KeyEventToString K2 end end until GetKeyEventChar K q DoneKeyBoard end Listing 04 57 kbdex ex5 pp q beendet das Programm RAWREADKEY function RawReadKey Char keine Beschreibung verf gbar RAWREADSTRING function RawReadString String keine Beschreibung verfiigbar RESTORESTARTMODE procedure RestoreStartMode keine Beschreibung verfiigbar Kapitel 4 22 Unit Keyboard SetKeyboardDriver 0115 SETKEYBOARDDRIVER function SetKeyboardDriver const Driver TKeyboardDriver Boolean SetKeyBoardDriver setzt dem Tastaturtreiber auf Driver falls der aktuelle Treiber noch nicht initialisiert ist Ist der aktuelle Tastaturtreiber bereits aktiv macht SetKeyboard Driver nichts mehr Vor dem Setzen des Treibers sollte der aktuelle aktive Treiber mit dem Aufruf DoneKeyboard abgeschaltet werden Die Funktion meldet True wenn der Treiber gesetzt werden konnte False wenn nicht Weitere Informationen zum Setzen des Tastaturtreibers sind im Abschnitt ab Seite 0100 nachzulesen Siehe auch
9. Attr ForeGroundColor BackGroundColor shl 4 Au erdem kann das Farbattribut auch ber ein logisches OR mit dem Blinkattribut zusammengef gt werden um ein blinkendes Zeichen zu erreichen Attr Attr or blink Es darf aber nicht unerw hnt bleiben da diese Optionen nicht von allen Treibern unterst tzt werden Der Inhalt des Arrays VideoBuf kann ver ndert werden Das entspricht einem Schrei ben auf den Bildschirm Sind alle Daten in diesen virtuellen Bildschirm geschrieben wird der Bildschirmpuffer wieder mit dem bereits erw hnten UpdateScreen in den wirklichen Bildschirmspeicher bertragen Die Aktualisierung des Bildschirms kann um die Arbeit zu beschleunigen verboten werden Daf r ist die Funktion LockScreenUpdate vorgesehen die einen internen Z h ler erh ht Solange er gr er als O ist bewirkt der Aufruf von UpdateScreen nichts Der Z hler wird mit UnlockScreenUpdate wieder verringert Hat er den Wert O erreicht aktualisiert der n chste Aufruf von UpdateScreen die Bildschirmdaten Dies ist vor allem dann sinnvoll wenn verschachtelte Funktionen eine gro e Zahl von Bildschirm ausgaben t tigen Die Unit Video besitzt auch eine Schnittstelle um eigene Bildschirmtreiber zu schrei ben Damit ist es m glich den voreingestellten Bildschirmtreiber mit einem eigenen zu berschreiben Wie das geht ist bei der Funktion SetVideoDriver erl utert Der aktuelle Bildschirmtreiber kann mit GetVideoDriver ermittelt w
10. Mausbewegungsevent Signal wenn die Maustaste losgelassen wird MouseEventBufSize 16 Die Unit Mouse besitzt einen Mechanismus f r das Puffern der Mausereignisse diese Kon stante legt die Gr e dieses Puffers fest Button Events Konstante Wert Beschreibung MouseLeftButton 01 Linke Maustaste MouseRightButton 02 Rechte Maustaste Datentypen PMouseEvent TMouseEvent Zeiger auf den Record TMouseEvent TMouseDriver record UseDefaultQueue Boolean InitDriver procedure DoneDriver procedure DetectMouse function Byte ShowMouse procedure HideMouse procedure GetMouseX function Word 094 Kapitel 4 Referenz der RTL Online Daten GetMouseY function Word GetMouseButtons function Word SetMouseXY procedure x Word y Word GetMouseEvent procedure var MouseEvent TMouseEvent PollMouseEvent function var MouseEvent TMouseEvent Boolean PutMouseEvent procedure const MouseEvent TMouseEvent end Mit dem Record TMouseDriver wird ein Maustreiber in der Funktion SetMouseDriver definiert Seine Felder m ssen vor dem Aufruf der Funktion SetMouseDriver gef llt sein TMouseEvent packed record buttons Word x Word y Word Action Word end Das Ereignis TMouseEvent ist der zentrale Datentyp der Unit Mouse es beschreibt alle Ereignisse Das Feld Buttons beschreibt welche Buttons beim Auftreten des Ereignisses gedr ckt waren die Feld
11. StrNew P1 WriteLn P2 P2 StrDispose P2 end Listing 04 17 stringex ex17 pp STRECOPY function StrECopy Dest PChar Source PChar PChar Kopiert den nullterminierten String in Source nach Dest und gibt einen Zeiger auf das Stringende also das terminierende ASCII 0 des kopierten Strings zuriick Fehler Es wird keine L ngen berpr fung durchgef hrt O26 Kapitel 4 Referenz der RTL Online Daten Siehe auch StrLCopy StrCopy und SysUtils StrECopy program Example6 Beispiel f r die Funktion StrECopy uses Strings const P PChar Das ist ein PChar String var PP PChar begin PP StrAlloc StrLen P 1 if Sizelnt StrECopy PP P Sizelnt PP lt gt StrLen P then WriteLn Hier ist was falsch else WriteLn PP PP StrDispose PP end Listing 04 18 stringex ex6 pp STREND function StrEnd p PChar PChar Liefert einen Zeiger auf das Ende von p also auf das terminierende ASCII 0 Zeichen Siehe auch StrLen und SysUtils StrEnd program Example6 Beispiel f r die Funktion StrEnd uses Strings const P PChar Das ist ein PChar String begin if Sizelnt StrEnd P SizeInt P lt gt StrLen P then WriteLn Da ist was falsch else WriteLn Alles in Ordnung end Listing 04 19 stringex ex7 pp STRICOMP function StriComp Stri PChar Str2 PChar Sizelnt Vergleicht die beiden nullterminierten Strings Str1 und Str2 und ig
12. _Hellgrau _Dunkelgrau _ Hellblau _ Hellgr n _Hellt rkis _Hellrot 13 _Hellpurpur _Gelb _Wei Blinkend falls der Treiber es erlaubt Die Angaben von 0 bis 15 und 128 k nnen nur f r den Textvordergrund gew hlt wer den f r den Hintergrund sind nur die Konstanten mit den Werten 0 bis 7 m glich Die n chsten Konstanten dienen der Abfrage der M glichkeit des Bildschirmtreibers cpUnderLine 0001 _Bildschirmtreiber erlaubt unterstrichenen Text _Bildschirmtreiber erlaubt blinkenden Text Bildschirmtreiber ist farbf hig Bildschirmtreiber unterst tzt das Austauschen der Bild schirmschriftart cpChangeMode 0010 Bildschirmtreiber erlaubt das Andern des Bildschirm modus cpChangeCursor 0020 Bildschirmtreiber erlaubt das ndern des Aussehens des Textcursors Kapitel 4 20 Unit Video Allgemeines 081 Die folgenden Konstanten definieren das Aussehen des Text Eingabecursors crHidden 0 Cursor ausgeblendet crUnderLine 1 Cursor nur unten unterstrichen crBlock 2 Blockcursor crHalfBlock 3 Halber Blockcursor Fehlerkonstanten 5 erOk nd Kein Fehler vioOK 0 Kein Fehler aufgetreten ErrorCode LongInt ErrOK Der von der letzten Operation zur ckgemeldete Fehler code Der Fehlerhandler ErrorHandler TErrorHandler DefaultErrorHandler Errorlnfo Pointer nil Die Variable ErrorHandler kann auf eine einige Fehler behandlungsrout
13. end Listing 04 38 videoex ex3 pp DEFAULTERRORHANDLER function DefaultErrorHandler AErrorCode LongInt AErrorInfo Pointer TErrorHandlerReturnValue DefaultErrorHandler ist die voreingestellte Fehlerbehandlungsroutine des Bildschirmtrei bers Hierbei werden die Fehlercode Angaben in AErrorCode und AErrorInfo in die globa len Variablen ErrorCode und ErrorInfo geschrieben und errContinue zur ckgegeben DONEVIDEO procedure DoneVideo DoneVideo schaltet den Bildschirmtreiber ab wenn er aktiv ist Ist er bereits abgeschal tet oder noch nicht initialisiert kehrt die Prozedur sofort zur ck Beim Abschalten des Bildschirmtreibers werden alle belegten Ressourcen freigegeben und falls m glich der Bildschirm wird in den Status versetzt den er vor dem Aufruf von InitVideo hatte Zus tzlich sind die beiden Speicherbereiche VideoBuf und OldVideoBuf nach dem Do neVideo nicht mehr g ltig DoneVideo sollte nach einem Aufruf von InitVideo immer die Arbeit abschlie en Schl gt der Aufruf fehl oder beim Programmende vergessen wird der Bildschirm nach dem Beenden des Programms in einem unbrauchbaren Zustand hinterlassen Ein Beispiel f r die Prozedur ist bei den meisten anderen Funktionen zu finden Fehler Normalerweise sollten keine Fehler auftreten Der Treiber meldet Fehler ber die Variable ErrorCode O86 Kapitel 4 Referenz der RTL Online Daten Siehe auch InitVideo GETCAPABILITIES function GetCapabilities
14. function GetShortName var p String Boolean Diese Funktion ist nur in den Versionen f r GO32V2 und Win32 von Free Pascal enthal ten GetShortName ndert die Dateinamensangabe in p ber einen API Aufruf in dessen 8 3 Gegenst ck Ergebnis ist der kurze Dateiname zum langen Dateinamen in p Die Funktion gibt True zur ck wenn der API Aufruf erfolgreich war Diese Funktion wird nur beim DOS Extender unter Windows 95 und h her ben tigt Fehler Ist der API Aufruf nicht erfolgreich meldet die Funktion False zur ck Siehe auch GetLongName GETTIME procedure GetTime var hour Word var minute Word var second Word var sec100 Word GetTime liefert die Systemzeit Hour wird im 24 Stunden System angegeben Die Minu ten werden in minute die Sekunden in second und die Hundertstelsekunden in sec100 zur ckgegeben Hinweis Bestimmte Betriebssysteme wie beispielsweise Amiga OS setzen das Feld sec100 immer auf Null Siehe auch GetDate und SetTime program Example3 Beispiel f r die Funktion GetTime uses Dos 020 Kapitel 4 Referenz der RTL Online Daten function LO w Word String var s String begin Str w S if w lt 10 then LO 0 s else LO s end var Hour Min Sec HSec Word begin GetTime Hour Min Sec HSec WriteLn Die aktuelle Uhrzeit WriteLn LO Hour LO Min LO Sec end Listing 04 13 dosex ex3 pp GETVERIFY procedure GetVerify var Verify Bo
15. if Buttons 0 then WriteLn Keine Maus angeschlossen else WriteLn Buttons Tasten Maus gefunden Kapitel 4 21 Unit Mouse DoneMouse 095 DoneMouse end Listing 04 45 mouseex ex1 pp DONEMOUSE procedure DoneMouse DoneMouse fahrt den Maustreiber herunter wobei der vom Treiber belegte Speicher freigegeben oder m gliche Maushooks aus dem Speicher entfernt werden Die Funk tionen der Unit Mouse funktionieren nach diesem Aufruf nicht mehr wird die Proze dur ein zweites Mal aufgerufen kehrt sie sofort zur ck Bevor DoneMouse erneut auf gerufen werden kann mu InitMouse ein weiteres Mal aufgerufen werden Ein Beispiel f r diese Prozedur ist bei den meisten anderen Mausfunktionen gezeigt Siehe auch DetectMouse und InitMouse GETMOUSEBUTTONS function GetMouseButtons Word GetMouseButtons meldet den aktuellen Tastenstatus der Maus das hei t sie gibt eine mit OR verbundene Kombination der folgenden Konstanten zur ck _MouseLeftButton Die linke Maustaste ist gedr ckt Siehe auch GetMouseEvent GetMouseX GetMouseY program Example2 Beispiel f r die Funktion GetMouseButtons uses mouse begin InitMouse WriteLn Rechte Maustaste beendet das Programm while GetMouseButtons lt gt MouseRightButton do Dummy DoneMouse end Listing 04 46 mouseex ex2 pp GETMOUSEDRIVER procedure GetMouseDriver var Driver TMouseDriver GetMouseDriver ergibt den aktuell gese
16. m glich Eine Ausnahme hiervon stellt der Linux Kernel bereit Die Terminalemulation des Linux Kernels ist aus Sicht einer PC Tastatur zwar ebenfalls hoffnungslos primitiv aber im Gegensatz zu den anderen Terminal Emulatoren voll konfigurierbar Auf der Linux Konsole versucht die Unit Keyboard von Free Pascal den vollen Funktionsumfang zu implementieren Wird die Unit Keyboard in Programme eingebunden besitzen diese einen vollen Funk tionsumfang auf der Linux Konsole Es mu sich aber um eine nackte Konsole han deln ein SSH in eine andere Maschine zerst rt die volle Funktionalit t Andernfalls liegt ein eingeschr nkter Funktionsumfang vor Einige Bemerkungen zum vollen Funktionsumgang bei Linux Wird die Tastatur umprogrammiert und aus irgendeinem Grund nicht in ihren Originalzustand zur ckversetzt mu die Tastaturbelegung mit dem Kommando zeilenbefehl reset neu geladen werden um sie zu reinitialisieren Alt in Kombination mit Funktionstasten erzeugt Steuercodes f r diese Tasten Um zwischen virtuellen Konsolen umzuschalten mu mit der Tastenkombination Strg Alt Fxx gearbeitet werden Im Gegensatz zu anderer Unix Software erzeugt Esc eine Tastaturcode f r Esc ohne Wartezeit Die eingeschr nkte Funktionalit t hat die systembedingten Probleme Schw chen Die Esc Taste mu damit sie wirksam ist zweimal gedr ckt werden Wird auf der Linux Konsole mit einem Programm gearbeitet mit dem a
17. procedure PError const S String begin WriteLn S SocketError Halt 100 end Kapitel 4 18 Unit Sockets Connect 045 var SAddr TInetSpckAddr Buffer String 255 S LongInt Sin Sout Text i Integer begin S Socket AF_UNIX SOCK_STREAM 0 if SocketError lt gt 0 then Perror Client Socket SAddr Sin_family AF_INET port 50000 in network order SAddr Sin_port htons 50000 localhost 127 0 0 1 in network order SAddr Sin_addr s_addr HostToNet 127 shl 24 or 1 if not Connect S SAddr Sin Sout then PError Client Connect Reset Sin ReWrite Sout Buffer This is a textstring sent by the Client for i 1 to 10 do WriteLn Sout Buffer Flush Sout ReadIn SIn Buffer Writeln Buffer Close Sout end Listing 04 33 sockex sockcli pp program pfinger uses Sockets Errors var Addr TInetSockAddr S LongInt Sin Sout Text Line String begin Addr family AF_INET port 79 in network order Addr Sin_port 79 shl 8 localhost 127 0 0 1 in network order Addr Sin_addr s_addr 1 shl 24 or 127 S Socket AF_INET SOCK_STREAM 0 if not Connect S Addr Sin Sout then begin riteLn Couldn t connect to localhost riteLn Socket error strerror SocketError Halt 1 end ReWrite Sout Reset Sin WriteLn Sout ParamStr 1 Flush Sout while not EoF Sin
18. Funktionen und Prozeduren werden nur noch f r das Portieren alter Turbo Pascal Routinen gepflegt F r das Entwickeln neuer und moderner Programme wird dringend empfohlen anstelle dieser Unit die neuere Unit SysUtils einzubinden Die Unit DOS bindet die Unit BaseUnix ein 4 16 1 Konstanten Typen und Variablen Konstanten DATEIMODUS KONSTANTEN Die folgenden Konstanten werden im Feld Mode des Record TextRec ben tigt Sie geben Auskunft ber den Dateimodus der Textein und Textausgabe siehe Tabelle 04 1 Konstante Beschreibung Wert fmclosed Datei ist geschlossen OD7BOh OD7Blh _imovtput______ Datei ist nur zum Schreiben 0D7B2h fminout Datei darf gelesen und geschrieben werden OD7B3h Tabelle 04 1 Die Dateimodus Konstanten DATEIATTRIBUTE Die Dateiattribute Konstanten werden in FindFirst und FindNext fiir die Definition ben tigt nach welchen Dateitypen zus tzlich zu normalen Dateien solchen ohne Attribute gesucht werden soll Diese Flags gelten au erdem in den Routinen SetFAttr und GetFAttr f r das Setzen und Auslesen der Attribute von Dateien Zusammenge stellt sind sie in Tabelle 04 2 Konstante Beschreibung Wert readonly Schreibschutzattribut Datei ist das Volume Label Datentr gerkennung Attribut f r Verzeichnisse Archivattribut Attribut das auf alle Dateien pa t Tabelle 04 2 M gliche Dateiattribute Kapitel 4 16 Unit DOS Langenbeschreibungen 09 L NGENBESCHREIBUNG
19. MOAST EXCLUDE ee Lee Undokumention u 4 MCAST INCLUDE ______ ____Undokumentiert MCAST_ JOIN GROUP 42 Quellgruppe beitreten MCAST BLOCK SOURCE 43 Block from given group _MCAST UNBLOCK SOURCE 44 Unblock from given group MCAST MSFILTER 48 O36 Kapitel 4 Referenz der RTL Online Daten Die folgenden Konstanten sind Optionen fiir das Senden und Empfangen von Messages mit Datagrammen Konstante Wert Beschreibung MSG_CONFIRM 0800 Send flags onfirm connection MSG_CTRUNC 0008 Receive flags Control Data was discarded buffer too small MSG_DONTWAIT 0040 Receive flags Non blocking operation re quest MSG_NOSIGNAL 4000 Receive flags Suppress SIG PIPE signal i MSG_PEEK 0002 Receive flags peek at data don t remove from buffer MO SYN 0400 Receive flags 2 MSG_TRUNC 0020 Receive flags packet Data was discarded Sn a u se oe buffer too small a MSG_TRYHARD MSG_DONT Receive flags ee ROUTE cnn MSG_WAITALL 0100 Receive flags Wait until operation com pleted Die folgenden typisierten Konstanten stellen besondere Internet Adressen dar Konstante Datentyp Vorbelegung Beschreibung Konstante die eine ung ltige keine Netz Netzwerkadresse mitteilt NoNet in addr s addr 0 Konstante die eine ung ltige keine Netz werkadresse mitteilt NoNet6 ind_addr u6_addr16 Konstante die eine ung ltige keine IPv6 0 0 0 0 0 0 0
20. Sem Semopts Val Initial val for Count 0 semct l Creat end S procedure lockSe var lock TSEMbuf begin with lock do b sem_num 0 sem_op sem_flg end if Member lt 0 DoError se if getsemval DoError Se lock sem_num Writeln Atte gt o c if semop Id DoError else WriteLn Se dispval ID Me end s Loc procedure Unloc var Unlock begin with Unlock do sem_num 0 sem_op sem_flg end if Member DoError se if getsemva DoError Se Unlock sem_nu WriteLn Atte Member if semop Id DoError else WriteLn Se dispval ID Me end TSEMb A 0 nn n procedure Remove var D a p e 1 Kapitel 4 Referenz der RTL Online Daten emget key Members IPC_CREAT or IPC_Excl or 438 1 then aphore set already exists MaxSemValue ue of semaphores to Members 1 do eSem count SEM_SETVAL semopts m ID Member LongInt egin 14 PC_NOWAIT or Member gt GetMemberCount ID 1 then aphore Member out of range Member 0 then phore resources exhausted no lock Member ting to lock Member Member aphore ID ock 1 1 then failed aphore resources decremented by one ber Sem ID Member LongInt f begin PC_NOWAIT or Member gt GetMemberCount ID 1 then aphore Member out of range D Member MaxSemValue then aphore not locked
21. Typen und Variablen c ccceeeesseeeeeeteeeeeeeeteeeeeees O80 4 20 3 Prozeduren und Funktionen ccccccccccccecseesssceeeceeeeeeeeeesssseeeees 085 4 21 Unit Mouse cssss00ssssonnnnsnssssnnnnsnnsnnnnsnnssnnnssnsennnnsnssnnnnssnsennennn OIG 4 21 1 Konstanten Typdeklarationen und Variablen 093 4 21 2 Prozeduren und Funktionen cuueeeeeesssssssnnnnennessssssennnnnnnenenennn O94 4 22 Unit Keyboard ccscsscccsssscrsssccssssccssscccsssccssscscssccsssscsssssssess DOQQ 4 22 1 Spezielle Hinweise zu Unix ueeessssssssssnnnenssnnnnenesnnnnennennnnen 099 4 22 2 Tastaturtreiber schreiben cccccccccsseseceeceeesneeeeeeeneeeeeesnseeees O100 4 22 3 Konstanten Typen und Variable umesnnnennennen 0105 4 22 4 Prozeduren und Funktionen uusesssssnssssenenneneenennneennnnen nen 0108 Stichwortverzeichnis usuuaunununanannununnnn 0109 OG Inhalt KAPITEL 4 ERGANZUNG REFERENZ DER RTL ONLINE DATEN Die folgenden Abschnitte enthalten die Dokumentation der Units DOS Strings IPC Sockets Keyboard Video und Mouse von Free Pascal 2 2 x Dieses Dokument ist eine Erg nzung zu den Daten des gedruckten Buchs und wie dieses urheberrechtlich ge sch tzt Die Datei wird als Probe und Referenzabschnitt vom C amp L Verlag exklusiv auf seinen Webseiten zur Verf gung gestellt und darf nicht an anderer Stelle ohne vorhe rige schriftliche G
22. di f6 ds f7 es f8 flags fs gs Word 1 al ah f9 f10 bl bh fll 12 cl ch 13 14 dl dh Byte 2 eax ebx ecx edx ebp esi edi LongInt end ENDIF HAS_REGISTERS ENDIF CPUI386 Der Typ DateTime wird in PackTime und UnPackTime benutzt um das Dateidatum mit GetFTime und SetFTime setzen oder ermitteln zu k nnen DateTime record Year Word Month Word Day Word Hour Word Min Word Sec Word end Kapitel 4 16 Unit DOS AddDisk 011 Variablen DosError Integer In der Variable DosError wird von den Prozeduren in der Unit DOS ein Fehler gespei chert DosError kann die folgenden Werte annehmen Wert Bedeutung 2 Datei nicht gefunden Ung ltiges Handle 10 Ung ltige Umgebung 18 Zu viele Dateien Tabelle 04 3 Fehlerkennungen in der Unit DOS Andere Werte sind m glich aber nicht dokumentiert 4 16 2 Prozeduren und Funktionen ADDDISK function AddDisk const path String Byte AddDisk f gt einen Dateinamen path zur internen Laufwerksliste hinzu und ist nur unter Linux implementiert Die Laufwerksliste bestimmt welches Laufwerk in den Befehlen DiskFree und DiskSize benutzt wird DiskFree und DiskSize ben tigen eine Datei auf dem ausgew hlten Laufwerk es wird beim Aufruf der Systemfunktion statfs ben tigt Die Na men werden aufeinanderfolgend hinzugef gt Die vier ersten Eintr ge sind vordefiniert f r das aktuelle L
23. uses Dos var Attr Word f File begin Assign f ParamStr 1 GetFAttr f Attr WriteLn File ParamStr 1 besitzt die Attribute Attr if Attr and archive lt gt then WriteLn Archive if Attr and directory lt gt 0 then WriteLn Directory if Attr and readonly lt gt then WriteLn Read Only if Attr and sysfile lt gt 0 then WriteLn System if Attr and hidden lt gt then WriteLn Hidden end Listing 04 11 dosex ex8 pp ooo0o0o0 GETFTIME procedure GetFTime var f var time LongInt GetFTime ermittelt die Uhrzeit der letzten Datei nderung Die Funktion UnPackTime entschl sselt die Zeit aus dem LongInt Format F mu eine Dateivariable sein die zugewiesen und ge ffnet wurde Fehler Fehler werden in DosError gemeldet Siehe auch SetFTime PackTime und UnPackTime program Example9 Beispiel f r die Funktion GetFTime uses Dos function LO w Word String var s String begin Str w s if w lt 10 then LO QF a iS else LO S end var f File Time LongInt DT DateTime begin if Paramcount gt 0 then Assign f ParamStr 1 else Assign f ex9 pp Reset f GetFTime f Time Close f UnPackTime Time DT Write Die Datei ParamStr 1 gt wurde letztmalig ge ndert am Writeln LOCDT Month LO DT Day DT Year um LO DT Hour LO DT Mi
24. 0 Netzwerkadresse mitteilt i Kapitel 4 18 Unit Sockets Konstanten Typen und Variablen 037 Die folgenden Konstanten legen die Protokollfamilie fest Sie werden im Aufruf von der Prozedur Socket ben tigt Konstante Wert Protokollfamilie PF APPLETALK AF APPLETALK Appletalk DDP PE ASH AF ASH _PF ATMSVC AF ATMSVC ATM SVCs _PF BRIDGE AF BRIDGE Multiprotocol Bridge _PF_INET AF INET Internet IP Protokoll PF LIC AF LLC Linux LLC PF NETBEUI AF NETBEUI Reserviert f r das 802 2LLC Projekt PF PACKET AF PACKET Packer Familie PF ROSE AF ROSE Amateur Radio X 25 PLP PF SNA AF SNA Linux SNA Projekt PF_UNSPEC AF_UNSPEC Unspezifiziert PF X25 AF X25 Reserviert f r das X 25 Projekt Die folgenden Konstanten sind Optionen fiir das Datagram SendMsg Konstante Wert Beschreibung SCM_SRCRT IPV6_RXSRCRT Undokumentierte Getsockopt Option SCM_TIMESTAMP SO_TIMESTAMP Socket Option Die folgenden Konstanten steuern das Herunterfahren von Sockets Konstante Beschreibung Leseanteil des Voll Duplex Sockets herunterfahren SHUT _RDWR Lese und Schreibanteil des Voll Duplex Sockets herunterfah ren 038 Kapitel 4 Referenz der RTL Online Daten Die folgenden Konstanten identifizieren verschiedene Socket Typen wie sie f r die Routine Socket ben tigt werden Konstante Wert Beschreibung SOCK STREAM ____ 1 Soc
25. Konstanten f r das Dr cken der Funktionstasten Konstante Code Taste _kbdF1 FFO1 F1 wurde gedr ckt _kbdF3 FFO3 F3 wurde gedr ckt _kbdF6 FFO6 F6 wurde gedr ckt _kbdF9 FFO9 F9 wurde gedr ckt kbd F12 FFOC F12 wurde gedr ckt kbd F15 FFOF F15 wurde gedr ckt kbd F18 FF12 F18 wurde gedr ckt kbdF20 FF14 F20 wurde gedr ckt Die Windows Tasten Konstante Code Taste kbdLWin FF15 Linke Windows Taste wurde gedr ckt K Rechte Windows Taste wurde gedr ckt kbdApps FF17 Die Anwendungstaste Popup Men wurde gedr ckt Kennungen f r die Flags von TKeyCode Konstante Wert Beschreibung _kbASCII 00 Events f r ASCIl Code Events f r Unicode Funktionstaste wurde gedr ckt k Physikalisches Tastenereignis kbReleased 04 Event beim Loslassen der Taste Strings f r die Tastenbeschreibungen in den Routinen zur Beschreibung der Tastatur Events SAnd String AND Diese Konstante wird den Routinen die die Tasta turevents beschreiben als Wort And in Tastenbe schreibungen verwendet Der String kann bei Be darf fur die Lokalisierung der Beschreibungen ge ndert werden Kapitel 4 22 Unit Keyboard Allgemeines 0107 SKeyPad Array O FF2F kbdHo Die Konstante beschreibt alle Tasten des Ziffern me of String Home Up Cursorblocks Sie wird von den Routinen zur Be PgUkp
26. Left Middle Right schreibung der Tastenevents ben tigt und kann bei End Down PgDn Insert Bedarf lokalisiert werden Delete 2 SLeftRight array 1 2 of String Die Konstante beschreibt linke und rechte Tasten LEFT RIGHT Sie wird von den Routinen zur Beschreibung der Tastenevents ben tigt und kann bei Bedarf lokali siert werden SScanCode String Die Konstante enthalt einen String fUr den Hinweis Key with scancode auf Scancode Events Sie wird von den Routinen zur Beschreibung der Tastenevents ben tigt und kann bei Bedarf lokalisiert werden SShift Array 1 3 of String Diese Konstante enth lt die Beschreibungen der SHIFT CTRL ALT Modifizierertasten Sie wird von den Routinen zur Beschreibung der Tastenevents ben tigt und kann sa eo bei Bedarf lokalisiert werden le SUnicodeChar String Die Konstante enth lt einen String f r den Hinweis Unicode character auf Unicode Events Sie wird von den Routinen zur Beschreibung der Tastenevents ben tigt und kann bei Bedarf lokalisiert werden SUnknownFunctionKey String Die Konstante enth lt einen String mit dem Hin Unknown function key weis da eine unbekannte Funktionstaste bet tigt wurde Sie wird von den Routinen zur Beschreibung der Tastenevents ben tigt und kann bei Bedarf lokalisiert werden Typdeklarationen TKeyboardDri
27. M end var Key TKey ID LongInt 070 Kapitel 4 Referenz der RTL Online Daten const ipckey 0 begin if ParamCount lt 1 then Usage key ftok ipckey 1 Ord s Case UpCase Paramstr 1 1 of C begin if ParamCount lt gt 2 then Usage CreateSem key StrToInt ParamStr 2 end L begin if ParamCount lt gt 2 then Usage ID OpenSem key LockSem ID StrToInt ParamStr 2 end U begin if ParamCount lt gt 2 then Usage ID OpenSem key UnLockSem ID StrToInt ParamStr 2 end M begin if ParamCount lt gt 2 then Usage ID OpenSem key ChangeMode ID StrToInt ParamStr 2 end D Begin ID OpenSem Key RemoveSem Id end P begin ID OpenSem Key PrintSem Id end else Usage end end Listing 04 36 ipcex semtool pp SEMGET function semget key TKey nsems cint semflg cint cint semget gibt die ID des durch key beschriebenen Signalsystems zur ck In Abh ngigkeit vom Inhalt des Parameters semfls k nnen die folgenden Aktionen durchgef hrt werden Verkn pfung ber OR m glich APC CREAT n Das System wird angelegt falls es noch nicht vorhanden ist IPC_EXCL Dieses Flag kann nur zus tzlich zur IPC_CREAT Option angegeben werden und bewirkt einen Fehler wenn das Signalsystem bereits vor handen ist Die Flags k nnen mit Zugriffsrechten ber OR verkn pft werden die die gle
28. Operationen auf den gemeinsam nutzbaren Speicherblock aus der durch die ID shmid identifiziert wird Der Parameter buf zeigt auf einen TSHMid_ds Record der f r die Operation verwendet werden soll Der Parameter cmd bestimmt welche Operation ausgef hrt werden soll Folgende Werte sind m glich IPC_STAT shmctl f llt den TSHMid_ds Record auf den buf verweist mit Informationen __tber den gemeinsam genutzten Speicherblock shmctl wendet die Werte im ipc_perm Record auf den Speicherblock an shmctl entfernt den Speicherblock aus dem System nachdem alle Prozesse sich von ihm abgekoppelt haben Falls erfolgreich liefert die Funktion True ansonsten False Fehler Bei einem Fehler wird false zur ckgeliefert und IPCError wird gesetzt Siehe auch shmget shmat und shmdt program shmtool uses ipc Strings Baseunix const SegSize 100 var key TKey ShmID cntr LongInt SegPtr PChar procedure Usage begin WriteLn Usage shmtool w rite text WriteLn r ead WriteLn d elete WriteLn m ode change mode Halt 1 end procedure Writeshm ID LongInt ptr PChar S String begin StrCopy ptr s end procedure ReadSHM ID LongInt ptr PChar begin WriteLn Read ptr end procedure RemoveSHM ID LongInt begin ShmCt1 1D IPC_RMID NIL WriteLn Shared memory marked for deletion end procedure ChangeMode ID LongInt mode String var Kap
29. SocketError enthalt den Fehlercode der letzten Socket Operation Fragt den letzten Socket Fehler ab SOCKETPAIR function SocketPair Domain LongInt SocketType LongInt Protocol LongInt var Pair TSockArray LongInt Hinweis Diese Funktion ist veraltet SocketPair erstellt zwei Sockets in der Dom ne Domain vom Typ SocketType und ver wendet das Protokoll Protocol Die beiden werden in Pair zuriickgegeben und sind unvereinbar Die Funktion liefert 1 bei einem Fehler und 0 bei Erfolg zuriick Fehler Fehler werden in SocketError gemeldet und sind die gleichen wie in Socket Siehe auch Str2UnixSockAddr STR2UNIXSOCK DDR procedure Str2UnixSockAddr const addr String var t TUnixSockAddr var len LongInt Str2UnixSockAddr ndert eine Unix Socket Adresse in einen String einer Struktur TU nixSockAddr die an eine Bind Anweisung bermittelt werden kann Siehe auch Socket und Bind STRTOHOSTADDR function StrToHostAddr IP AnsiString in_addr StrToHostAddr wandelt den String in JP in eine Hostadresse um und gibt diese zuriick Fehler Bei einem Fehler wird die Hostadresse mit Nullen gefiillt Siehe auch NetAddrToStr HostAddrToStr und StrToNetAddr STRTOHOSTADDR6 function StrToHostAddr6 IP String Tin6_addr StrToHostAddr6 wandelt den String in IP in eine IPv6 Hostadresse um und gibt diese zur ck Fehler Bei einem Fehler wird die Hostadresse mit Nullen gef llt Siehe auch NetAddrToStr6 HostAddrToStr6 und StrToHostAd
30. Zahl von Suchrecords ge ffnet wird Deshalb wurde um das FindFirst FindNext System zu beschleunigen der FindClose Befehl implementiert der einen nicht mehr ben tigten Suchvorgang abschlie t und das zugeh rige Verzeichnis schlie t Wenn man einen SearchRec also nicht mehr ben tigt teilt man das der Unit DOS mit dem Aufruf FindClose mit womit der SearchRec geschlossen und der Tabellenslot freigegeben wird Hinweis Es wird empfohlen unter Linux nach Dateien mit dem Befehl Glob zu su chen Fehler Fehler werden ber DosError bekanntgegeben Siehe auch FindFirst und FindNext Kapitel 4 16 Unit DOS FindFirst 015 FINDFIRST procedure FindFirst const path PathStr attr Word var f SearchRec FindFirst leitet die Suche nach der durch path spezifizierten Datei mit den Attributen Attr ein Die Prozedur speichert alle ben tigten Daten um die Suche weiterzuf hren im Record f Path kann Wildcard Zeichen das Zeichen entspricht einer beliebig lan gen Folge von beliebigen Zeichen entspricht einem einzigen beliebigen Zeichen enthalten Wird eine den Angaben entsprechende Datei gefunden wird diese in F ge speichert und 0 in DosError gespeichert Eine mit FindFirst initialisierte Suche kann mit FindNext fortgesetzt und FindClose beendet werden Unter OS 2 k nnen keine zwei unterschiedlichen FindFirst Aufruf parallel gestartet werden Es mu immer zuerst der eine Suchlauf beendet werden bevor der zweite gestartet werd
31. arrayl1 1 of Byte Attr Byte Time LongInt Size LongInt Reserved Word Name String SearchSpec String NamePos Word end FileRec ist f r die interne Repr sentation von typisierten und untypisierten Dateien Textdateien werden in den folgenden Typen gespeichert const filerecnamelength 255 type 010 Kapitel 4 Referenz der RTL Online Daten FileRec packed record Handle Mode LongInt RecSize Sizelnt _private array 1l 3 SizeOf SizeInt 5 SizeOf Pointer of Byte UserData array 1 32 of Byte name arraylO filerecnamelength of Char end Die Definition des Textpuffers const TextRecNameLength 256 TextRecBufSize 256 type TextBuf array O TextRecBufSize 1 of Char TextRec packed record Handle THandle Mode LongInt bufsize Sizelnt _private Sizelnt bufpos Sizelnt bufend Sizelnt bufptr Textbuf openfunc Pointer inoutfunc Pointer flushfunc Pointer closefunc Pointer UserData array 1 32 of Byte name array 0 TextRecNamelength 1 of Char buffer TextBuf end Hinweis Diese Deklaration ist nicht bin rkompatibel zu ihrem Gegenst ck aus Turbo Pascal da sich die Gr e der einzelnen Felder ge ndert hat Dies ist der Record der CPU Register f r den Aufruf der Prozedur MsDos IFDEF CPUI386 IFNDEF HAS_REGISTERS Registers packed record case i Integer of 0 ax fl bx f2 cx f3 dx f4 bp f5 si f51
32. aus Nachdem das Program beendet wurde kehrt die Prozedur zurtick Der Exit Code kann durch die Funktion DosExitCode bestimmt werden Fehler Fehler werden in DosError ausgegeben Ein Beispiel ist bei der Erl uterung zu DosExitCode gezeigt Siehe auch DosExitCode FEXPAND function FExpand const path PathStr PathStr Beschreibung FExpand erweitert den Parameter path zu einer absoluten Pfadangabe bestehend aus Laufwerksbuchstabe unter DOS Windows OS 2 Pfadangabe und Dateiname Auf Dateisystemen die zwischen Gro und Kleinschreibung unterschei den wie Linux und Unix bleiben die Dateinamen unver ndert sonst werden sie in Gro buchstaben konvertiert Siehe auch FSplit program Examplell Beispiel f r die Funktion FExpand uses Dos begin WriteLn Der vollst ndige Name dieses Programms ist FExpand ParamStr 0 end Listing 04 5 dosex ex11 pp FINDCLOSE procedure FindClose var f SearchRec FindClose gibt alle zum Suchrecord f geh renden Ressourcen frei Der Aufruf gibt die von den Aufrufen FindFirst und oder FindNext belegten Ressourcen wieder frei wozu die Unix Implementation der Unit DOS eine Tabelle mit offenen Verzeichnissen bereit stellt Wenn die Tabelle voll ist wird eines der Verzeichnisse geschlossen und ein wei teres gedffnet Dieses System funktioniert gut und ist im Grund vergleichbar mit der urspr nglichen DOS Implementation ist aber verh ltnism ig langsam wenn eine gro e
33. das Programm repeat K GetKeyEvent K TranslateKeyEvent K if GetKeyEventFlags K lt gt KbfnKey then WriteLn Keine erweiterte Taste else begin Write Erhaltene Taste GetKeyEventCode K WriteLn KeyEventToString K end until GetKeyEventChar K q DoneKeyboard end Listing 04 52 kbdex ex2 pp GETKEYEVENTFLAGS function GetKeyEventFlags KeyEvent TKeyEvent Byte GetKeyEventFlags gibt den Flags Anteil des bergebenen TKeyEvent Records zur ck Ein Beispiel fiir diese Funktion ist bei GetKeyEvent gezeigt Kapitel 4 22 Unit Keyboard GetKeyEventShiftState 0111 Siehe auch GetKeyEventUniCode GetKeyEventShiftState GetKeyEventCode GetKeyE ventChar und GetKeyEvent GETKEYEVENTSHIFTSTATE function GetKeyEventShiftState KeyEvent TKeyEvent Byte GetKeyEventShiftState gibt den Shiftstatus des angegebenen TKeyEvent Records KeyE vent zur ck Hiermit wird ermittelt ob eine der Modifizierer Tasten Shift Alt oder Strg zusammen mit der normalen Taste gedr ckt wurde Wurde keine der Sonderta sten bet tigt wird 0 zur ckgegeben Diese Funktion zeitigt nicht immer das erwartete Ergebnis In einem X Terminal unter Unix ist nicht garantiert da die Modifizierertasten immer funktionieren Siehe auch GetKeyEventUniCode GetKeyEventFlags GetKeyEventCode GetKeyEventChar und GetKeyEvent program Example3 Beispiel f r die Funktion GetkeyEventShiftState uses
34. do begin ReadLn Sin line riteln line end Close Sin 046 Kapitel 4 Referenz der RTL Online Daten Close Sout end Listing 04 34 Listing sockex pfinger pp FPACCEPT function fpAccept s cint Addrx psockaddr Addrlen PSocklen cint fpAccept nimmt eine Verbindung vom Socket s entgegen der auf eine Verbindung ge lauscht hat Wird eine Verbindung akzeptiert wird ein Dateideskriptor eine positive Zahl zur ckgegeben beim Auftreten eines Fehlers der Wert 1 Uber den zur ckgege benen Socket d rfen keine weiteren Verbindungen angenommen werden F r diesen Zweck bleibt der Original Socket ge ffnet Der Aufruf fpAccept f llt die Adresse in Addrx und setzt die L nge in Addrlen Addrx sollte auf einen Bereich mit gen gend Platz zeigen Addrlen sollte auf die Gr e des an dieser Stelle vor dem Aufruf befindlichen freien Speichers gesetzt werden Fehler Bei einem Fehler werden 1 und der Fehler in SocketError zur ckgegeben Die folgenden Fehlerwerte k nnen auftreten x SYS _EBADF Der Socket Deskriptor ist ung ltig _SYS_ENOTSOCK Der Deskriptor ist kein Socket S Der Sockettyp unterst tzt die Operation Listen nicht Addr zeigt aus dem g ltigen Adre bereich heraus SYS EWOULDBLOCK Die angeforderte Operation w rde den Proze blockieren Siehe auch fpListen fpConnect und fpBind F r ein Listingbeispiel siehe sockex socksvr pp bei der Funktion Accept FPBIND function
35. function ShortHostToNet Host Word Word ShortHostToNet wandelt eine Host Portnummer in eine Netzwerk Portnummer um Dabei wird die Endianness der Hostmaschine beriicksichtigt Siehe auch ShortNetToHost HostToNet NToHS und HToNS SHORTNETTOHOST function ShortNetToHost Net Word Word ShortNetToHost wandelt eine Netzwerk Portnummer in eine Host Portnummer um Dabei wird auf die Endianness der Hostmaschine Riicksicht genommen Siehe auch ShortNetToHost HostToNet NToHS und HToNS SHUTDOWN Sock LONGINT How LONGINT LONGINT Shutdown beendet eine bidirektionale Verbindung die durch Sock beschrieben wird How legt fest wie die Verbindung beendet wird 0 Weiterer Empfang ist untersagt 1 Weiteres Senden ist untersagt 2 Weder Senden noch Empfangen sind erlaubt O56 Kapitel 4 Referenz der RTL Online Daten War die Funktion erfolgreich wird 0 bei einem Fehler 1 zuriickgeliefert Fehler SocketError zur Fehlermeldung enth lt das folgende _SYS_EBADF Der Socketdeskriptor ist ung ltig Der Socket ist nicht verbunden Der Deskriptor ist kein Socket Siehe auch Socket und Connect SOCK2FILE procedure Sock2File Sock LongInt var SockIn File var SockOut File Sock2File wandelt den Socket Sock in zwei Pascal Dateideskriptoren des Typs File um einen zum Lesen aus dem Socket SockIn und einen fiir das Schreiben in den Socket SockOut Siehe auch Socket und Sock2Text SocK2TEXT
36. gesetzten Datentypen PIPC_Perm TIPC_Perm Zeiger auf den Record TIPC_Perm PMSG TMSG Zeiger auf den Record TMSG PMSGbuf TMSGbuf Zeiger auf den Record TMsgBuf PMSGinfo TMSGinfo Zeiger auf den Record TMSGinfo PMSQid_ds TMSQid_ds Zeiger auf TMSQid_ds PSEMbuf TSEMbuf Zeiger auf den Record TSembuf PSEMid_ds TSEMid_ds Zeiger auf den Record TSEMid_ds PSEMinfo TSEMinfo Zeiger auf den Record TSEMinfo PSEMun TSEMun Zeiger auf den Record TSEMun PShmid_DS TShmid_ds Zeiger auf den Record TSHMid_ds 4 19 2 Prozeduren und Funktionen FTOK function ftok Path PChar ID cint TKey ftok gibt einen Schl ssel zur ck der in einem semget shmget oder msgget Befehl auf eine neue oder bereits vorhandene IPC Ressource zugreifen kann Path ist der Name einer Datei im Dateisystem ID ist ein beliebiges Zeichen ftok bewirkt das gleiche wie sein Gegenst ck in C ein Pascalprogramm und ein C Programm greifen auf die glei chen Ressourcen zu falls sie den gleichen Pfad und die gleiche ID benutzen Fehler ftok gibt 1 zur ck falls die Datei in Path nicht vorhanden ist Siehe auch semget shmget und msgget Beispiele f r die Funktion sind bei msgctl semctl und shmctl gezeigt MSGCTL function msgctl msgid cint cmd cint buf PMSQid_ds cint msgctl f hrt verschiedene Operationen in der Botschafts Warteschlange mit der ID msqid aus Die Operation h ngt vom cmd Param
37. keyboard var K TKeyEvent S Byte begin InitKeyBoard Write Dricken Sie eine Taste in Kombination mit Strg Shift Alt WriteLn oder beenden Sie mit q repeat K GetKeyEvent K TranslateKeyEvent K S GetKeyEventShiftState K if S 0 then WriteLn Keine Sondertaste gedr ckt else begin WriteLn Ermittelte Sondertasten ShiftStateToString K False WriteLn Empfangene Taste KeyEventToString K end until GetKeyEventChar K q DoneKeyboard end Listing 04 53 kbdex ex3 pp GETKEYEVENTUNICODE function GetKeyEventUniCode KeyEvent TKeyEvent Word GetKeyEventUniCode liefert den Unicode Anteil des angegebenen TKeyEvent Records KeyEvent falls dieser ein bersetztes Unicode Zeichen enth lt Siehe auch GetKeyEventShiftState GetKeyEventFlags GetKeyEventCode GetKeyEvent Char und GetKeyEvent INITKEYBOARD procedure InitKeyboard InitKeyboard initialisiert den Tastaturtreiber Ist er schon aktiv kehrt die Prozedur sofort zur ck Ist der Treiber initialisiert k mmert er sich um alles was n tig ist da die Tastatur richtig ausgewertet werden kann wozu auch das Anfordern von Speicher das Initiali sieren des Terminals und so weiter geh rt 0112 Kapitel 4 Referenz der RTL Online Daten Diese Prozedur mu einmal aufgerufen werden bevor andere Tastaturfunktionen benutzt werden Beim Beenden des Programms mu der Treiber mit DoneKeyboard w
38. liefert ein treiberabh ngiges Tastenereignis Dieser Event kann dann mit der Funktion Trans lateKeyEvent in ein interpretierbares Ereignis umgewandelt werden Das Ergebnis die ses Aufrufs kann dann in den anderen Untersuchungsfunktionen f r Tastaturereignisse verarbeitet werden Ein eigener Tastaturtreiber wird mit der Funktion SetKeyboardDriver installiert den aktuellen ermittelt GetKeyboardDriver Im letzten allgemeinen Abschnitt dieses Kapitels wird gezeigt wie ein eigener Tasta turtreiber entwickelt wird Ein Teil der Funktionen in dieser Unit ist derzeit nicht dokumentiert was jeweils ent sprechend angegeben ist 4 22 1 Spezielle Hinweise zu Unix Unter Unix laufen Programme in einem Terminal und die Programme die auf den Bildschirm schreiben und von der Tastatur lesen kommunizieren mit dem Terminal Die Tastaturbehandlung unter Unix ist gr tenteils abw rtskompatibel zum DEC vt100 und vt220 von vor vielen Jahren Diese Ger te hatten Tastaturen die sich von denen heutiger PCs drastisch unterschieden und an dieser Stelle fangen die Probleme an Verschlimmert wird die Situation dadurch da das Design des Protokolls der beiden Terminals au erdem nicht sehr gut war Unter diesem Hintergrund versucht die Unit Keyboard auf Unix Systemen die Tasta turfunktionalit t bestm glich zur Verf gung zu stellen Eine Implementation mit allen M glichkeiten anderer Betriebssysteme ist aufgrund des unterliegenden Designs nicht
39. oder kurz danach Flags Die Definition wie KeyCode zu interpretieren ist Tabelle 04 9 Die Struktur des Records TKeyRecord Der ShiftState wird mit den verschiedenen daf r vorgesehenen Konstanten gepr ft und die Flags im letzten Byte mit den Konstanten kbASCII kbUniCode kbFnKey kbPhys und kbReleased Liefern zwei Tasten den selben Zeichencode zur ck gibt es keine M glichkeit festzu stellen welche gedr ckt wurde zum Beispiel die normale oder graue Taste Wenn man solche Unterschiede herausfinden m chte mu mit den un bersetzten Tastencodes gearbeitet werden die jedoch systemabh ngig sind F r diese Aufgabe k nnen systemabh ngige Konstanten definiert werden die m glicherweise den selben Namen oder unterschiedliche Werte besitzen 4 22 4 Prozeduren und Funktionen DONEKEYBOARD procedure DoneKeyboard Wenn der Tastaturtreiber aktiv ist entfernt DoneKeyboard die Tastaturschnittstelle Ist sie nicht initialisiert macht die Prozedur nichts Der Aufruf f hrt dazu da jeglicher belegter Speicher aufger umt und die Konsole oder das Terminal in seinen Ursprungs zustand versetzt wird also in den Status vor dem Aufruf von InitKeyboard Diese Prozedur sollte beim Verlassen des Programms aufgerufen werden Erfolgt der Aufruf nicht oder schl gt fehl wird das Terminal oder die Konsole in einem Zustand belassen in dem sie nicht mehr brauchbar ist Wie das genau aussieht h ngt von der Plattform ab unter der da
40. of sockaddr pad end sockaddr_in speichert eine INET Socket Adresse f r die Aufrufe Bind Recv und Send sockaddr_in6 packed record Sin6_family sa_family_t Sin6_port cuintl6 Sins_flowinfo cuint32 Sin6_addr in6_addr Sin6_scope_id cuint32 end Ein Alias f r sockaddr_in6 sockaddr_un packed record sun_family sa_family_t sun_path array 0 107 of Char end sockaddr_un speichert eine Unix Socket Adresse fiir die Aufrufe Bind Recv und Send TIn6Addr in6_addr Alias fiir den Datentyp in6_addr Tin6_addr in6_addr Alias fiir den Datentyp sockaddr_in6 TInAddr in_addr Alias fiir den Record Datentyp in_addr TInetSockAddr sockaddr_in Alias f r den Datentyp sockaddr_in TInetSockAddr6 sockaddr_in6 Alias f r den Datentyp sockaddr_in6 TIn_addr in_addr Alias f r den Record Datentyp in_addr 042 Kapitel 4 Referenz der RTL Online Daten TLinger linger Alias f r den Datentyp linger TSockAddr sockaddr Alias f r sockaddr TSockArray array 1 2 of LongInt Datentyp der vom Aufruf SocketPair zur ckgegeben wird TSocket LongInt Alias f r einfachere Kylix Portierung TSockPairArray array 0 1 of LongInt Ein Socket Array f r den Aufruf SocketPair TUnixSockAddr packed record family sa_family_t path array 0 107 of Char end Alias f r den Datentyp sockaddr_un 4 18 2 Prozeduren und Funktionen ACCEPT f
41. procedure Sock2Text Sock LongInt var SockIn Text var SockQut Text Sock2Text wandelt den Socket Sock in zwei Pascal Dateideskriptoren des Typs Text um einen zum Lesen aus dem Socket SockIn und einen zum Schreiben in den Socket SockOut Siehe auch Socket und Sock2File SOCKET function Socket Domain LongInt SocketType LongInt Protocol LongInt LongInt Hinweis Diese Funktion ist veraltet Socket erstellt einen neuen Socket in der Domain Domain vom Typ SocketType anhand des Protokolls Protocol Die Domain der Sockettyp und das Protokoll k nnen anhand der vorgegebenen Konstanten siehe Abschnitt zu den Konstanten um geeignete Kon stanten zu finden festgelegt werden War die Funktion erfolgreich liefert sie einen Socketdeskriptor der an einen nachfolgenden Bind Befehl bermittelt werden kann Falls die Funktion fehlgeschlagen ist wird 1 zur ckgeliefert Fehler Fehler werden in SocketError gemeldet F r Socket gibt es folgende Fehlermeldungen SYS_EPROTONOSUPPORT Der Protokolltyp oder das festgelegte Protokoll wird von SYS_EACCESS Es fehlen die Zugriffsrechte um einen neuen Socket des SYS_ENOBUFS Nicht gen gend Pufferspeicher Der Socket kann nicht erstellt werden bis gen gend Ressourcen vorhanden sind Siehe auch SocketPair Socket Unix Handbuch Zum Beispiel siehe Accept Siehe auch SocketPair Kapitel 4 18 Unit Sockets SocketError O57 SOCKETERROR function socketerror cint
42. stellt bitten die Free Pascal Entwickler um einen Bugreport damit das Terminal hinzugef gt werden kann 4 22 2 Tastaturtreiber schreiben Beim Schreiben eines Tastaturtreibers m ssen f r die meisten der Funktionen der Unit Keyboards Hooks erzeugt werden Der Record TKeyBoardDriver enth lt ein Feld f r jeden der m glichen Hooks TKeyboardDriver record InitDriver procedure DoneDriver procedure GetKeyEvent function TKeyEvent PollKeyEvent function TKeyEvent GetShiftState function Byte TranslateKeyEvent function KeyEvent TKeyEvent TKeyEvent TranslateKeyEventUniCode function KeyEvent TKeyEvent TKeyEvent end Die Bedeutung der Felder erl utert Tabelle 04 6 Hook Bedeutung InitDriver Wird aufgerufen um den Treiber zu initialisieren und einzuschalten Dieser Aufruf darf nur einmal erfolgen und mu daf r sorgen da ala alles was der Treiber ben tigt initialisiert wird _ e DoneDriver Wird aufgerufen um den Treiber abzuschalten und aufzur umen Dieser Aufruf mu garantiert nach einem InitDriver erfolgen und u Alte alles was von InitDriver initialisiert wurde wieder zur cksetzen _ GetKeyEvent Wird von GetKeyEvent aufgerufen Mu auf das n chste Ta staturereignis warten und es zur ckgeben Die Funktion darf die Tasten nicht speichern Tabelle 04 6 Die Hooks im Record TKeyBoardDriver Teil 1 von 2 Kapitel 4 22 Unit Keyboard Allgemeines 0101 Hook Bedeut
43. then DoError MsgGet case Upcase Paramstr 1 1 of S if ParamCount lt gt 3 then Usage else SendMessage id Buf StrTolnt Paramstr 2 Paramstr 3 R if ParamCount lt gt 2 then Usage else ReadMessage id buf StrToInt Paramstr 2 D if ParamCount lt gt 1 then Usage else RemoveQueue ID M if ParamCount lt gt 2 then Usage else ChangeQueueMode id StrToInt Paramstr 2 else Usage end end Listing 04 35 ipcex msgtool pp MSGGET function msgget key TKey msgflg cint cint msgget gibt die ID der Meldungswarteschlange zuriick die von TKey beschrieben wird Abh ngig von den Flags in msgflg wird eine neue Warteschleife erzeugt msgflg kann einen oder mehrere der folgenden Werte besitzen mit OR verkn pft Kapitel 4 19 Unit ipc msgrev O65 PC CREAT Die Warteschlange wird erzeugt falls sie nicht schon angelegt ist IPC_EXCL Wenn das Flag in Verbindung mit IPC_CREAT benutzt wird und die Warteschlange schon vorhanden ist wird der Befehl abgebrochen Das Flag kann nicht f r sich allein stehen Optional k nnen die Flags mit Zugriffsrechten ber OR verkn pft werden Die Zugriffsrechte kennen die gleichen Werte wie das Dateisystem Fehler Bei einem Fehler wird 1 zur ckgeliefert und IPCError wird gesetzt Siehe auch ftok msgsnd msgrcv msgctl semget Ein Beispiel ist bei msgctl gezeigt MSGRCV function msgrcv msgid cint msgp PMSGbuf msgsz
44. und SysUtils StrLen program Examplel Beispiel f r die Funktion StrLen uses Strings const P PChar Das ist ein PChar Stringkonstante begin Writeln P p Writeln L nge P StrLen P end Listing 04 24 stringex ex1 pp STRLICOMP function StrLIComp Stri PChar Str2 PChar L Sizelnt Sizelnt Vergleicht maximal L Zeichen der nullterminierten Strings Str1 und Str2 und ignoriert dabei die Gro und Kleinschreibung Das Ergebnis ist eine negative SizeInt Zahl wenn Str1 lt Str2 0 wenn Str1 und Str2 gleich sind Ein positiver SizeInt wenn Str1 gt Str2 Ein Beispiel ist bei der Funktion StrIComp gezeigt Siehe auch StrLComp StrComp StrIComp und SysUtils StrLIComp Kapitel 4 17 Unit Strings StrLower 029 STRLOWER function StrLower p PChar PChar Konvertiert p in Kleinbuchstaben Das Funktionsergebnis ist p Siehe auch StrUpper und SysUtils StrLower program Examplel4 Beispiel f r StrLower und StrUpper uses Strings oder SysUtils const Pl PChar DAS IST EIN PCHAR STRING IN GROSSBUCHSTABEN P2 PChar das ist ein pchar string in kleinbuchstaben begin WriteLn GroBschreibung StrUpper P2 StrLower P1 WriteLn Kleinschreibung P1 end Listing 04 25 stringex ex14 pp STRMOVE function StrMove Dest PChar Source PChar L Sizelnt PChar Kopiert L Zeichen von Source nach Dest Dabei wird kein terminierende
45. 41 F7 74 Strg gt 75 Strg Ende 76 Strg Bild 08 Alt R ckschritt 44 F10 77 Strg Pos 78 Alt 1 79 Alt 2 10 Alt Q 49 Bildt 7A Alt 3 7B Alt 4 12 Alt E 4C Zahlenblock 5 7C Alt 5 ne oo ohne Num gt 7D Alt 6 Alt GrauPlus 7E Alt 7 Ende 7F Alt 8 4 80 Alt 9 Bild 81 Alt O Einfg 82 Alt GrauMinus Entf 83 Alt Zahlenblock Enter Shift F1 84 Strg Bildt lengl Alt LftBrack ______ 1B Alt 55 Shift F2 85 F11 Alt RgtBrack Shift F3 86 F12 Shift F4 87 Shift F1 1 Shift F5 88 Shift F12 Shift F6 89 Strg F11 Shift F7 8A Strg F12 Shift F8 8B Alt F11 Shift F9 8C Alt F12 Shift F10 8D Strg t Strg F1 8E Strg GrauMinus 27 Alt O 5F Strg F2 8F Strg 5 ohne Num u engl AltSemiCol ______ 28 Alt A 60 Strg F3 90 _ Strg GrauPlus engl Alt Quote Tabelle 04 7 Tasten Scancodes alle Codes in hexadez Schreibweise Teil1 von 2 0104 Kapitel 4 Referenz der RTL Online Daten Code Taste Code Taste Code Taste 29 Alt engl Alt 61 Strg F4 91 Strg ve OP QUOTE aeae 2B Alt lt 62 Strg F5 94 Strg Tab Alt Bk Strg F6 97 Alt Pos Strg F7 98 Alt t Strg F8 99 Alt Bildt Strg F9 9B Alt Strg F10 9D Alt gt Alt F1 OF Alt Ende Alt F2 AO Alt Alt F3 Al Alt Bild Alt F4 A2 Alt Einfg 35 Alt Minus engl At 6C Alt F5 A3 Alt Entf Slash Alt F6 A5 Alt Tab E Alt F7 3C F2 6F Alt F8 Tabelle 04 7 Tasten Scancodes alle Codes in hexadezimaler Schreibweise Teil 2 von 2 _Taste Code Shift Taste Strg
46. Code K of kbdLeft if P mod ScreenWidth lt gt 0 then D 1 kbdUp if P gt ScreenWidth then D ScreenWidth kbdRight if P 2 mod ScreenWidth lt gt 0 then D 1 kbdDown if P lt VideoBufSize div 2 ScreenWidth 2 then D ScreenWidth end until D lt gt 0 or GetKeyEventChar K q P P D until GetKeyEventChar kK q DoneKeyBoard DoneVideo end Listing 04 44 videoex exe pp Kapitel 4 20 Unit Video SetCursorType 091 SETCURSORTYPE procedure SetCursorType NewType Word SetCursorType setzt das Aussehen des Cursors auf den Typ der in NewType angegeben ist Zur Auswahl stehen folgende Konstanten crHidden Cursor ausblenden Cursor als Unterstreichung crHalfBlock Cursor als halber Block Siehe auch SetCursorPos SETVIDEODRIVER function SetVideoDriver const Driver TVideoDriver Boolean SetVideoDriver w hlt Driver als aktuellen Bildschirmtreiber aus Ist der aktuelle Bild schirmtreiber bereits initialisiert wurde also InitVideo bereits aufgerufen macht die Funktion nichts sondern kehrt sofort zur ck und gibt den Wert False als Funktionser gebnis aus Um einen neuen Treiber zu installieren mu also vorher DoneVideo aufge rufen werden Ein Beispiel ist im Abschnitt zum Schreiben eigener Bildschirmtreiber ab Seite 076 gezeigt Fehler Ist der aktuelle Treiber bereits installiert gibt die Funktion False zur ck SETVIDEOMODE function SetVideoM
47. Computer amp Literatur L Micha l Van Canneyt Free Pascal 2 Handbuch und Referenz Win32 64 CE OS X und Linux Unix Das deutsche Originalhandbuch Software Free Pascal ist ein moderner und plattformunabh ngiger Compiler f r die Programmiersprache Object Pascal Er bildet auch die Unterlage f r fortgeschrittene Entwicklungsumgebungen wie Lazarus und Morfik AppsBuilder Buch Zu Free Pascal gibt es im Internet eine mehrtausendseitige Dokumentation die f r diese autori sierte deutsche Fassung bersetzt und ediert wurde Diese deutsche Version enth lt in teilweise gestraffter und erg nzter Form das Benutzerhandbuch die komplette Sprach beschreibung die Erl uterung aller Kommandozeilenschalter und Metabefehle sowie die Beschrei bung der Codeerzeugung die f r die Optimierung von Programmen und das Verst ndnis des Compilers unumg nglich ist Weiterhin enth lt das Buch die bersetzung der Referenz der wich tigsten Units der Laufzeitbibliothek von Free Pascal Alle Teile des Buchs wurden nach Fertigstel lung der bersetzung noch einmal vom Begr nder des Free Pascal Projekts Florian Kl mpfl ge pr ft Autor Micha l Van Canneyt ist langj hriger Free Pascal Core Entwickler und zeichnet au er da er der urspr ngliche Maintainer der Linux Version ist und sich heute vorwiegend um die Klassenbiblio theken k mmert auch f r die Dokumentation des Projekts verantwortlich Die vorliegende Dokument
48. DR ANY Cardinal 0 ______ _Undokumentiert l INADDR_NONE Cardinal FFFFFFFF Undokumentiert Die folgenden Konstanten definieren die Protokolle Konstante Wert Beschreibung IPv6 Hop by Hop Optionen Dummy Protokoll f r TCP i Internet Control Message Protocol IPPROTO IGMP 2 Internet Group Management Protocol i IPIP Tunnel ltere KA9Q Tunnel verwenden 94 Transmission Control Protocol IPPROTO EGP 8 Exterior Gateway Protocol t PUP Protokoll User Datagram Protocol IPPROTO_IDP 22 XNS IDP Protokoll SO Transport Protocol Class 4 IPv6 Header IPv6 Routing Header i IPv6 Fragmentation Header _IPPROTO_RSVP 46 Reservation Protocol General Routing Encapsulation i Encapsulating Security Payload IPPROTO AH 51 Authentifizierungs Header ICMPv IPv6 kein n chster Header IPv6 Zieloptionen i Multicast Transport Protocol _IPPROTO_ENCAP 98 Encapsulation Header Protocol Independent Multicast 7 Compression Header Protocol IPPROTO SCTP 132 Stream Control Transmission Protocol i Maximalwert f r IPPROTO Optionen IPPROTO_RAW 255 Rohe IP Pakete O34 Kapitel 4 Referenz der RTL Online Daten Die folgenden Konstanten sind gr tenteils undokumentierte Optionen f r GetSockOpt und SetSockOpt Alle vom Autor irgendwo als dokumentiert gefundenen Werte sind hier dokumentiert Wer nach ihnen googelt landet unweigerlich wieder in der Doku mentation
49. Disk hinzu Fehler Es wird 1 zur ckgegeben wenn ein Fehler auftritt oder eine falsche Lauf werksnummer zur ckgegeben wurde program Example6 Beispiel f r die Funktionen DiskSize und DiskFree uses Dos begin WriteLn Die Partition ist DiskSize 0 gt Byte gro WriteLn Aktuell sind DiskFree 0 gt Byte frei end Listing 04 1 dosex ex6 pp DISKSIZE function DiskSize drive Byte Int64 DiskSize liefert die absolute Gr e eines Laufwerks in Byte Der Parameter Drive gibt das zu untersuchende Laufwerk an Dieser Parameter ist 1 fiir Laufwerk a 2 fiir Lauf werk b und so weiter Der Wert 0 liefert den Speicher des aktuellen Laufwerks Nur fiir unixartige Betriebssysteme Diskfree und Disksize ben tigen eine Datei auf dem ausgew hlten Laufwerk da dies von der Systemfunktion statfs verlangt wird Vier Dateinamen werden von der Unit DOS vorinitialisiert f r das aktuelle Laufwerk fd0 f r das erste Floppy Laufwerk fd1 f r das zweite Floppy Laufwerk f r die erste Festplatte Es k nnen jedoch bis zu 26 verschiedene Laufwerke angegeben werden Um ein weite res nicht vordefiniertes Laufwerk hinzuzuf gen wird AddDisk aufgerufen Fehler 1 wenn ein Fehler auftritt oder eine falsche Laufwerksnummer zur ckgege ben wird Ein Beispiel ist unter DiskFree zu finden Siehe auch DiskFree und AddDisk DosExITCoDE function DosExitCode Word
50. EN Die Unit DOS enth lt einige Beschreibungen f r L ngenangaben Konstante Wert Beschreibung filerecnamelength 255 __Maximall nge des Dateinamensanteils im Record FileRec _ 255 TextRecNamelength 256 Maximale L nge eines Dateinamens in TexfRec CPU FLAGS Die in der Unit definierten CPU Flags werden nicht verwendet und sind nur auf Kom patibilit tsgr nden zu alten 16 Bit Programmen definiert Konstante Wert Bedeutung Flag fauxiliary 0010h Auxiliary Flag foverflow 0800h Overflow Flag sign DOBO SIJA fzero 0040h Zero Flag Typdeklarationen Die folgenden Stringtypen sind f r die Vereinfachung des Umgangs mit Dateinamen deklariert Bei den modernen Betriebssystemen mit langen Dateinamen sind in der Datei dos h inc die L ngenangaben auf die Konstante FileNameLen gesetzt die auf 255 im Header der Datei festgelegt ist Damit wird die alte Deklaration von Free Pascal 1 x und Turbo Pascal berschrieben ComStr String 127 F r Befehlszeilen PathStr String 79 F r komplette Pfade von Dateinamen Dirstr String 67 F r Verzeichnisse und DOS Laufwerksbezeichnungen NameStr String 8 F r Dateinamen ExtStr String 4 F r Dateierweiterungen Werden Dateien auf der Festplatte gesucht wird der folgende Record mit Daten gef llt SearchRec packed record SearchPos TOff SearchNum LongInt DirPtr Pointer SearchType Byte SearchAttr Byte Mode Word Fill
51. GetKeyboardDriver DoneKeyboard SHIFTSTATETOSTRING function ShiftStateToString KeyEvent TKeyEvent UseLeftRight Boolean String ShiftStateToString liefert einen String mit der Beschreibung des Shiftstatus der Taste in KeyEvent zur ck was auch ein leerer String sein kann Der Shiftstatus wird mit den Strings in der Konstante SShift beschrieben Ein Beispiel ist bei PollShiftStateEvent gezeigt Siehe auch FunctionKeyName KeyEventToString TRANSLATEKEYEVENT function TranslateKeyEvent KeyEvent TKeyEvent TKeyEvent TranslateKeyEvent f hrt die ASCII bersetzung von KeyEvent durch Ein physikalischer Tastendruck wird in eine Funktionstastendefinition umgesetzt falls eine Funktionsta ste gedr ckt wurde und die physikalische Taste in das ASCII Zeichen wenn es sich um eine normale Taste handelte Ein Beispiel f r die Funktion ist bei GetKeyEvent gezeigt Siehe auch TranslateKeyEventUniCode TRANSLATEKEYEVENTUNICODE function TranslateKeyEventUniCode KeyEvent TKeyEvent TKeyEvent TranslateKeyEventUniCode f hrt die Unicode bersetzung von KeyEvent durch Diese Funktion ist noch nicht auf allen Plattformen implementiert Fehler Ist die Funktion auf der gew hlten Zielplattform nicht implementiert wird der ErrorCode der Unit System auf errKbdNotImplemented gesetzt Siehe auch TranslateKeyEvent 0116 Kapitel 4 Referenz der RTL Online Daten AnsiStrings Archiv Attribut ASCII 0 Zeichen Attribut f r alle D
52. GetVideoModeCount 1 Unterst tzt der aktuelle Treiber die Modus Umschaltung nicht GetVideoModeCount 1 und ist damit der Index automatisch 0 werden die Da ten des aktuellen Modus zur ckgegeben Die Funktion meldet als Ergebnis True falls die Modusdaten erfolgreich abgefragt werden konnten sonst False Fehler Falls f r Index ein ung ltiger Wert bergeben wird ergibt die Funktion False Siehe auch GetVideoModeCount SetVideoMode und GetVideoMode Ein Beispiel f r diese Funktion ist bei GetVideoModeCount gezeigt INITVIDEO procedure InitVideo InitVideo initialisiert das Video Subsystem War es bereits eingeschaltet macht die Prozedur nichts und kehrt sofort zur ck Nach dem Initialisieren des Treibers werden die beiden Zeiger VideoBuf und OldVideoBuf belegt basierend auf den beiden Varia blen ScreenWidth und ScreenHeight Danach wird der Bildschirm gel scht Fehler Kann der Treiber nicht initialisiert werden wird die Variable ErrorCode gesetzt Siehe auch DoneVideo Ein Beispiel f r diese Prozedur ist bei den meisten anderen Funktionen gezeigt LOCKSCREENUPDATE procedure LockScreenUpdate LockScreenUpdate erhoht die Sperrstufe fiir die Bildschirmaktualisierung um den Wert 1 Solange dieser Zahler ungleich 0 ist wird der Bildschirm nicht aktualisiert Mit dieser Funktion kann die Aktualisierung des Bildschirms optimiert werden Insbe sondere bei einer gro en Zahl von Schreiboperationen auf den Bildschirm m gli cherw
53. L ngenangaben Definitionen des Datentyps SizeInt implementiert Dieser Datentyp der in der Unit System definiert ist ist auf 32 Bit Systemen ein Synonym f r Longint auf 64 Bit Systemen f r Int64 Bei Strings sollte immer mit SizeInt gearbeitet werden 4 17 1 Prozeduren und Funktionen STRALLOC function StrAlloc L SizeInt PChar StrAlloc reserviert Speicher fiir den String mit der Lange Len auf dem Heap das ab schlie ende ASCII 0 ist in dieser L ngenangabe enthalten Dann wird ein Zeiger auf den Speicherplatz zur ckgegeben Fehler Ist nicht genug Speicher f r die Operation auf dem Heap vorhanden wird ein Laufzeitfehler ausgel st Hinweis Strings StrAlloc und SysUtils StrAlloc siehe dort sind nicht kompatibel Siehe auch StrNew StrPCopy und SysUtils StrAlloc STRCAT function StrCat dest PChar source PChar PChar H ngt Source an Dest und gibt Dest zur ck Fehler Keine es findet keine L ngen berpr fung statt Siehe auch StrLCat und SysUtils StrCat program Examplell Beispiel f r die Funktion StrCat uses Strings const Pl PChar Das ist ein PChar String var P2 PChar begin P2 StrAlloc StrLen Pl 2 1 StrMove P2 Pl StrLen Pl 1 P2 Pl StrCat P2 P1 P2 noch einmal anh ngen riteln P2 P2 StrDispose P2 end Listing 04 15 stringex ex11 pp STRCOMP function StrComp Stri PChar Str2 PChar Sizelnt Vergleicht die beiden nullterminie
54. Taste Alt Taste 54 5E 68 55 5F 69 56 60 6A 57 61 6B 58 62 6C 59 63 6D 5A 64 6E 5A 65 6F 5B 66 70 5C 67 71 87 89 8B 3 88 8A 8C Pos 47 77 97 8D 98 84 99 73 9B 8F z 74 9D Ende AF 75 OF 91 AO E 76 Al _Einfg 52 05 04 A2 07 06 A3 E OF 94 A5 GrauPlus 90 4E Tabelle 04 8 Sondertasten Scancodes alle Codes in hexadezimaler Schreibweise Kapitel 4 22 Unit Keyboard Allgemeines 0105 Eine Liste der Scancodes fiir besondere Tasten und Kombinationen mit Shift Alt und Strg zeigt die Schnellreferenz in Tabelle 04 8 4 22 3 Konstanten Typen und Variable Konstanten AltPrefix Byte 0 Alternativer Index f r die Alt Taste Nur unter Unix _ CtrlPrefix Byte O Alternativer Index fiir die Strg Taste Nur unter Unix E ShiftPrefix Byte O Alternativer Index f r die Shift Taste Nur unter Unix Fehlercodes errKbdBase 1010 Basiswert f r die Fehlerkonstanten der Tastaturrou tinen errKbdNotlImplemented Tastaturtreiber ist nicht implementiert errKbdBase 1 Die Konstanten f r die Modifizierertasten f r ShiftState Konstante Code Taste _KbLefShift ee Modifizierer der linken Shifttaste kbRightShift OZ Modifizierer der rechten Shiftaste kbShift kbLeftShift or Modifizierer der Shifttaste kbRightShift Die Konstanten f r die Tasten des Cursor und Ziffernblocks Konstante Code Taste 0106 Kapitel 4 Referenz der RTL Online Daten Die
55. Time und UnPackTime uses Dos var DT DateTime Kapitel 4 16 Unit DOS SetCBreak 021 Time LongInt begin with DT do begin Year 2008 onth 11 Day 11 Hour 11 in 11 Sec 113 end PackTime DT Time WriteLn Gepackte Zeit Time UnPackTime Time DT WriteLn Wieder ausgepackt with DT do begin riteLn Jahr gt Year riteLn Monat gt Month riteLn Tag gt Day riteLn Stunde Hour riteLn Minute Min riteLn Sekunde Sec end end Listing 04 14 dosex ex4 pp SETCBREAK procedure SetCBreak BreakValue Boolean SetCBreak setzt den Status der Uberpriifung der Eingabe von Strg Pause Wenn BreakValue False ist wird nur bei E A Operationen der Zustand von Strg Pause berpr ft ansonsten bei jedem Systembefehl Dieser Aufruf ist nur unter DOS und Amiga OS verf gbar bei anderen Betriebssyste men macht er nichts Siehe auch GetCBreak SETDATE procedure SetDate year Word month Word day Word SetDate legt das systeminterne Datum fest wobei Year eine Zahl zwischen 1980 und 2099 ist Auf Linux werden f r diesen Aufruf Administrator Rechte ben tigt Auf ande ren Unix Systemen ist der Aufruf derzeit wirkungslos Siehe auch GetDate und SetTime SETFATTR procedure SetFAttr var f attr Word SetFAttr setzt die Dateiattribute der Dateivariable F die eine typisierte untypisierte oder Textdatei sei
56. ToNetAddr und StrToHostAddr6 NETTOHOST function NetToHost Net in_addr in_addr function NetToHost Net LongInt LongInt NetToHost wandelt eine Netzwerkadresse in eine Hostadresse um wobei die Endian ness der Hostmaschine beriicksichtigt wird Die Adresse kann als punktgetrennter Block oder als LongInt Zahl angegeben sein Siehe auch HostToNet NToHS HToNS ShortHostToNet und ShortNetToHost NTOHL function NToHl Net LongInt LongInt ntohs stellt sicher da die Bytes in Net die aus dem Netzwerk erhalten wurden in der richtigen Reihenfolge fiir die Verarbeitung auf der Hostmaschine sind und gibt das Ergebnis in richtiger Reihenfolge aus Siehe auch htonl htons und ntohs NToHs function NToHs Net Word Word ntohs stellt sicher da die Byte in Net die aus dem Netzwerk erhalten wurden in der richtigen Reihenfolge f r die Verarbeitung auf der Hostmaschine sind und gibt das Ergebnis in richtiger Reihenfolge aus Siehe auch htonl htons und ntohl O54 Kapitel 4 Referenz der RTL Online Daten RECV function Recv Sock LongInt var Buf BufLen LongInt Flags LongInt LongInt Recv liest h chstens Addrlen Byte vom Socket Sock in die Adresse Addr ein Es mu eine Verbindung zum Socket bestehen Flags kann folgende Werte annehmen a 1 Daten au erhalb des Bands verarbeiten Process out of band data _ E 4 Routing umgehen und eine direkte Schnittstelle ansprechen 22 Auf eine vollstandige Anfrage
57. UnixDate PackTime UnpackTime GetTime und SetTime UNPACKTIME procedure UnpackTime p LongInt var t DateTime UnPackTime konvertiert die Zeit der letzten Anderung einer Datei p in einen DateTime Datensatz Die Zeit der letzten Dateianderung finden die Funktionen GetFTime Find First und FindNext Ein Beispiel ist bei PackTime gezeigt Siehe auch GetFTime FindFirst FindNext und PackTime WEEKDAY function Weekday y LongInt m LongInt d LongInt LongInt WeekDay gibt die Nummer des Wochentags zur ck auf den das Datum d m y f llt Sonntag ergibt dabei den Wert 0 und Samstag den Wert 6 Fehler Bei einem Fehler wird der Wert 1 zur ckgegeben Siehe auch PackTime UnpackTime GetTime und SetTime O24 Kapitel 4 Referenz der RTL Online Daten 4 17 Unit Strings Die Unit Strings von Free Pascal ist systemunabh ngig und funktioniert auf allen unter st tzten Plattformen Alle Funktionen dieser Unit sind in erweiterten Varianten auch in der Unit SysUtils verf gbar wobei die Syntax der Funktionen dann immer gleich ist Das zeigt sich auch in den Beispielen bei denen nur der Import anders lautet Die Routinen in dieser Unit kennen weder AnsiStrings noch WideStrings und auch keine nationalen Sonderzeichen Alle Strings sind klassische Pascal ShortStrings mit einer L nge von maximal 255 Zeichen F r AnsiStrings und WideStrings mu auf die entsprechenden Routinen der Unit SysUtils gewechselt werden In dieser Unit sind bei
58. Word GetCapabilities gibt die F higkeiten des aktuellen Treibers zur ck wobei es sich eine mit OR verkn pfte Kombination der folgenden Konstanten handelt _cpUnderLine Der Bildschirmtreiber unterst tzt das Attribut f r Unterstreichen _cpColor Der Bildschirmtreiber unterst tzt Farbausgaben cpChangeCursor Der Bildschirmtreiber erlaubt das ndern des Cursors Siehe auch GetCursorType und GetVideoDriver program Example4 Beispiel f r die Funktion GetCapabilities uses Video var W Word procedure TestCap Cap Word Msg String begin Write Msg 7 if W and Cap Cap then WriteLn Ja else WriteLn Nein end begin W GetCapabilities WriteLn Der Bildschirmtreiber unterst tzt folgende Funktionen TestCap cpUnderLine Unterstrichene Zeichen TestCap cpBlink Blinkende Zeichen a TestCap cpColor Farbige Zeichen 2 TestCap cpChangeFont Font nderungen Is TestCap cpChangeMode Videomodus nderung 28 TestCap cpChangeCursor ndern der Cursorform end Listing 04 39 videoex ex4 pp GETCURSORTYPE function GetCursorType Word GetCursorType gibt den aktuellen Cursortyp zur ck was einer der folgenden Werte ist _erHidden Unsichtbarerer ausgeblendeter Cursor 7 Cursor aus einzelner Linie crBlock Blockcursor crHalfBlock Halber Blockcursor Zu beachten ist da nicht alle Treiber alle Arten von Cursordarstellun
59. YP M 86 D Datei versteckte 8 Datei nderung Uhrzeit der Dateiattribute Dateiattribute Konstanten Dateiaufrufe Dateimodus Konstanten Dateiname zerlegen Dateinamen L ngen Dateisuche Dateisystem Umgebungsvariablen Anzahl Unicode Zeichen Tastaturevent Unix Zeitstempel Unix Zeitstempel konvertieren L Laufwerkgr e nnenen 12 RONNIE a nein 24 M Mausbewegungsevent 93 Mausposition Maussteuerung Maustreiber Mauszeiger Meldungswarteschlange Messages Modifizierer Tasten N Nachrichten icc u 58 P Pfadangaben nnnee 14 R Ressourcen Freigabe n 14 Ss Schreibschutzattribut 8 Schriften Semaphore Semaphoren Shared Memory Shiftstatus Shortstrings Signal bermittlung Sizelnt Versionsnummer des Betriebssystems Kernelversion unneene Verzeichnis Attribut Video Subsystem initalisieren Volume Label Warteschleife WideStrings Wochentag enn Sie Delphi C Basic oder Java Entwickler sind i Toolbox In der Zeitschrift Toolbox finden Sie wertvolle Tips Insider a ee Informationen und unverzichtbares Hintergrundwissen zu Ihrer Ei Patterns Mac Mozilla Programmiersprache Und das seit mehr als 10 Jahren 2 Fe Beer 3 Too Ibox a Jede Ausgabe der Toolbox bietet Ihnen ppe ro Em Er Programmierl sungen Tips und Tricks Fd Zotin zur Systemprogrammierung Anwen
60. ard NewKeyBoardDriver DoneDriver LogDoneKeyboard LogFileName keyboard log Logging False SetKeyboardDriver NewKeyBoardDriver end Dieser Treiber kann ber einen anderen bergest lpt werden solange er in der Uses Klausel nach der richtigen Treiber Unit eingebunden wird und wenn der echte Treiber in seinem Initialisierungsbereich den Treiber Record setzt Durch Erweiterung dieser Beispiel Unit kann ein Treiber geschrieben werden der Ta stendr cke aufnehmen und sp ter auch wieder abspielen kann auf diese Weise k n nen Tastaturmakros aufgenommen und abgespielt werden Dieser Treiber wiederum kann auf jeden anderen aufgesetzt werden Kapitel 4 22 Unit Keyboard Allgemeines 0103 Tasten Scancodes Eine gro e Zahl besonderer Tasten wird mit ihren DOS Scancodes im zweiten Byte des Datentyps TKeyEvent belegt Eine vollst ndige Liste aller Scancodes als hexadezimale Werte steht in Tabelle 04 7 wobei es sich dabei um die Liste der Tasten handelt wie sie im voreingestellten Tasten bersetzungsmechanismus angegeben sind Beim Schrei ben eines Tastaturtreibers m ssen diese Konstanten entweder von den verschiedenen Tasten Event Funktionen zur ckgemeldet werden oder es mu der Hook Translate KeyEvent vom Treiber implementiert werden Code Taste Code Taste Code Taste 00 _NoKey Keine Taste 3D F3 70 Alt F9 01 Alt Esc 3E F4 71 Alt F10 72 Strg Druck 73 Strg 05 Shift Einfg
61. ateien Stichwortverzeichnis Online Daten Betriebssystemaufruf Bildschirm aktualisieren Bildschirm l schen Bildschirm Array f physikalischen Bildschirm schreiben in Bildschirm Zeichen auf Bildschirm Aktualisierung PR Bildschirmmodus 00 71 88 Bildschirmposition an die Daten geschrieben werden nn 84 Bildschirmpuffergr e Bildschirmtreiber abschalten h Bildschirm Vorder Hintergrundfarbe 75 Bildschirm Zugriff Blinkbit nO EAEE el 8 F Freie Byte auf Laufwerk 11 Funktionstasten 106 I Int64 Interproze kommunikation Interruptvektorentabelle Softwareinterrupt ausf hren Sondertasten Scancodes Speicher gemeinsam genutzter String konvertieren String kopieren String Speicher reservieren f r Stringvergleich Systemdatei Systemdatum Systemuhr T Botschafts Warteschlange 60 c Cod page ns aiuu ra 81 CPU FlagSs eeseesseesssesssssstesseestesstesseesneesseess 9 Cursor Ziffernblock Tasten 105 Tastatur unter Unix Tastaturereignis Tastaturevent Tastaturtreiber Tastaturtreiber schreiben Tastaturzugriffsschicht Tastenevent bersetzen Tasten Scancodes Textbildschirm Farben Text Eingabecursor Aussehen 81 CUFSOrt
62. ation die im englischen Original mehrere Tausend Sei ten umfa t entstand im Laufe mehrerer Jahre Sie wird st ndig an die neuen Funktionen des Compilers angepa t Der Autor ist Belgier professioneller Software Entwickler und lebt mit seiner Familie in Leuven In seiner knapp bemessenen Freizeit schreibt er au er Software auch Fachbeitr ge f r die Zeitschrift Toolbox und widmet sich Buchprojekten Er versteht au er Fl misch Franz sisch Englisch und Russisch auch ausgezeichnet Deutsch Free Pascal 2 Online Daten Micha l Van Canneyt Ubersetzung aus dem Englischen von J rg Braun Michael Ke ler Florian Kl mpfl Christopher Ozbek und Rosa Riebl Bibliographische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie detaillierte bibliographische Daten sind im Internet Uber http dnb d nb de abrufbar Alle Rechte vorbehalten Ohne ausdr ckliche schriftliche Genehmigung des Herausgebers ist es nicht gestattet das Buch oder Teile daraus in irgendeiner Form durch Fotokopie Mikrofilm oder ein anderes Verfahren zu vervielf ltigen oder zu verbreiten Dasselbe gilt f r das Recht der ffentlichen Wiedergabe Der Verlag macht darauf aufmerksam da die genannten Firmen und Markenzeichen sowie Produktbezeichnungen in der Regel marken patent oder warenzeichenrechtlichem Schutz unterliegen Die Herausgeber bernehmen keine G
63. aufwerk fd0 f r das erste Floppy Laufwerk fd1 f r das zweite Floppy Laufwerk f r die erste Festplatte Der erste Aufruf von AddDisk f gt deshalb einen Namen f r die zweite Festplatte der Liste hinzu der zweite Aufruf f r das dritte Laufwerk und so weiter bis 23 Laufwerke hinzugef gt wurden entsprechend Laufwerke D bis Z Siehe auch DiskFree DiskSize DISKFREE function DiskFree drive Byte Int64 DiskFree liefert die Anzahl der freien Byte auf dem Laufwerk Der Parameter Drive gibt an welches Laufwerk untersucht werden soll Dieser Parameter entspricht 1 fiir Lauf werk a 2 f r Laufwerk b und so weiter Der Wert 0 als Parameter bergeben gibt den freien Speicher des aktuellen Laufwerks zuriick Normalerweise ist der freie Speicher die Gr e der Festplattenbl cke multipliziert mit der Anzahl der freien Bl k ke auf der Festplatte Nur f r Linux DiskFree und DiskSize ben tigen eine Datei auf dem ausgew hlten Laufwerk dies verlangt die Systemfunktion statfs Vier Dateinamen werden von der Unit DOS vorinitialisiert f r das aktuelle Laufwerk fd0 f r das erste Floppy Laufwerk fd1 f r das zweite Floppy Laufwerk f r die erste Festplatte 012 Kapitel 4 Referenz der RTL Online Daten Es k nnen jedoch bis zu 26 verschiedene Laufwerke angegeben werden Ein weiteres nicht vordefiniertes Laufwerk f gt die Prozedur Add
64. cket S angebundenen Ein heit zur ck Der Socket mu damit dieser Aufruf funktioniert verbunden sein Name sollte auf einen Speicherplatz zeigen der gro genug ist den Namen aufzuneh men der verf gbare Platz wird in Namelen bergeben Wurde die Funktion erfolgreich ausgef hrt enth lt Name den Namen und Namelen dessen L nge Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen p SYS_EBADF Der Socket Deskriptor ist ung ltig u SYS_ENOBUFS Das System besitzt nicht genug Puffer um die Operation durchf hren zu k nnen l SYS_EFAULT Addr zeigt aus dem g ltigen Adre bereich heraus SYS ENOTCONN Der Socket ist nicht verbunden Siehe auch fpConnect fpSocket FPGETSOCKNAME function fpGetSockName s cint name psockaddr namelen psocklen cint fpGetSockName gibt den aktuellen Namen des angegebenen Sockets s zur ck Name sollte auf einen Speicherplatz mit ausreichend viel Platz zeigen um den Namen auf nehmen zu k nnen die Gr e des freien Speicherplatzes sollte in Namelen angegeben werden Kehrt die Funktion erfolgreich zur ck enth lt Name den Namen und Namelen dessen L nge Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen 2 SYS_EBADF Der Socket Deskriptor ist ung ltig u SYS_ENOBUFS Das System besitzt nicht genug Puffer um die Operation durchf h ren zu k nnen SYS EFAULT Addr zeigt auf einen Bereich au erhalb des eig
65. dr STRTONETADDR function StrToNetAddr IP AnsiString in_addr StrToNetAddr wandelt den String in IP in eine Netzwerkadresse um und gibt diese zur ck Fehler Bei einem Fehler wird die Netzwerkadresse mit Nullen gef llt Siehe auch NetAddrToStr HostAddrToStr und StrToHostAddr STRTONETADDR6 function StrToNetAddr6 IP AnsiString Tin6_addr StrToNetAddr wandelt den String in IP in eine IPv6 Netzwerkadresse um und gibt diese zur ck Fehler Bei einem Fehler wird die Netzwerkadresse mit Nullen gef llt Siehe auch NetAddrToStr6 HostAddrToStr6 und StrToHostAddr6 058 Kapitel 4 Referenz der RTL Online Daten 4 19 Unit ipc Die Interproze kommunikations Unit IPC von Free Pascal wurde von Micha l Van Canneyt f r Linux geschrieben und und stellt die komplette Funktionalit t der Inter proze kommunikation von Unix System V zur Verf gung Shared Memory gemein sam genutzter Speicher Semaphoren Signal bermittlung und Messages Nachrich ten Diese Unit funktioniert nur auf Linux Eine gro e Zahl von Konstanten sind in diesem Buch nur der Vollst ndigkeit halber aufgef hrt und sollten unter normalen Umst nden vom Programmierer nicht ben tigt werden Die Unit ipc ruft die folgenden Units auf BaseUnix UnixType 4 19 1 Konstanten Typen und Variablen Variablen IPCerror LongInt Die IPCerror Variable wird f r die Fehlermeldung aller Befehle herangezogen Konstanten Diese Konstanten sind f r das E
66. ds mit Informationen ber das Signalsystem IPC_SET In diesem Fall sollte wiederum das Feld buf von arg die Adresse eines TSEMid_ds Records enthalten Die Zugriffsrechte des Signalsystems werden _gem den Angaben im ipc_perm Record festgelegt __Mit diesem Kommando wird das Signalsystem entfernt In diesem Fall sollte das Feld arr von arg auf einen Speicherbereich verwei sen in dem die Werte der Signale gespeichert werden Die Gr e dieses Speicherbereiches ist SizeOf Word Anzahl der Signale im System Dieser Aufruf f llt dann das Array mit den Werten der Signale Das Feld val des varianten Records ist bei diesem Befehl g ltig und enth lt nach dem Aufruf die Anzahl der Prozesse die auf Ressourcen warten semctl gibt die Proze ID des Prozesses zur ck der den letzten semop Befehl ausf hrte semctl gibt den Wert des Signals mit der Nummer semnum zur ck semctl gibt die Anzahl der Prozesse zur ck die darauf warten da Signale SiesapioshsnSespaness masentssabiessnnes sense mnsseseni den Wert Null erreichen ooo Wert Null erreichen SETALL In diesem Fall sollte das Feld arr von arg auf einen Speicherbereich verwei sen in dem die neuen Werte der Signale gespeichert sind Diese Werte berschreiben bei Angabe von SETALL dann die bisherigen Einstellungen Die Gr e des Speicherbereichs kann zu SizeOf Word Anzahl der Si ee _gnale im System ermittelt werden S SETVAL Der Wert des Signals Nummer semnum wird auf de
67. dungs entwicklung und zum Komponentendesign unter Windows und Linux Die CD ROM die jeder Ausgabe beigef gt ist ist eine direkte redaktionelle Erweiterung des Hefts Hier finden Sie die Listings zu den Text Beitr gen zus tzlich Komponenten Compiler Routinen und Tools SDKs und vieles mehr speziell f r Bere MM Programmierer und oftmals exklusiv 114 f r Toolbox Leser Profitieren auch Sie vom geballten Know how praxiserfahrener Autoren und bestellen Sie das Schnupperabo mit drei Heften zum Preis von zwei Ich bestelle 3 Ausgaben der Programmiererzeitschrift Toolbox Per Fax an 0 89 200 281 26 im Mini Abo zum Sonderpreis von nur 20 frei Haus Preis au erhalb Deutschland 23 oder per Post an unten stehende Ad resse Ich war in den letzten 12 Monaten kein Toolbox Abonnent Name Vorname Aktion Mini ABO Stra e Nr d D a Or PLZ Ort x An 8 Datum Unterschrift o Sollte sich meine Adresse ndern erlaube ich der Deutschen Bundespost meine neue Tool box Verl ag 2e Adresse dem Verlag mitzuteilen Toolbox 3 Ich w nsche folgende Zahlungsweise wie angekreuzt Abo Service CSJ Bequem und bargeldlos durch Bankabbuchung Kontonummer Bankleitzahl Postfach 140220 u 80452 M nchen Geldinstitut Durch berweisung nach Erhalt der Rechnung N Die Toolbox finden Sie im Bahnhofsbuchhandel und am Kiosk mit diesem Zeichen _ PRESSE Comp
68. e Funktion den Wert 1 zuriick Siehe auch fpSocket fpSend und fpRecvFrom FPSETSOCKOPT function fpSetSockOpt s cint level cint optname cint optval pointer optlen tsocklen cint fpSetSockOpt setzt die Verbindungsoptionen f r den Socket s Der Socket kann auf verschiedenen Ebenen ver ndert werden wie im Parameter level angegeben level kann einen der folgenden Werte annehmen SOL SOCKET Um den Socket selbst zu manipulieren XXX Setzt Level auf XXX die Nummer des Protokolls das die Option interpretieren soll O50 Kapitel 4 Referenz der RTL Online Daten Die aktuelle Option wird im Puffer auf den optval zeigt gespeichert Seine Lange wird mit optlen festgelegt Weitere Informationen zu diesem Aufruf erh lt man in der Unix Magepage zu setsockopt Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen 2 SYS_EBADF Der Socket Deskriptor ist ung ltig E SYS _ENOTSOCK Der Deskriptor ist kein Socket SYS_EFAULT Die Adresse ist au erhalb des eigenen Adre bereichs Siehe auch fpGetSockOpt FPSHUTDOWN function fpShutDown s cint how cint cint fpShutDown schlie t das eine Ende der zweiseitigen Verbindung in s Der Parameter how beschreibt wie die Verbindung heruntergefahren wird und kann einer der fol genden Werte sein 0 Weiterer Empfang ist nicht erlaubt 2 Senden und Empfangen ist verboten Bei Erfolg gibt die Funktion den Wert 0 zur c
69. e Funktion ist veraltet GetSockName liefert den aktuellen Namen des angegebenen Sockets Sock zur ck Addr sollte auf gen gend Speicher verweisen um den Namen aufnehmen zu k nnen Die Gr e des Speichers auf den verwiesen wird sollte in Addrlen angegeben werden Wenn die Funktion erfolgreich war wird Addr auf den Namen und Addrlen auf die L nge von Addr gesetzt Fehler Fehler werden in SocketError gespeichert und k nnen die folgenden Werte annehmen 2 SYS_EBADF Der Socketdeskriptor ist ung ltige SYS_ENOBUFS Das System hat nicht gen gend Pufferspeicher um die Operation auszuf hren r Der Deskriptor ist kein Socket SYS_EFAULT Addr zeigt auf einen Bereich au erhalb des AdreBraums Siehe auch Bind O52 Kapitel 4 Referenz der RTL Online Daten GETSOCKETOPTIONS function GetSocketOptions Sock LongInt Level LongInt OptName LongInt var OptVal var optlen LongInt LongInt GetSocketOptions liefert die Verbindungsoptionen fiir den Socket Sock Diese Optionen k nnen von verschiedenen Levels gewonnen werden Der daf r vorgesehene Parame ter level kann die folgenden Werte annehmen SOL SOCKET Der Socket selbst soll die Optionen bereitstellen XXX Setzen Sie Level auf die Nummer des Protokolls das die Option interpretieren soll Um mehr Informationen ber diesen Befehl zu erhalten schlagen Sie in den Unix Manpages unter getsockopt nach Fehler Fehler werden in SocketError ge
70. ecord der die Struktur des Records TMSGbuf aufweist und gro genug ist um die Botschaft aufzunehmen Das Feld mtype sollte immer vorhanden sein und einen g ltigen Wert enthalten TMSGinfo record sgpool cint sgmap cint sgmax cint sgmnb cint sgmni cint sgssz cint sgtql cint sgseg cushort end Der Record TMSGinfo ist fiir das Handling von Botschafts Warteschlangen implemen tiert und sollte nie direkt benutzt werden TMSQid_ds record sg_per TIPC_Perm sg_first PMSG sg_last PMSG sg_stime time_t sg_rtime time_t sg_ctime time_t sg_cbytes Word sg_qnu Word sg_qbytes Word sg_lspid ipc_pid_t sg_Irpid ipc_pid_t Der Record TMSQid_ds wird von der Routine msgctl zur ckgegeben und enth lt alle Daten iiber die Botschafts Warteschlange Er sollte nie direkt aufgerufen werden da es ein interner Kernel Record ist dessen Felder jederzeit ge ndert werden k nnen TSEMbuf record sem_num cushort sem_op cshort sem_flg cshort end Der TSEMbuf Record wird im semop Befehl verwendet und gibt die Operationen an die ausgef hrt werden sollen TSEMid_ds record sem_perm TIPC_Perm sem_otime time_t sem_ctime time_t sem_base Pointer sem_pending Pointer sem_pending_last Pointer undo Pointer Kapitel 4 19 Unit ipc Konstanten Typen Variablen 061 sem_nsems cushort end Der Record TSEMid_ds wird vom Befehl s
71. eiber unter st tzt zur ck Erlaubt der Treiber das Umschalten der Bildschirmmodi nicht retour niert die Funktion die Zahl 1 In Verbindung mit GetVideoModeData k nnen ber diese Funktion die Daten der un terst tzten Bildschirmmodi abgefragt werden Siehe auch GetVideoModeData und GetVideoMode program Example8 Beispiel f r die Funktion GetVideoModeCount uses Video Keyboard VidUtil procedure DumpMode M TVideoMode Index Integer var S String begin Str Index 2 S Inc Index TextOut 1 Index Daten f r den Modus S if M Color then TextOut 19 Index Farbe else TextOut 19 Index Keine Farbe Str M Row 3 S Kapitel 4 20 Unit Video GetVideoModeData 089 TextOut 28 Index S Zeilen Str M Col 3 S TextOut 36 Index S Spalten end var i Count Integer m TVideoMode begin InitVideo InitKeyboard Count GetVideoModeCount for I 1 to Count do begin GetVideoModeData I 1 M DumpMode M I 1 end TextOut 1 Count 1 Weiter mit beliebiger Taste UpdateScreen False GetKeyEvent DoneKeyboard DoneVideo end Listing 04 43 videoex ex8 pp GETVIDEOMODEDATA function GetVideoModeData Index Word var Data TVideoMode Boolean GetVideoModeData liefert die Charakteristika des in Index ausgew hlten Bildschirm modus in Data zur ck Index ist nullbasiert und besitzt einen h chstm glichen Wert von
72. eibung errAbort Abbrechen und Fehlercode zur ckgeben errRetry Operation wiederholen Tabelle 04 5 Die Aufz hlungswerte f r den Datentyp TErrorHandlerReturnValue TVideoBuf array 0 32759 of TVideoCell Der Datentyp TVideoBuf stellt den Bildschirm dar TVideoCell Word TVideoCell beschreibt ein Zeichen auf dem Bildschirm Eines der beiden Byte steht f r das Farbattribut mit dem das Zeichen auf dem Bildschirm angezeigt wird das andere enth lt den ASCII Code des Zeichens das abgebildet wird Die genaue Position der unterschiedlichen Byte im Record ist betriebssystemspezifisch Auf den meisten Litte Endian Systemen Intel Format enth lt das High Byte das Farbattribut und das Low Byte den ASCII Code des Zeichens selbst TVideoDriver record InitDriver procedure DoneDriver procedure UpdateScreen procedure Force Boolean ClearScreen procedure SetVideoMode function const Mode TVideoMode Boolean GetVideoModeCount function Word GetVideoModeData function Index Word var Data TVideoMode Boolean SetCursorPos procedure NewCursorX Word NewCursorY Word GetCursorType function Word SetCursorType procedure NewType Word GetCapabilities function Word end 0834 Kapitel 4 Referenz der RTL Online Daten ber TVideoDriver und mit dem Aufruf SetVideoDriver kann ein eigener Bildschirmtrei ber installiert werden Bei der Funktion und im allgemeinen Abschnitt zu e
73. eiden Bildschirmpuffer VideoBuf und OldVideoBuf auf den Werten dieser Variablen initialisiert Diese Prozedur sollte alle von InitDriver aufgebauten Strukturen wie der freigeben Au erdem sollte m glichst auch der Bildschirm auf die Werte vor der Initialisierung des Treibers zur ckgesetzt werden Die beiden Arrays VideoBuf und OldVideoBuf werden vom allge meinen Aufruf DoneVideo wieder freigegeben Die einzige unbedingt notwendige Funktion des Treibers Sie sollte den Bildschirm auf Basis des Inhalts des Arrays VideoBuf aktualisie ren Dieser Vorgang wird optimiert indem die Werte gegen die des Arrays OldVideoBuf abgeglichen werden Nach dem Aktualisieren des Bildschirms mu die Prozedur Update Screen den Puffer OldVideoBuf eigenst ndig aktualisieren Ist der Parameter Force auf True gesetzt wird der gesamte Bild schirm aktualisiert nicht nur die ge nderten Werte Wenn es eine schnellere M glichkeit gibt den Bildschirm zu l schen als alle Zeichenzellen mit Leerzeichen zu berschreiben kann das an dieser Stelle eingebaut werden Ist diese Funktion im Treiber nicht implementiert schreibt die allgemeine Routine Leerzei chen in alle Bildschirmzellen und ruft anschlie end die Prozedur UpdateScreen True auf Diese Funktion setzt falls sie verf gbar ist den gew nschten Bild schirmmodus Sie sollte True zur ckgeben wenn der Bildschirm modus gesetzt werden konnte und False wenn nicht Sollte die Zahl der unter
74. einen Zeiger auf das letzte Vorkommen des Zeichens c im nullterminierten String p zur ck Wird c nicht gefunden liefert die Funktion den Wert NIL Ein Beispiel befindet sich bei der Funktion StrScan Siehe auch StrScan StrPos und SysUtils StrRScan STRSCAN function StrScan p PChar c Char PChar Gibt einen Zeiger auf das erste Vorkommen des Zeichens c im nullterminierten String p zur ck Falls c nicht gefunden wird liefert die Funktion den Wert NIL Siehe auch StrRScan StrPos und SysUtils StrScan program Examplel3 Beispiel f r die Funktionen StrScan und StrRScan uses Strings const P PChar s Char begin Writeln P ab dem ersten s StrScan P s Writeln P ab dem letzten s StrRScan P s end Listing 04 31 stringex ex13 pp Das ist ein PChar String S STRUPPER function StrUpper p PChar PChar Konvertiert p in Gro buchstaben Die Funktion gibt p zur ck Ein Beispiel ist bei der Funktion StrLower gezeigt Siehe auch StrLower und SysUtils StrUpper O32 Kapitel 4 Referenz der RTL Online Daten 4 18 Unit Sockets Die Unit Sockets von Free Pascal wurde urspr nglich von Michael Van Canneyt f r Linux geschrieben und von Florian Kl mpfl auf Windows portiert Sie ruft folgende Units auf baseunix UnixType 4 18 1 Konstanten Typen und Variablen Konstanten Die folgenden Konstanten bestimmen die Socket Domain sie stehen im Aufruf von Socket
75. eise von unbekannten Funktionen f hrt der Aufruf von LockScreenUpdate vor 090 Kapitel 4 Referenz der RTL Online Daten dem Zeichnen und UnlockScreenUpdate nach dem Zeichnen gefolgt von einem Up dateScreen dazu da alle Schreibarbeiten auf den Bildschirm auf einen Schlag durch gef hrt werden Siehe auch UpdateScreen UnlockScreenUpdate und GetLockScreenCount Ein Beispiel ist bei der Funktion GetLockScreenCount gezeigt SETCURSORPOS procedure SetCursorPos NewCursorX Word NewCursorY Word SetCursorPos stellt den Cursor an die angegebene Position mit der Zeilenangabe New CursorX und der Spalte NewCursorY Der Ursprung der Bildschirmkoordinaten befindet sich mit dem Koordinatenpaar 0 0 an der linken oberen Ecke Die aktuelle Position wird in den Variablen CursorX und CursorY gespeichert Siehe auch SetCursorType program example2 uses Video Keyboard var P PP D Integer K TKeyEvent procedure PutSquare P Integer C Char begin VideoBuf P Ord C 07 shl 8 VideoBuf P ScreenWidth Ord c 07 shl 8 VideoBuf P 1 Ord c 07 shl 8 VideoBuf P ScreenWidth 1 Ord c 07 shl 8 end begin InitVideo InitKeyBoard P 0 PP 1 repeat if PP lt gt 1 then PutSquare PP PutSquare P SetCursorPos P mod ScreenWidth P div ScreenWidth UpdateScreen False PP P repeat D 0 K TranslateKeyEvent GetKeyEvent case GetKeyEvent
76. eite O100 erweitert werden Mehr Informationen zum Lesen und Setzen des Tastaturtreibers k nnen ab Seite O100 nachgelesen werden Siehe auch SetKeyboardDriver GETKEYEVENT function GetKeyEvent TKeyEvent GetKeyEvent gibt das letzte Tastatur Ereignis zur ck oder wartet auf einen Event wenn gerade kein Ereignis anliegt Eine nicht blockierende Version dieses Aufrufs ist mit PollKeyEvent verf gbar Die zur ckgegebene Taste wird als TKeyEvent Variable kodiert und ist normalerweise der Scancode der physikalischen Taste der Scancode ist treiberabh ngig Er kann mit den Funktionen TranslateKeyEvent oder TranslateKeyEventUniCode bersetzt werden Im Abschnitt zu den Typdeklarationen ab Seite 0107 ist beschrieben wie die Tasten definiert sind Fehler Falls keine Taste gelesen werden konnte beispielsweise weil sie der Treiber nicht unterst tzt wird der Wert 0 zur ckgegeben Siehe auch PutKeyEvent PollKeyEvent TranslateKeyEvent und TranslateKeyEventUni Code program examplel Beispiel f r die Funktion GetKeyEvent uses keyboard var K TKeyEvent begin InitKeyBoard WriteLn Drticken Sie eine Taste repeat K GetKeyEvent K TranslateKeyEvent K Write Tastaturevent erhalten mit case GetKeyEventFlags K of kbASCII WriteLn ASCII Taste kbUniCode WriteLn Unicode Taste kbFnKey WriteLn Funktionstaste q beendet das Beispiel 0110 Kapitel 4 Referenz der RTL Onl
77. emctl zur ckgeliefert und enth lt alle Daten die sich auf die Signal bertragung Semaphore beziehen TSEMinfo record semmap cint semmni cint semmns cint semmnu cint semmsl cint semopm cint se e cint semusz cint semvmx cint semaem cint end Der TSEMinfo Record wird vom Signal bertragungssystem verwendet und sollte nicht direkt benutzt werden PSEMun TSEMun TSEMun record case LongInt of 0 val LongInt 1 buf PSEMid_ds 2 Carr PWord 3 padbuf PSeminfo 4 padpad Pointer end Der variante Record TSEMun eigentlich eine C Union wird im semctl Befehl verwen det TShmid_ds record shm_per TIPC_Perm shm_segsz cint shm_atime time_t shm_dtime time_t shm_ctime time_t shm_cpid ipc_pid_t shm_lpid ipc_pid_t shm_nattch Word shm_npages Word shm_pages Pointer attaches Pointer end Die Struktur TSHMid_ds ermittelt oder setzt im Befehl shmctl die Einstellungen die sich auf den gemeinsam genutzten Speicher beziehen TSHMinfo record shmmax cint shmmin cint shmmni cint shmseg cint shmall cint end Der TSHMinfo Record wird intern im System des gemeinsam nutzbaren Speichers verwendet der Programmierer darf nicht direkt auf einen solchen Record zugreifen O62 Kapitel 4 Referenz der RTL Online Daten Die Unit enth lt au erdem eine ganze Reihe vorgefertigter Zeiger auf die zusammen
78. en kann H lt man sich nicht an diese Regel wird ein Laufzeitfehler Nummer 6 ung ltiger Dateihandle ausgel st Fehler Fehler werden in DosError gemeldet Siehe auch FindNext FindClose SysUtils FindFirst SysUtils FindNext SysUtils FindClose program Example7 Beispiel f r die Funktionen FindFirst und FindNext uses ltere Variante mit der Unit Dos xy Dos var Dir SearchRec begin FindFirst archive Dir WriteLn FileName Space 32 FileSize 9 while DosError 0 do begin Writeln Dir Name Space 40 Length Dir Name Dir Size 9 FindNext Dir end FindClose Dir end Listing 04 6 dosex ex7 pp FINDNEXT procedure FindNext var f SearchRec FindNext erh lt als Argument einen SearchRec Record der durch einen FindFirst Befehl initialisiert wurde und versucht die n chste Datei zu finden die mit den dem Find First Befehl bergebenen Kriterien bereinstimmt Falls DosError von Null verschieden ist wurde keine andere die Kriterien erf llende Datei gefunden Fehler DosError meldet Fehler Ein Beispiel befindet sich unter FindFirst Siehe auch FindFirst FindClose SysUtils FindFirst SysUtils FindNext SysUtils FindClose FSEARCH function FSearch path PathStr dirlist String PathStr FSearch sucht die Datei Path in allen Verzeichnissen die in DirList angef hrt werden Die vollst ndige Pfadangabe der gefundenen Datei wird zur ckgeliefert DirList mu eine Liste vo
79. enehmigung des Verlags zur Verf gung gestellt werden Beschrieben werden zuerst jeweils die vordefinierten Konstanten und Variablen an schlie end die Funktionen und Prozeduren mit ihren jeweiligen Parametern und Bei spielen Optionale Parameter stehen immer in eckigen Klammern Teilweise sind Bei spielprogramme gezeigt die in einem Editor eingegeben und mit Free Pascal kompi liert werden k nnen os Kapitel 4 Referenz der RTL Online Daten 4 16 Unit DOS Die Unit DOS bietet den Zugriff auf eine Reihe betriebssystemspezifischer Aufrufe fiir Dateien auf das Dateisystem sowie Datum und Uhrzeit Mit der Ausnahme von Palm OS ist diese Unit auf allen von Free Pascal unterst tzten Plattformen verf gbar Die Unit wurde urspr nglich von Florian Kl mpfl f r DOS geschrieben von Mark May auf Linux portiert und von Micha l Van Canneyt erweitert Der inzwischen veraltete Amiga Port wurde von Nils Sjoholm geschrieben Bei anderen Betriebssystemen als DOS geht ein Teil der Funktionalit t der Unit verlo ren da die Routinen entweder nicht implementiert werden k nnen oder nutzlos sind Sind die Funktionen tats chlich implementiert und nicht nur als Prozedurrumpf aus Gr nden der Abw rtskompatibilit t verhalten sie sich auf den verschiedenen Be triebssystemen gleich Die Unit DOS dient der Kompatibilit t zum veralteten 16 Bit Turbo Pascal Compiler und wird nicht mehr aktiv weiterentwickelt das Interface ist eingefroren und die
80. enen Adre bereichs Siehe auch fpBind FPGETSOCKOPT function fpGetSockOpt s cint Level cint Optname cint Optval Pointer Optlen PSocklen cint fpGetSockOpt erh lt die VerbindungoptionOptname f r den Socket S Der Socket kann auf unterschiedlichen Ebenen erlangt werden die durch den Parameter Level festgelegt werden der einen der folgendenWerte annehmen kann Option interpretieren soll 048 Kapitel 4 Referenz der RTL Online Daten Die Optionen werden an der in Optval angegebenen Speicherstelle abgelegt Optlen sollte die urspr ngliche L nge von Optval enthalten und enth lt bei der R ckkehr der Funktion die tats chliche Gr e der abgelegten Daten Bei Erfolg gibt die Funktion 0 zur ck bei einem Fehler den Wert 1 Fehler Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorge sehen SYS_EBADF Der Socket Deskriptor ist ung ltig SYS EFAULT Op Val zeigt auf einen Bereich au erhalb des eigenen Adre bereichs Siehe auch fpSetSockOpt FPLISTEN function fpListen s cint backlog cint cint fpListen lauscht auf bis zu backlog Verbindungen von Socket s Der Socket s mu ent weder vom Typ SOCK_STREAM oder vom Typ Sock_SEQPACKET sein Die Funktion gibt 0 zur ck wenn eine Verbindung angenommen wurde 1 beim Auf treten eines Fehlers Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen SYS_EBADF Der Socket Des
81. enfolge stehen und gibt das richtig sortierte Ergebnis zur ck Siehe auch htons ntohl und ntohs Kapitel 4 18 Unit Sockets htons O53 HTONS function htons host Word Word htons sorgt daf r da die Byte in host f r den Versand ber das Netzwerk in der rich tigen Reihenfolge stehen und gibt das richtig sortierte Ergebnis zur ck Siehe auch htonl ntohl und ntohs LISTEN function Listen Sock LongInt MaxConnect LongInt Boolean Listen wartet auf maximal MaxConnect Verbindungen vom Socket Sock der vom Typ SOCK_STREAM oder Sock_SEQPACKET sein mu Die Funktion liefert true falls eine Verbindung angenommen wurde false bei einem Fehler Fehler Fehler werden in SocketError gespeichert Folgende Werte sind m glich _SYS_EBADF Der Socketdeskriptor ist ung ltig Der Deskriptor ist kein Socket SYS _EOPNOTSUPP Der Socket Typ unterst tzt keine Listen Operation Siehe auch Socket Bind und Connect NETADDRTOSTR function NetAddrToStr Entry in_addr AnsiString NetAddrToStr in einen menschenlesbaren String mit Punkttrennern um Siehe auch HostAddrToStr StrToNetAddr und StrToHostAddr NETADDRTOSTR6 function NetAddrToStr6 Entry Tin6_addr AnsiString NetAddrToStr6 wandelt die IPV6 Netzwerkadresse in Entry in einen lesbaren String um Vom Grunde her ist das dasselbe wie NetAddrToStr6 allerdings sind hier die Da ten in der richtigen Reihenfolge Siehe auch NetAddrToStr StrToHostAddr Str
82. er x und y enthalten die Position an der das Ereignis eintrat Action gibt an was der Fall war als das Ereignis eintrat Die Felder Buttons und Ac tions k nnen auf die Konstanten im Interface der Unit untersucht werden Variablen MouseButtons Byte Diese Variable speichert die Position des letzten bekannten Mausbuttonstatus Sie sollte nicht verwendet werden MouselntFlag Byte Diese Variable speichert die Position des letzten internen Maus estan isst Sa ssssnessesbesansnesssisssatessantiachessushees bbaapssiitessiasaaanpssssisessinscens _buttonstatus Sie sollte nicht verwendet werden Sie sollte nicht verwendet werden MouseWhereX Word Diese Variable speichert die Position der letzten bekannten ENTE EEE _X Cursorposition Sie sollte nicht verwendet werden MouseWhereY Word Diese Variable speichert die Position des letzten bekannten Y Cursorposition Sie sollte nicht verwendet werden 4 21 2 Prozeduren und Funktionen DETECTMOUSE function DetectMouse Byte DetectMouse stellt fest ob am System eine Maus angeschlossen ist Wird keine Maus gefunden wird der Wert 0 zur ckgeliefert Ist die Suche erfolgreich meldet die Funk tion die Zahl der Maustasten Diese Funktion sollte aufgerufen werden nachdem der Maustreiber initialisiert wurde Siehe auch InitMouse und DoneMouse program Examplel Beispiel f r die Funktion DetectMouse uses Mouse var Buttons Byte begin InitMouse Buttons DetectMouse
83. erden O76 Kapitel 4 Referenz der RTL Online Daten Hinweis Die Unit Video sollte nicht gleichzeitig mit der veralteten an Turbo Pascal angelehnten Unit Crt verwendet werden Das f hrt zu recht seltsamem Programm und Bildschirmverhalten und Abst rze sind wahrscheinlich Die Beispiele in diesem Abschnitt rufen au er der Unit Video auch die Unit VidUtil auf die als einzige Routine die Prozedur TextOut enth lt Sie schreibt einen Text an der angegebenen Stelle auf den Bildschirm und sieht folgenderma en aus unit vidutil Interface uses video procedure TextOut X Y Word const S String implementation procedure TextOut X Y Word const S String var W P I M Word begin P X 1 Y 1 ScreenWidth M Length S if P M gt ScreenWidth ScreenHeight then M ScreenWidth ScreenHeight P for I 1 to M do VideoBuf P I 1 Ord SLiJ 07 shl 8 end end 4 20 1 Schreiben eines eigenen Bildschirmtreibers Das Schreiben eines eigenen Bildschirmtreibers ist gar nicht kompliziert und bedeutet eigentlich nur da eine Reihe von Funktionen die mit SetVideoDriver registriert wer den geschrieben werden m ssen Die verschiedenen zur Implementierung zur Verf gung stehenden Funktionen sind im Record TVideoDriver enthalten TVideoDriver record InitDriver procedure DoneDriver procedure UpdateScreen procedure Force Boolean ClearScreen procedure SetVideoMode
84. ert den Sperrz hler um Eins wenn er gr er Null ist Er reicht der Zahler den Wert 0 aktualisiert ein Aufruf von UpdateScreen den Bildschirm 092 Kapitel 4 Referenz der RTL Online Daten inhalt wieder Solange der Z hler gr er Null ist wird der Bildschirm nicht aktuali siert Mit Hilfe dieses Mechanismus wird die Geschwindigkeit bei zahlreichen Bildschirm ausgaben deutlich erh hlt Dabei mu aber sichergestellt sein da die Zahl der Aufru fe von LockScreenUpdate genau zur Zahl der Aufrufe von UnlockScreenUpdate pa t Siehe auch LockScreenUpdate GetLockScreenCount und UpdateScreen Ein Beispiel ist bei GetLockScreenCount gezeigt UPDATESCREEN procedure UpdateScreen Force Boolean UpdateScreen synchronisiert den aktuellen Bildschirm mit dem Inhalt des internen Puffers VideoBuf Der Parameter Force legt fest ob der komplette Bildschirm neu ge zeichnet werden soll bei Force True oder ob nur die Teile des Puffers auf den Moni tor geschrieben werden sollen die sich seit der letzten Aktualisierung ge ndert haben Die Unit Video bewahrt eine interne Kopie des letzten Bildschirms im Array OldVideo Buf Der aktuelle Inhalt von VideoBuf dagegen wird bei der Pr fung welche Teile neu geschrieben werden m ssen abgeglichen Auf langsamen Terminals wie beispielsweise einer Linux Telnet Sitzung beschleunigt dieser Mechanismus die Bildschirmausgabe merklich Bei Plattformen bei denen die Sichtbarkeit des Mauscursors bei B
85. erte Getsockopt Option IPV6_AUTHHDR Kapitel 4 18 Unit Sockets Konstanten Typen und Variablen 035 F r die folgende Liste von Konstanten gilt das selbe wie f r die letzte Tabelle Konstante Wert Beschreibung _IP_ADD_MEMBERSHIP 35 _ 1P Gruppen Mitgliedschaft hinzuf gen _ i _Der Quellgruppe beitreten f _IP_BLOCK SOURCE Daten von der Quelle blockieren i R __Undokumentiert IP DEFAULT MULTICAST TTL j Undokumentiert _IP Gruppen Mitgliedschaft verwerfen P __Quellgruppe verlassen _IP_HDRINCL __Header ist mit Daten enthalten __Undokumentiert l __Undokumentiert IP MTU DISCOVER 10 Undokumentiert _set get IP Multicast i f _set get IP Multicast Loopback _set get IP Multicast TTL a _IP pro Paket _IP_PKTINFO 8 __Undokumentiert __Undokumentiert a __Undokumentiert IP PMTUDISC_DO 2 Immer DF __Nie DF Frames senden Use per route hints IP_RECVOPTS 6 Alle IP Optionen mit Datagram emp fangen j IP Optionen f r Antwort empfangen i u __Undokumentiert _IP_RECVTTL 12 __Undokumentiert _Set get Optionen f r IP pro Packet i i __Undokumentiert f IP TOS 1 _ Type of Service und Precedence f a _ TTL der IP time to live f IP_UNBLOCK SOURCE 37 Daten von Quelle entblockieren Die folgenden Konstanten sind Multicast Gruppenoptionen Konstante Wert Beschreibung lt
86. eter ab der folgende Werte annehmen kann IPC_STAT Die Funktion msgct f llt den Record TMSQid_ds mit Informationen ber die nl Botschafts Warteschlange wenn der cmd Parameter IPC_STAT entspricht __ IPC_SET Wenn cmd den Wert IPC_SET enth lt wird buf als Zeiger auf einen Record vom Typ ipc_perm interpretiert und setzt die Rechte der Warteschlange ent sprechend dem Inhalt des Records lll IPC_RMID Die Botschafts Warteschlange wird aus dem System entfernt wenn IPC_RMDIR als Wert des Parameters bergeben wird Kapitel 4 19 Unit ipc msgetl 063 buf enth lt die jeweils geforderten Daten Wenn die Warteschlange entfernt werden soll kann der Parameter NIL sein da keine zus tzlichen Daten ben tigt werden Die Funktion liefert true falls erfolgreich ansonsten false Fehler Bei einem Fehler wird false zur ckgegeben und IPCerror entsprechend gesetzt Siehe auch msgget msgsnd und msgrcv program msgtool uses ipc baseunix type PMyMsgBuf TMyMsgBuf TMyMsgBuf record mtype LongInt mtext String 255 end procedure DoError const Msg String begin WriteLn msg Halt 1 end returned an error fpgeterrno procedure SendMessage Id LongInt var Buf TMyMsgBuf MType LongInt const MText String begin WriteLn Sending message Buf mtype mtype Buf Mtext mtext if msgsnd Id PMsgBuf Buf 256 0 1 then DoError msgsnd end procedure ReadMessage ID Lo
87. europa Codepage 866 Russisch ISO 8859 1 Latin 1 Mittel Westeuropa ohne Euro Symbol ISO 8859 2 Latin 2 Mitteleuropa beispielsweise Polen ISO 8859 3 Latin 3 S deuropa ISO 8859 4 Latin 4 Baltikum ISO 8859 5 Kyrillisch Tabelle 04 4 Aufz hlungswerte f r den Datentyp TEncoding Teil1 von 2 Kapitel 4 20 Unit Video Allgemeines 083 Wert Beschreibung SO06 sa ISO 8859 6 Arabisch iso07 ISO 8859 7 Griechisch ISO 8859 8 Hebr isch ISO 8859 9 Latin 5 T rkisch ISO 8859 10 Latin 6 Nordisch ISO 8859 13 Latin 7 Baltikum isol4 ISO 8859 14 Latin 8 Westeuropa ISO 8859 15 Latin 9 ISO 8859 1 mit Euro Symbol Mitteleuropa koi8r Codepage KOI8 R Tabelle 04 4 Aufz hlungswerte f r den Datentyp TEncoding Teil 2 von 2 TErrorHandler function Code LongInt Info Pointer TErrorHandlerReturnValue Mit der Funktion TErrorHandler wird eine eigene Fehlerbehandlungsfunktion regi striert diese mu einen der Werte aus Tabelle 04 5 zur ckgeben Code sollte den Fehlercode f r die Fehlerbedingung enthalten und der Parameter Info beliebige Daten die spezifisch f r den Fehlercode sind der an die Funktion bergeben wird TErrorHandlerReturnValue errRetry errAbort errContinue TErrorHandlerReturnValue gibt Fehler bekannt und reagiert entsprechend auf Fehler bedingungen Die Bedeutung der Felder des Aufz hlungstyps ist in Tabelle 04 5 erl u tert Wert Beschr
88. ew hr f r die Funktions f higkeit beschriebener Verfahren Programme oder Schaltungen 1 Auflage 2009 2009 by C amp L Computer und Literaturverlag Zavelsteiner Stra e 20 71034 B blingen E Mail info cul de WWW http www CuL de Coverdesign Hawa amp N h Neu Eichenberg Satz C amp L Verlag Druck PUT i RB DROGOWIEC Printed in Poland Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt ISBN 978 3 936546 53 8 INHALTSVERZEICHNIS Kapitel 4 Referenz der RTL Online Daten Seite 7 4 16 1 Konstanten Typen und Variablen ccccceeeesccceeeeeeneeeeseneeeeeees 08 4 16 2 Prozeduren und Funktionen uuueeeeeeeeeeeeeeeeneeneenennnennenenennneennnnn 0O11 4 17 Unit StringS essesseosecsccsccscesscsseosecseosessesseosessessessessessessessessesse O24 4 18 Unit Sockets oosseeeosssecosssssssosssscossseseosssseosssesosssssosssesesssesesse O32 4 18 1 Konstanten Typen und Variablen ccccceeescseeeeeeeeteeeeeeeteeeeeees 032 4 18 2 Prozeduren und Funktionen uuueeeeesssssssnnnnnneessssssnnnnnnnneneeeenn O42 4 19 1 Konstanten Typen und Variablen cccccceeescceeeeeeeeteeeeeeeeeeeeees 058 4 19 2 Prozeduren und Funktionen cccccccccccceceesssseceeceecesseessseeeeeeeeees 062 4 20 Unit Video 200s00000000000ssnsssssnnsssssnnnnnnnsssnnnnsssnsnnnnnssnnnnnsnnnnee OTD 4 20 1 Schreiben eines eigenen Bildschirmtreibers O76 4 20 2 Konstanten
89. fpBind s cint Addrx PSockaddr Addrlen TSocklen cint fpBind bindet den Socket s an die Adresse Addrx Addrx besitzt die Gr e Addrlen Die Funktion meldet 0 wenn sie erfolgreich ausgef hrt wurde und 1 wenn nicht Fehler Fehler werden in SocketError zur ckgegeben und enthalten die folgenden Werte SYS_EBADF Der Socket Deskriptor ist ung ltig Der Socket ist bereits an eine Adresse gebunden SYS_EACCESS Die Adresse ist gesch tzt und das Programm hat nicht das Recht sie zu ffnen Weitere m gliche Fehler stehen in den Unix Manpages Siehe auch Socket FPCONNECT function fpConnect s cint name PSockaddr Namelen TSocklen cint fpConnect ffnet eine Verbindung zu einer Gegenstelle deren Adresse in Name ange geben ist NameLen enth lt die L nge der Adresse Der Typ von Name h ngt von der Art der Verbindung die zu ffnen versucht wird ab und ist grunds tzlich entweder vom Typ TSockAddr oder TUnixSockAddr Die Funktion Connect gibt bei Erfolg einen Dateideskriptor zur ck Fehler Bei einem Fehler ergibt die Funktion den Wert 1 Fehler werden in SocketError bergeben Siehe auch fpListen fpBind und fpAccept Kapitel 4 18 Unit Sockets fpGetPeerName 047 Listingbeispiele hierzu sind sockex sockcli pp und sockex pfinger pp bei der Funktion connect FPGETPEERNAME function fpGetPeerName s cint name PSockaddr Namelen psocklen cint fpGetPeerName gibt den Namen der an den angegebenen So
90. function const Mode TVideoMode Boolean GetVideoModeCount function Word GetVideoModeData function Index Word var Data TVideoMode Boolean SetCursorPos procedure NewCursorX NewCursorY Word GetCursorType function Word SetCursorType procedure Newlype Word GetCapabilities function Word end Es miissen allerdings nicht alle diese Funktionen neu implementiert werden notwen dig ist nur UpdateScreen Die allgemeinen Funktionen in der Unit Video priifen welche Funktionalit t der Treiber zur Verf gung stellt Die Funktionalit t dieser Aufrufe ist die selbe wie bei den in diesem Kapitel beschriebenen Aufrufen der Unit Video womit das erwartete Verhalten aus den Beschreibungen in diesem Abschnitt erschlossen wer den kann Einige der Aufrufe ben tigen allerdings ein paar zus tzliche Hinweise Kapitel 4 20 Unit Video Allgemeines O77 InitDriver UpdateScreen ClearScreen GetVideoModeData GetCapabilities Diese Prozedur wird von InitVideo aufgerufen Sie sollte alle Daten strukturen die f r die Funktionsf higkeit des Treibers ben tigt wer den bereitstellen und m glicherweise auch die Bildschirminitialisie rungen Es mu daf r gesorgt sein da die Prozedur garantiert nur einmal aufgerufen wird ein erneuter Aufruf darf nur nach einem DoneVideo erfolgen Die Variablen ScreenWidth und ScreenHeight sollten nach einem Aufruf dieser Prozedur richtig initialisiert sein da InitVideo die b
91. g unterst tzen Siehe auch SetCursorType und GetCapabilities program Example5 Beispiel f r die Funktion GetCursorType uses Video Keyboard VidUtil Kapitel 4 20 Unit Video GetLockScreenCount 087 const Cursortypes arraylcrHidden crHalfBlock of String Versteckt Unterstrichen Block Halber Block begin InitVideo InitKeyboard TextOut 1 1 Cursortyp CursorTypes GetCursorType TextOut 1 2 Ende mit beliebiger Taste UpdateScreen False GetKeyEvent DoneKeyboard DoneVideo end Listing 04 40 videoex ex5 pp GETLOCKSCREENCOUNT function GetLockScreenCount Integer GetLockScreenCount gibt die aktuelle Sperrstufe an Ist sie Null aktualisiert Update Screen den Bildschirm Siehe auch LockScreenUpdate UnlockScreenUpdate und UpdateScreen program Example6 Beispiel f r die Funktion GetLockScreenCount uses Video Keyboard Vidutil var LongInt S String begin nitVideo nitKeyboard TextOut 1 1 Press key until new text appears UpdateScreen False Randomize for I 0 to Random 10 1 do LockScreenUpdate 0 while GetLockScreenCount lt gt 0 do begin Inc 1 Str I S UnlockScreenUpdate GetKeyEvent TextOut 1 1 UnLockScreenUpdate had to be called S times UpdateScreen False end TextOut 1 2 Press any key to end UpdateScreen False GetKeyEvent DoneKeyboard DoneVideo end Li
92. ichen Wer te wie ihre Pendants im Dateisystem haben Falls ein neues Signalsystem erzeugt wurde kann dieses nsems Signale aufnehmen Fehler Bei einem Fehler wird 1 zur ckgegeben und IPCError wird gesetzt Siehe auch ftok semop und semctl Kapitel 4 19 Unit ipc semop 071 SEMOP function semop semid cint sops PSEMbuf nsops cuint cint semop f hrt eine Reihe von Operationen auf verschiedene Signale durch sops zeigt auf ein Array vom Typ TSEMbuf Das Array sollte nsops Elemente enthalten Das Feld einer TSEMbuf Struktur TSEMbuf record sem_num Word sem_op Integer sem_flg Integer end sollte mit folgenden Werten gef llt sein sem_num Die Nummer des Signals im System auf die die Operation durchgef hrt wer PLANEN den soll RR on A NER a sem_op Die auszuf hrende Operation Sie kann folgende Werte annehmen 1 Eine positive Zahl wird zum aktuellen Wert des Signals addiert 2 Falls O Null angegeben wurde wird der Proze angehalten bis das spe zifizierte Signal den Wert Null erreicht hat 3 Falls eine negative Zahl angegeben ist wird sie vom aktuellen Wert des Signals subtrahiert Wenn der Wert des Signals dabei negativ wird wird der Proze angehalten bis der Wert wieder gro genug wird Mit Angabe des IPC_NOWAIT Flags in sem_flg kann dieses Verhalten umgangen wer den sem _flg Falls IPC_NOWAIT angegeben wurde wird der aufrufende Proze nie an gehalten Die Funktion liefert True fal
93. ichen der beiden nullterminierten Strings Str1 und Str2 Das Ergebnis ist ein negativer SizeInt wenn Str lt Str2 0 wenn Strl Str2 Ein positiver SizeInt wenn Str1 gt Str2 Siehe auch StrComp StrIComp StrLIComp und SysUtils StrLComp program Examples Beispiel f r die Funktion StrLComp uses Strings const Pl PChar P2 PChar var L Sizelnt Das ist der erste String Das ist der zweite String begin WriteC Pl und P2 sind if StrComp Pl P2 lt gt 0 then Write NICHT Write gleich Die ersten Lee Shy 028 Kapitel 4 Referenz der RTL Online Daten while StrLComp P1 P2 L 0 do Inc L Dec L WriteLn 1 gt Zeichen sind identisch end Listing 04 22 stringex ex8 pp STRLCopy function StrLCopy Dest PChar Source PChar MaxLen SizeInt PChar Kopiert MaxLen Zeichen von Source nach Dest und macht aus Dest einen nullterminier ten String Fehler Keine es findet keine L ngen berpr fung statt Siehe auch StrCopy StrECopy und SysUtils StrLCopy program Example5 Beispiel f r die Funktion StrLCopy uses Strings const P PChar 123456789ABCDEF var PP PChar begin PP StrAlloc 11 WriteLn Die ersten 10 Zeichen von P StrLCopy PP P 10 StrDispose PP end Listing 04 23 stringex ex5 pp STRLEN function StrLen p PChar Sizelnt Liefert die Lange des nullterminierten Strings p Siehe auch StrNew
94. icht mehr brauchbar oder es kommt sogar zu Speicherl chern Ein Beispiel f r diese Prozedur ist bei den meisten anderen Mausfunktionen gezeigt Siehe auch DoneMouse und DetectMouse POLLMOUSEEVENT function PollMouseEvent var MouseEvent TMouseEvent Boolean PollMouseEvent pr ft ob ein Mausereignis verf gbar ist und gibt es wenn das der Fall ist in MouseEvent zur ck Das Funktionsergebnis ist in diesem Fall True Liegt kein Maus ereignis an ist das Funktionsergebnis False und der Inhalt von MouseEvent undefiniert Zu beachten ist da das Ereignis nach dem Aufruf von PollMouseEvent nicht aus der Warteschlange entfernt ist es mu erst mit GetMouseEvent gel scht werden Siehe auch GetMouseEvent und PutMouseEvent PUTMOUSEEVENT procedure PutMouseEvent const MouseEvent TMouseEvent PutMouseEvent f gt dem Eingabepuffer das Ereignis MouseEvent hinzu Der n chste Aufruf von GetMouseEvent oder PollMouseEvent gibt diesen MouseEvent dann zur ck Es ist zu beachten da abh ngig von ihrem Aufbau die Mausereigniswarteschlange eventuell nur einen Wert zwischenspeichern kann Siehe auch GetMouseEvent und PollMouseEvent SETMOUSEDRIVER procedure SetMouseDriver const Driver TMouseDriver SetMouseDriver setzt den Maustreiber auf den Wert Driver Diese Routine mu vor dem Aufruf von InitMouse und nach dem Aufruf von DoneMouse aufgerufen werden Wird die Prozedur nach dem Initialisieren des Maustreibers aufgerufen ist sie wir
95. ie Unit zur Verf gung gestellt ist einheitlich auf den Textbildschirm geschrieben werden kann Die Arbeitsweise der Bildschirmroutinen ist sehr einfach Nach dem Aufruf von InitVi deo enth lt das Array VideoBuf eine Zwischenspeicherung des Bildschirms der Gr e ScreenWidth ScreenHeight und zwar von links nach recht und oben nach unten wenn man die Elemente des Arrays durchl uft VideoBuf 0 enth lt damit das Zeichen und den Farbcode der obersten linken Ecke des Bildschirms und VideoBuf ScreenWidth die Daten f r die Zeichen in der ersten Spalte in der zweiten Reihe auf dem Bildschirm und so weiter Um in diesen Bildschirm zu schreiben mu der Text in das Array VideoBuf geschrie ben werden Der Aufruf von UpdateScreen kopiert dann den Text in m glichst idealer Form in den Bildschirm was in diesem Kapitel auch noch an einem Beispiel gezeigt wird Das Attribut f r die Farbe ist eine Kombination aus Vordergrund und Hintergrundfar be erg nzt um das Blinkbit Die folgenden Bitangaben beschreiben die diversen Farb kombinationen Bit 0 3 Die Vordergrundfarbe hierf r k nnen alle Farbkonstanten eingesetzt werden Bit 4 6 Die Hintergrundfarbe sie kann auf einen Teilbereich der dunklen Farben der Jede m gliche Farbe hat eine zugeordnete Konstante die alle in der Liste der Konstan ten ab Seite O80 aufgef hrt sind Die Vordergrund und die Hintergrundfarbe k nnen auch direkt zu einem Farbattribut verschmolzen werden
96. ieder abgeschaltet werden oder es wird zur Laufzeit mit dem Aufruf von SetKeybo ardDriver ein anderer Treiber installiert Unter Unix setzt der voreingestellte Tastaturtreiber das Terminal in den Raw Modus In diesem Modus wechselt der aktuelle Zeilenumbruch zum Zeilenvorschub ohne Wagen r cklauf Das hei t da der Cursor zwar eine Zeile nach unten wandert dabei sich aber die X Koordinate nicht ndert was dem Verhalten unter DOS Windows entspricht Um dieses Verhalten zu kompensieren setzt der Treiber das Zeilenende auf System Output was dem unter DOS Windows und OS 2 gel ufigen 13 10 entspricht Siehe auch DoneKeyboard und SetKeyboardDriver Ein Beispiel ist bei den meisten anderen Funktionen abgebildet IsFUNCTIONKEY function IsFunctionKkey KeyEvent TKeyEvent Boolean IsFunctionKey ergibt True wenn die in KeyEvent angegebene Taste eine Funktionstaste war Siehe auch GetKeyEvent program examplel Beispiel f r die Funktion GetKeyEvent uses keyboard var K TKeyEvent begin InitKeyBoard WriteLn Press keys press q to end repeat K GetKeyEvent K TranslateKeyEvent K if IsFunctionKkey K then WriteLn Got function key KeyEventToString K else WriteLn not a function key until GetKeyEventChar K q DoneKeyBoard end Listing 04 54 kbdex ex7 pp KEYEVENTTOSTRING function KeyEventToString KeyEvent TKeyEvent String KeyEventToString tibersetzt das Tastat
97. igenen Bildschirmtreibern ab Seite O76 befinden sich weitere Informationen zu diesem Re cord TVideoMode record Col Word Row Word Color Boolean end Der Record TVideoMode beschreibt einen Bildschirmmodus Seine Felder sind selbster kl rend Col und Row steht f r die Zahl der Spalten und Zeilen auf dem Bildschirm Color ist True wenn der Modus Farben unterst tzt und False wenn nicht TVideoModeSelector function const VideoMode TVideoMode Params LongInt Boolean TVideoModeSelector ist der Prototyp eines Callbacks f r die Auswahl des Bildschirm modus Variablen Die Unit Video enth lt einige wichtige Variablen CursorLines Byte CursorLines ist eine Bitmaske die festlegt welche Cursorzeilen sichtbar sind oder ausgeblendet werden Jedes Bit steht f r eine Zeile des Cursors Diese Variable ist nicht auf allen Plattformen vorhanden und sollte deshalb mit Bedacht angewandt werden CursorX Word Die aktuelle horizontale Position auf dem Bildschirm an die ee Er E die Daten geschrieben werden nn CursorY Word Die aktuelle vertikale Position auf dem Bildschirm an die die nach seiner letzten Aktualisierung Die Funktion UpdateScreen pr ft dieses Array und entscheidet dann welche Zeichen auf dem Bildschirm aktualisiert werden m ssen und welche nicht Es ist zu beachten da das Array OldVideoBuf unter Umst n den von einigen Bildschirmtreibern bergangen wird und deshalb m glichst vom Anwendung
98. ildschirmaktualisie rungen nicht garantiert ist mu der Mauszeiger nach dem Update aktualisiert werden Normalerweise wird dazu vor dem Schreiben die Prozedur HideMouse und nach dem Update die Routine ShowMouse beide aus der Unit Mouse aufgerufen Ein Beispiel f r diese Prozedur ist bei den meisten anderen Funktionen abgebildet Siehe auch ClearScreen Kapitel 4 21 Unit Mouse Allgemeines 093 4 21 Unit Mouse Die Unit Mouse bietet eine plattformunabh ngige Schnittstelle zur Maussteuerung die auf allen von Free Pascal 2 unterst tzten Plattformen verf gbar ist Sie kann bei Be darf durch selbstgeschriebene Treiber erweitert werden beispielsweise um durch das Protokollieren von Mausereignissen eine Aufzeichnungs und Wiederabspielfunktion zur Verf gung zu stellen Die Unit ist nur f r Textmodus und nicht f r grafische Programme ausgelegt und basiert prinzipiell auf dem Zusammenspiel mit den beiden Units Keyboard und Video Wichtig Die Unit Mouse von Free Pascal 2 ist nicht zur gleichnamigen Unit von Free Pascal 1 kompatibel 4 21 1 Konstanten Typdeklarationen und Variablen Konstanten Fehlerkonstanten Konstante Wert Beschreibung errMouseBase 1030 Basis f r die Fehlercodes der Maussteuerung errMouseNotlmplemented errMouseBase 1 Maustreiber nicht implementiert Allgemeine Konstanten f r die Maussteuerung Konstante Wert Beschreibung MouseActionDown 0001 Signal wenn die Maustaste gedr ckt wird
99. ine Daten kbPhys WriteLn Physikalischer Taste kbReleased WriteLn Freigegebenem Tastaturevent end WriteLn Erhaltene Taste KeyEventToString K until GetKeyEventChar K q DoneKeyBoard end Listing 04 51 kbdex ex1 pp GETKEYEVENTCHAR function GetKeyEventChar KeyEvent TKeyEvent Char GetKeyEventChar liefert den Anteil des Tastencodes des angegebenen Records KeyE vent falls dieser einen bersetzten Zeichencode in Keycode enth lt Der Zeichencode ist einfach nur der ASCII Code der gedr ckten Zeichentaste Die Funktion ist nur bei Funktionstasten sinnvoll nicht bei alphanumerischen Tasten Ein Beispiel fiir die Funktion ist bei GetKeyEvent abgebildet Siehe auch GetKeyEventUniCode GetKeyEventShiftState GetKeyEventFlags GetKeyE ventCode und GetKeyEvent GETKEYEVENTCODE function GetKeyEventCode KeyEvent TKeyEvent Word GetKeyEventCode gibt den bersetzten Funktionstastenanteil des bergebenen Records KeyEvents zur ck falls dieser Record eine bersetzte Funktionstaste enth lt War die gedriickte Taste keine Funktionstaste oder Taste des Cursorblocks wird ein ASCII Null zur ckgemeldet Siehe auch GetKeyEventUniCode GetKeyEventShiftState GetKeyEventFlags GetKeyE ventChar und GetKeyEvent program Example2 Beispiel f r die Funktion GetKeyEventCode uses keyboard var K TKeyEvent begin InitKeyBoard Writeln Dr cken Sie eine erweiterte Taste q beendet
100. ine gesetzt werden Der Zeiger wird in der Voreinstellung auf die Funktion DefaultErrorHandler gesetzt Zeiger auf die erweiterten Fehlerinformationen Allgemeine Fehlerkonstanten errVioBase errVioBase errViolnit Der Grundwert f r Videofehler 1 Bildschirmtreiber Initialisierung ist fehlge schlagen Die Unit arbeitet auch mit unterschiedlichen Schriften daf r sind die Codepages ein mal allgemein und einmal als VGA Codepages definiert iso_codepages iso01 iso02 iso03 iso04 iso05 iso06 iso07 iso08 iso09 isol0 isol3 isol4 iso15 vga_codepages cp437 cp850 cp852 cp866 iso_codepages ist eine Aufz hlung mit allen Codepages basierend auf der ISO Codierung vga_codepages ist eine Aufz hlung mit allen Code pages bei denen mit normaler VGA Karte ein VGA Font ausgew hlt werden kann Zu beachten ist da dabei die Grafikzeichen an falschen Stellen in der Ta belle sind Einschr nkungen des Zeichensatzes LowAscii true Auf einigen Systemen sind die unteren 32 Zeichen 0 bis 31 der DOS Codepage f r die ASCII Steuerzeichen erforderlich und k nnen von Programmen nicht ange zeigt werden 082 Kapitel 4 Referenz der RTL Online Daten Ist LowAscii auf True gesetzt k nnen die unteren 32 ASCII Zeichen genutzt werden ist der Wert auf False gesetzt sollten sie vermieden werden LowAscii kann je nach Bedarf als Konstante Variable oder Property def
101. iniert werden es darf aber unter kei nen Umst nden erwartet werden da LowAscii ge schrieben werden kann oder die Adresse geholt werden kann NoExtendedFrame false Der VT100 Zeichensatz kennt nur Linienzeichen mit einer einfachen Linie Ist dieser Wert auf True gesetzt werden die Zeichen zum Zeichnen von Linien automa tisch immer auf die einfachen Linien gesetzt und die doppelten Linienzeichen werden automatisch konver tiert NoExtendedFrame kann je nach Bedarf als Konstante Variable oder Property definiert werden es darf aber unter keinen Umst nden erwartet werden da NoEx tendedFrame geschrieben werden oder die Adresse geholt werden kann Bildschirmdaten ScreenHeight Word 0 Die aktuelle Bildschirmh he mit O vorbelegt Ss Die aktuelle Bildschirmbreite mit O vorbelegt FVMaxWidth 132 Die gr tm gliche Bildschirmpufferbreite in Zeichen Typdeklarationen PVideoBuf TVideoBuf Zeiger auf TVideoBuf PVideoCell TVideoCell Zeiger auf TVideoCell PVideoMode TVideoMode Zeiger auf den Record TVideoMode TEncoding cp437 cp850 cp852 cp866 koi8r iso0l iso02 iso03 iso04 iso05 iso06 iso07 iso08 iso09 isol0 isol3 isol4 isol5 Dieser Datentyp ist nur auf unixartigen Betriebssystemen verfiigbar Beschreibung Codepage 437 Englisch US amerikanischer Standard Codepage 850 Westeuropa Eingabeaufforderungen bei deutscher Win dows Version Codepage 852 Mittel
102. itel 4 m W code I data T begin Val mod if code if ShmC rite Halt end WriteLn data sh if ShmC rite Halt end WriteLn end const ftokpat begin if Para key shmget key segsize IPC_CREAT or IPC_EXCL or 438 ShmID if ShmI Write ShmID if Sh ri Hal end end els Write SegPtr if Long Write Halt end case Up W R 40 M else Wri Usa end end Listing 04 SHMDT function 19 Unit ipc shmdt 073 ord nteger SHMid_ds e m code lt gt 0 then Usage tl ShmID IPC_STAT data 1 then begin Ln Error ShmCtl fpgeterrno IE Old permissions data shm_perm mode _perm mode m tl ShmID IPC_SET data 1 then begin Ln Error ShmCt fpgeterrno _ New permissions data shm_perm mode h 0 mCount lt 1 then Usage ftok PChar ftokpath 1 Ord S D 1 then begin Ln Shared memory exists Opening as client shmget key segsize 0 ID 1 then begin teLn shmget Error fpgeterrno t 1 e Ln Creating new shared memory segment shmat ShmID NIL 0 Int SegPtr 1 then begin Ln Shmat error fpgeterrno 1 case ParamStr 1 1 of writeshm ShmID SegPtr ParamStr 2 ReadSHM ShmID SegPtr RemoveSHM ShmID ChangeMode ShmID ParamStr 2 teLn ParamStr 1 ge 37 ipcex shmtool pp shmdt sh
103. k bei einem Fehler 1 Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen S Der Socket Deskriptor ist ung ltig Der Socket ist nicht verbunden SYS_ENOTSOCK Der Deskriptor ist kein Socket Siehe auch fpSocket und fpConnect FPSOCKET function fpSocket domain cint xtype cint protocol cint cint fpSocket erzeugt einen neuen Socket vom Typ xType mit dem Protokoll Protocol in der Domain domain Domain Socket Typ und Protokoll k nnen mit vordefinierten Kon stanten belegt werden siehe dazu den Abschnitt ber Konstanten in diesem Kapitel ab Seite 032 Wird die Funktion erfolgreich abgeschlossen liefert sie einen Socket Deskriptor der an einen nachfolgenden Aufruf von fpBind bergeben werden kann beim Auftreten eines Fehlers gibt die Funktion 1 zur ck Ein Beispiel ist bei der Funktion Accept gezeigt Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen SYS_EPROTONOSUPPORT Der Protokolltyp oder das angebene Protokoll wird in dieser Domain nicht unterst tzt Die proze bezogene Deskriptortabelle ist voll Die Adresse ist gesch tzt und das Programm hat nicht das Aut Se ae eer ze Recht sie zu ffnen ee SYS_ENOBUFS Das System besitzt nicht genug freie Puffer um die Operati on durchf hren zu k nnen Kapitel 4 18 Unit Sockets fpSocketPair O51 Siehe auch SocketPair FPSOCKETPAIR function fpSocketPair d cint x
104. ker Typ Stream Verbindungs Socketiyp TCP _SOCK DGRAM 2 Socket Typ Datagram verbindungsloser Socket UDP 3 Socket Typ Roh Socket 4 Socket Typ Nachricht wurde tats chlich ausgeliefert 5 5 SOCK SEQPACKET SOCK _MAXADDRLEN 25 Socket Typ Sequentieller Packet Socket Maximale Socketadre l nge f r den Aufruf von Bind Die folgenden Konstanten sind Werte f r die Socket Optionen Konstante Wert Beschreibung _Undokumentiert _Socketoptionsebene Socketebene i _Socketebenen Werte f r IPv6 IPV6 SOL_ICMPV6 58 Socketebenen Werte f r IPv6 ICMPV6 Die folgende Konstante beschreibt ein System Limit Konstante Wert Beschreibung SOMAXCONN 128 Maximum queue length specifiable by listen Die folgenden Konstanten beschreiben Socket Optionen _Konstante _ Wert Beschreibung O SO DEBUG 1 Socketoptionenebene Debug SO ERROR 4 Socket Option Fehler SO_SNDBUF 7 Socket Option Puffer senden SO_OOBINLINE 10 Socket Option 2 SO_LINGER 13 Socket Option 2 _SO_PEERCRED SO RCVTIMEO SO_SNDTIMEO 21 Socket Option 2 Kapitel 4 18 Unit Sockets Konstanten Typen und Variablen 039 SO_SECURITY_AUTHENTICA 22 Socket Option SO SECURITY ENCRYPTION 23 Socket Option TRANSPORT SO_BINDTODEVICE 25 _Socket Option SO_PEERNAME 28 _Socket Option 2 SO ACCEPTCONN 30 Socket Option 2 Die folgenden Ko
105. kriptor ist ung ltig SYS EOPNOTSUPP Der Socket unterst tzt die Operation Listen nicht Siehe auch fpSocket fpBind und fpConnect FPRECV function fpRecv s cint buf Pointer len size_t Flags cint ssize_t fpRecv liest maximal len Byte aus dem Socket s an die Adresse buf Der Socket mu in einem verbundenen Status sein Flags kann einer der folgenden Werte sein 1 _ Daten au erhalb des Bands verarbeiten Out of band Data 4 _ Das Routing soll umgangen und eine direkte Schnittstelle verwendet werden 22 Warte auf die vollst ndige Anfrage oder generiere eine Fehlermeldung Die Funktion gibt die Zahl der aktuell aus dem Socket gelesenen Byte aus oder 1 wenn ein erkennbarer Fehler auftrat Fehler werden in SocketError gespeichert Folgende Fehlercodes sind vorgesehen SYS EBADF Der Socket Deskriptor ist ung lti Der Deskriptor ist kein Socket SYS EMSGSIZE Die Meldung konnte nicht atomar gesendet werden SYS_ENOBUFS Das System besitzt nicht genug freie Puffer um die Operation durchf hren zu k nnen Siehe auch Send Kapitel 4 18 Unit Sockets fpRecvFrom 049 FPRECVFROM function fpRecvFrom s cint buf Pointer len size_t flags cint from PSockaddr Fromlen PSocklen ssize_t fpRecvFrom empfangt aus dem Socket s Daten mit der maximalen Lange Len in den Puffer Buf Der Empfang wird von den Optionen in Flags gesteuert Der Speicherplatz auf den from zeigt wird mit de
106. kungslos Siehe auch InitMouse DoneMouse und GetMouseDriver SETMOUSEXY procedure SetMouseXY x Word y Word SetMouseXY plaziert den Mauszeiger auf dem Koordinatenpaar X Y X und Y sind null basierte Zeichenkoordinaten 0 0 befindet sich an der oberen linken Ecke des Bild schirms Die Position wird in Zeichenzellen und nicht in Bildpunkten gemessen Siehe auch GetMouseX und GetMouseY program Example7 Beispiel f r die Funktion SetMouseXY uses Mouse begin InitMouse Writeln Rechte Maustaste beendet das Programm 098 Kapitel 4 Referenz der RTL Online Daten SetMouseXY 40 12 repeat Writeln GetMouseX GetMouseY if GetMouseX gt 70 then SetMouseXY 10 GetMouseY if GetMouseY gt 20 then SetMouseXY GetMouseX 5 until GetMouseButtons MouseRightButton DoneMouse end Listing 04 49 mouseex ex7 pp SHOWMOUSE procedure ShowMouse ShowMouse zeigt einen bisher ausgeblendeten Mauszeiger Die M glichkeit ob das Aus und Einblenden m glich ist h ngt von den F higkeiten des Treibers ab Ein Beispiel f r diese Prozedur ist bei HideMouse gezeigt Siehe auch HideMouse Kapitel 4 22 Unit Keyboard Allgemeines 099 4 22 Unit Keyboard Die Unit Keyboard stellt eine systemunabh ngige Zugriffsschicht f r die Tastatur zur Verf gung Mit ihr k nnen der Tastaturstatus abgefragt und auch diverse Ereignisse gewartet werden Die Funktion GetKeyEvent wartet auf ein Tastaturereignis und
107. leitzahl Geldinstitut C Durch berweisung nach Erhalt der Rechnung
108. ls die Operationen erfolgreich waren ansonsten False Fehler Bei einem Fehler wird False zur ckgeliefert und IPCerror wird gesetzt Siehe auch semget und sernctl SHMAT function shmat ShmID cint shmaddr Pointer shmflg cint Pointer shmat bindet einen gemeinsam nutzbaren Speicherblock mit der ID shmid an den ak tuellen Proze und gibt einen Zeiger auf diesen zur ck Falls shmaddr gleich NIL ist w hlt das System einen bisher nicht zugeteilten Speicherbereich aus der sich so hoch wie m glich im Adre raum befindet Falls shmaddr verschieden von NIL ist und SHM_RND in shmflg angegeben ist wird shmaddr auf SHMLBA abgerundet Falls SHM_RND nicht angegeben wurde mu shmaddr an Seitengrenzen ausgerichtet sein Der Parameter shmflg kann das Verhaltens von shmat steuern und folgende Werte annehmen Verkn pfung mit OR 2 SHM_RND ____Die angegebene Adresse in shmaddr wird zu SHMLBA abgerundet SHM_RDONLY Es besteht nur Lesezugriff auf den Speicherblock wenn diese Option angegeben wurde ansonsten wird der Speicher f r Lesen und Schreiben hinzugef gt Die Applikation braucht Lese und Schreibzugriff um den geteilten Speicher zu verwalten Fehler Bei einem Fehler wird 1 zur ckgeliefert und IPCError wird gesetzt Siehe auch shmget shmdt shmctl Zum Beispiel siehe shmctl 072 Kapitel 4 Referenz der RTL Online Daten SHMCTL function ShmCtl ShmID cint cmd cint buf PShmid_DS cint shmctl f hrt verschiedene
109. maddr Pointer cint shmdt trennt den Speicher der Adresse shmaddr vom Proze ab Dieser Speicherblock ist f r den aktuellen Proze nicht mehr zug nglich bis er durch einen shmat Befehl wieder angef gt wird O74 Kapitel 4 Referenz der RTL Online Daten Die Funktion liefert true falls der Speicherblock erfolgreich abgetrennt wurde anson sten False Fehler Bei einem Fehler wird False zur ckgeliefert und IPCError wird gesetzt Siehe auch shmget shmat shmctl SHMGET function shmget key TKey size size_t flag cint cint shmget liefert die ID des gemeinsam nutzbaren Speicherblocks der durch key be schrieben wird Abh ngig von den Flags in flag wird ein neuer Speicherblock erstellt flag kann einen oder mehreren der folgenden Werte annehmen Kombination mit OR IPC_EXCL Kann nur in Kombination mit IPC_CREAT angegeben werden und f hrt zu einem Fehler falls der Speicherblock bereits vorhanden ist Optional k nnen die Flags noch mit Zugriffsrechten verkn pft werden deren Werte den Zugriffsrechten von Dateien entsprechen Wird ein neuer Speicherblock erstellt hat er die Gr e Size Fehler Bei einem Fehler wird 1 zur ckgegeben und IPCError gesetzt Siehe auch shmat shmdt shmctl Kapitel 4 20 Unit Video Allgemeines 075 4 20 Unit Video Die Unit Video stellte eine systemunabh ngige Zwischenschicht f r den Zugriff auf den Bildschirm zur Verf gung weshalb auf allen Plattformen f r die d
110. n end Listing 04 12 dosex exY pp Kapitel 4 16 Unit DOS GetIntVec 019 GETINTVEC procedure GetIntVec intno Byte var vector Pointer GetIntVec liefert die Adresse des Interruptvektors IntNo Dieser Aufruf macht gar nichts und ist nur aus Gr nden der Abw rtskompatibilit t vorhanden moderne Betriebssysteme erlauben diesen direkten Zugriff auf die Hard ware nicht Siehe auch SetIntVec GETLONGNAME function GetLongName var p String Boolean Diese Funktion ist nur in den Versionen f r Go32v2 und Win32 von Free Pascal ver f gbar GetLongName ndert den Dateinamen p in einen langen Dateinamen Das Er gebnis des API Aufrufs ist der lange Dateiname des kurzen Dateinamens p Die Funkti on ergibt True wenn der Aufruf erfolgreich war Die Funktion wird nur beim DOS Extender unter Windows 95 und h her ben tigt Fehler Kann der API Aufruf nicht erfolgreich ausgef hrt werden meldet die Funktion False zur ck Siehe auch GetShortName GETMSCOUNT function GetMsCount Int64 GetMSCount liefert eine Zahl von Millisekunden seit einem bestimmten Zeitpunkt Dieser Zeitpunkt ist implementationsabh ngig Wird f r Timingoperationen ben tigt die Subtraktion zweier aufeinanderfolgender Aufrufe ergibt die Zahl der Millisekunden zwischen den beiden Aufrufen Diese Funktion ist nicht sehr genau es werden stattdessen systemspezifische Aufrufe f r Timerabfragen empfohlen Siehe auch GetTime GETSHORTNAME
111. n den und Hundertstel einer Sekunde der zu setzenden Zeitangaben Unter Linux ben tigt dieser Aufruf root Rechte bei anderen unixartigen Betriebssy stemen macht der Aufruf nichts Siehe auch GetTime und SetDate SETVERIFY procedure SetVerify Verify Boolean SetVerify setzt oder entfernt das DOS Flag Verify Wenn Verify True ist pr ft DOS Da ten die auf die Festplatte geschrieben wurden indem es sie wieder einliest und die Pr fsummen vergleicht Falls Verify False ist werden die geschriebenen Daten nicht berpr ft Hinweis Auf Nicht DOS Systemen ausgenommen OS 2 Anwendungen unter reinem DOS ist Verify immer True Siehe auch SetVerify SWAPVECTORS procedure SwapVectors SwapVectors vertauscht den Inhalt der internen Interruptvektorentabelle mit dem ak tuellen Inhalt der Interruptvektoren Der Befehl sollte vor und nach einem Exec Aufruf ausgef hrt werden damit dem aufgerufenen Programm die standardm igen Inter ruptvektoren zur Verf gung stehen Hinweis Bei diversen Betriebssystemen ist diese Prozedur nur als leerer Rumpf im plementiert Siehe auch Exec und SetIntVec Kapitel 4 16 Unit DOS UnixDateToDt O23 UNIXDATETODT procedure UnixDateToDt SecsPast LongInt var Dt DateTime DTToUnixDate konvertiert den Unix Zeitstempel in SecsPast in eine g ltige DateTime in DT Dies ist eine interne Funktion die auf Unix Plattformen implementiert ist und nicht verwendet werden sollte Siehe auch DTTo
112. n Verzeichnissen sein die durch Strichpunkte getrennt werden Falls keine Datei gefunden wurde wird eine leere Zeichenfolge zur ckgeliefert Hinweis Unter unixartigen Systemen kann als Trenner in DirList auch der dort f r Pfadtrennungen bliche Doppelpunkt angegeben werden Siehe auch FExpand O16 Kapitel 4 Referenz der RTL Online Daten program Examplel0 Beispiel f r die Funktion FSearch uses Dos var s PathStr begin s FSearch ParamStr 1 GetEnv PATH if s then WriteLn ParamStr 1 nicht im Suchpfad gefunden else Writeln ParamStr 1 im Suchpfad befinden unter s end Listing 04 7 dosex ex10 pp FSPLIT procedure FSplit path PathStr var dir DirStr var name NameStr var ext ExtStr FSplit zerlegt einen vollst ndigen Dateinamen path in die drei Teile Pfad dir Datei name name und Suffix ext Unter Linux gilt als Endung die Folge der Buchstaben die hinter dem letzten Punkt stehen Bei DOS gibt es eine Ausnahme wenn LFNSupport False ist denn dann ist die Endung alles hinter dem ersten Punkt Siehe auch FSearch program Examplel2 Beispiel f r die Funktion FSplit uses Dos var dir DirStr name NameStr ext ExtStr begin FSplit ParamStr 1 dir name ext riteLn Gesplittet wird ParamStr 1 in riteLn Pfad dir riteLn Name name riteLn Endung ext end Listing 04 8 d
113. n Wert des Feldes val des Parameters arg gesetzt Kapitel 4 19 Unit ipc semctl O67 Fehler Bei einem Fehler liefert die Funktion 1 und IPCerror wird entsprechend ge setzt Siehe auch semget und semop program semtool program to demonstrate the use of semaphores uses ipc baseunix const MaxSemValue 5 procedure DoError const Msg String begin WriteLn Error msg Code fpgeterrno Halt 1 end function getsemval ID Member LongInt LongInt var S TSEMun begin GetSemVal SemCtl id Member SEM_GETVAL S end procedure DispVal ID Member LongInt begin WriteLn Value for Member Member GetSemVal ID Member 1 4 end function GetMemberCount ID LongInt LongInt var opts TSEMun semds TSEMid_ds begin opts buf semds if semctl Id 0 IPC_STAT opts lt gt 1 then GetMemberCount semds sem_nsems else GetMemberCount 1 end function OpenSem Key TKey LongInt begin OpenSem semget Key 0 438 if OpenSem 1 then DoError OpenSem end function CreateSem Key TKey Members LongInt LongInt var Count LongInt Semopts TSemun begin the semmsi constant seems kernel specific if Members gt semms then DoError Sorry maximum number of semaphores in set exceeded WriteLn Trying to create a new semaphore set with Members Members O68 CreateSem if CreateSem DoError
114. n kann F mu zugewiesen darf aber nicht ge ffnet sein Die Attri bute k nnen eine Summe der folgenden Konstanten sein ReadOnly 01h Hidden 02h SysFile 04h Volumeld 08h Directory 10h Archive 20h AnyFile 3fh O22 Kapitel 4 Referenz der RTL Online Daten Bei unixartigen Dateisystemen wie Linux ist die Prozedur zwar implementiert bewirkt aber nichts Fehler Fehler werden in DosError gemeldet Siehe auch GetFAttr SETFTIME procedure SetFTime var f Time LongInt SetFTime stellt die Zeit der letzten nderung der Datei f auf Time ein Die Zeit mu im gepackten Zeitformat von DOS vorliegen das durch PackTime erzeugt werden kann F mu zugewiesen aber darf nicht ge ffnet sein Bei unixartigen Dateisystemen wie Linux ist die Prozedur zwar implementiert macht aber nichts Fehler Fehler werden in DosError gemeldet Siehe auch GetFTime PackTime und UnPackTime SETINTVEC procedure SetIntVec intno Byte vector Pointer SetIntVec setzt den Interruptvektor IntNo auf die Interrupt Prozedur auf die Vector verweist Diese Prozedur ist zwar aus Gr nden der Abw rtskompatibilit t implementiert sie ist aber wirkungslos Siehe auch GetIntVec SETTIME procedure SetTime hour Word minute Word second Word sec100 Word SetTime setzt die Zeit der internen Systemuhr Der Parameter hour wird im 24 Stunden System ausgelesen minute second und sec100 enthalten die Minuten Seku
115. n_addr PInetSockAddr psockaddr_in Zeiger auf den Datentyp sockaddr_in PInetSockAddr6 psockaddr_in6 eiger auf den Datentyp sockaddr_in6 type in_addr in_addr eiger auf den Record in_addr inger linger Z p Z p Zeiger auf den Datentyp linger psockaddr sockaddr Zeiger auf eine TSockAddr psockaddr_in sockaddr_in Zeiger auf den sockaddr_in psockaddr_in6 sockaddr_in6 Zeiger auf sockaddr_in6 psockaddr_un sockaddr_un Zeiger auf sockaddr_un sa_family_t cushort Datentyp f r die Adre familie sockaddr packed record if sa_len is defined sa_family_t is smaller ifdef SOCK_HAS_SINLEN sa_len cuchar endif case Integer of Kapitel 4 18 Unit Sockets Konstanten Typen und Variablen 0 sa_family sa_data 1 sin_family sin_port sin_addr sin_zero end 041 sa_family_t packed array 0 13 of cuint8 sa_family_t cushort in_addr packed array 0 7 of cuint8 In sockaddr ist eine allgemeine Socketadresse fiir Bind Recv und Send gespeichert sockaddr_in packed record case boolean of false ifdef SOCK_HAS_SINLEN sin_len cuchar endif sin_family sa_family_t sin_port cushort sin_addr in_addr xpad array 0 7 of Char to get to the size of sockaddr JE true ifdef SOCK_HAS_SINLEN len cuchar endif family sa_family_t port cushort addr cardinal array l0 7 of Char to get to the size
116. ngInt var Buf TMyMsgBuf MType LongInt begin WriteLn Reading message Buf MType MType if msgrev ID PMSGBuf Buf 256 mtype 0 lt gt 1 then WriteLn type buf mtype gt Text buf mtext else DoError msgrcv end procedure RemoveQueue ID LongInt begin if msgctl id IPC_RMID NIL lt gt 1 then WriteLn Removed Queue with id Id end procedure ChangeQueueMode ID mode LongInt var QueueDS TMSQid_ds begin if msgctl Id IPC_STAT QueueDS 1 then DoError msgctl stat Writeln Old permissions QueueDS msg_perm mode QueueDS msg_perm mode Mode 064 Kapitel 4 Referenz der RTL Online Daten if msgetl ID IPC_SET QueueDS 0 then WriteLn New permissions QueueDS msg_perm mode else DoError msgctl IPC_SET end procedure Usage begin WriteLn Usage msgtool s end lt type gt lt text gt max 255 characters WriteLn r eceive lt type gt WriteLn d elete WriteLn m ode lt decimal mode gt Halt 1 end function StrToInt S String LongInt var M LongInt C Integer begin Val S M C if C lt gt 0 then DoError StrToInt SJ StrToInt M end var Key TKey D LongInt Buf TMyMsgBuf const ipckey 0 begin if ParamCount lt 1 then Usage key Ftok ipckey 1 Ord M D msgget key IPC_CREAT or 438 if ID lt 0
117. noriert dabei die Gro und Kleinschreibung Das Ergebnis ist ein negativer SizeInt wenn Str1 kleiner als Str2 ist 0 wenn die beiden Zeichenketten gleich sind Ein positiver SizeInt wenn Str1 gr er als Str2 ist Siehe auch StrLComp StrComp StrLIComp und SysUtils StrIComp program Example8 Beispiel f r die Funktion StriComp uses Strings const Pl PChar Das ist der erste String P2 PChar Das ist der zweite String var L Sizelnt begin Write Pl und P2 sind if StrComp P1 P2 lt gt 0 then Write NICHT Kapitel 4 17 Unit Strings StrLCat 027 Write gleich Der erste srl while StrLComp Pl P2 L 0 do Inc L Dec 1 WriteLn 1 Zeichen sind gleich end Listing 04 20 stringex ex8 pp STRLCAT function StrLCat Dest PChar Source PChar 1 SizeInt PChar F gt L Zeichen an von Source an Dest an und dann das abschlie ende ASCII 0 Zeichen Die Funktion gibt Dest zuriick Siehe auch StrCat und SysUtils StrLCat program Examplel2 Beispiel f r die Funktion StrLCat uses Strings const Pl PChar 1234567890 var P2 PChar begin P2 StrAlloc StrLen P1 2 1 P2 0 L nge Null StrCat P2 P1 StrLCat P2 P1 5 riteLn P2 P2 StrDispose P2 end Listing 04 21 stringex ex12 pp STRLCOMP function StrLComp Stri PChar Str2 PChar L Sizelnt Sizelnt Vergleicht maximal L Ze
118. nstanten sind Werte fiir TCP Socketoptionen und nicht weiter be schrieben TCP_MAXSEG 1 2 3 A TCP_KEEPINTVL 5 3 6 7 TCP_LINGER2 8 9 TCP_INFO 11 2 TCP MD5SIG 14 2 Die folgenden Konstanten sind Werte fiir UDP Socketoptionen und nicht weiter be schrieben Konstante Wert Beschreibung leee UDP CORK 1 _UDP_ENCAP LZTPINUDP omn S UDP_ENCAP 100 Typdeklarationen Die Unit definiert eine ganze Reihe spezialisierter Datentypen in6_addr packed record case Byte of 0 u6_addr8 array 0 15 of Byte 1 u6_addr16 array 0 7 of Word 2 u6_addr32 array 0 3 of Cardinal 040 Kapitel 4 Referenz der RTL Online Daten 3 s6_addr8 array 0 15 of ShortInt 4 s6_addr array 0 15 of ShortInt 5 s6_addr16 array 0 7 of SmallInt 6 s6_addr32 array 0 3 of LongInt end in6_addr ist ein Record f r das Beschreiben einer allgemeinen IPv6 Adresse in_addr packed record case Boolean of true s_addr cuint32 inaddr_t cuint32 false s_bytes packed array 1 4 of Byte end in_addr erfa t die allgemeine Internet Socket Adresse linger packed record l_onoff cint l_linger cint end Dieser Record wird im Aufruf von setsockopt ben tigt um Linger Optionen zu definie ren PIn6Addr pin6_addr Zeiger auf den Datentyp in6_addr pins_addr in6_addr Zeiger auf den Datentyp Tin6_addr PInAddr pin_addr Ein Alias f r pi
119. ode const Mode TVideoMode Boolean SetVideoMode setzt den in Mode angegebenen Bildschirmmodus War der Aufruf er folgreich besitzt der Bildschirm Mode Col Zeilen und Mode Row Spalten und wird in Farbe angezeigt wenn Mode Color den Wert True hat Die Funktion meldet True wenn der Modus erfolgreich eingeschaltet werden konnte False wenn nicht Bemerkung Der Bildschirmmodus muf nicht unbedingt gesetzt werden zum Beispiel k nnen eine Konsole unter Linux oder eine Telnet Sitzung den Modus nicht immer setzen Es mu also berpr ft werden ob der Fehlerwert den die Funktion zur ck gibt einen Fehler signalisiert Der Modus kann bereits festgelegt werden wenn der Bildschirmtreiber noch gar nicht initialisiert wurde das hei t wenn InitVideo noch gar nicht aufgerufen wurde In die sem Fall wird der gew hlte Modus nach dem Initialisieren des Treibers mit InitVideo eingeschaltet Der Aufruf von SetVideoMode vor dem Aufruf von InitVideo l scht den voreingestellten Bildschirmmodus Um zu erfahren welche Modi berhaupt g ltig sind m ssen die Funktionen GetVi deoModeCount und GetVideoModeData aufgerufen werden der aktuelle Bildschirmmo dus wird mit GetVideoMode ermittelt Fehler Kann der gew nschte Bildschirmmodus nicht gesetzt werden wird in ErrorCo de der Wert errVioNoSuchMode gesetzt Siehe auch GetVideoModeCount GetVideoModeData GetVideoMode UNLOCKSCREENUPDATE procedure UnlockScreenUpdate UnlockScreenUpdate verring
120. oder die Meldung eines Fehlers warten Die Funktionen liefern die Anzahl an Byte die tats chlich vom Socket gelesen werden oder 1 falls ein Fehler bemerkt wurde Fehler Fehler werden in SocketError gespeichert Es k nnen folgende Werte auftreten SYS_EBADF Der Socketdeskriptor ist ung ltig SYS_ENOBUFS Dem System steht nicht genug freier Pufferspeicher zur Verf gung Siehe auch Send RECVFROM function RecvFrom Sock LongInt var Buf Buflen LongInt Flags LongInt var Addr var AddrLen LongInt LongInt RecvFrom empfangt Daten aus dem Socket Sock in den Puffer Buf mit der Maximallan ge BufLen Der Empfang wird mit den Optionen in Flags kontrolliert In Addr wird die Adresse des Senders eingetragen die die Lange AddrLen haben darf Die Funktion gibt die Zahl der empfangenen Byte oder bei einem Fehler den Wert 1 zur ck Siehe auch Socket recv und Send SEND Send sendet AddrLen Byte beginnend bei der Adresse Addr an den Socket Sock Es mu eine Verbindung zum Socket bestehen Die Funktion liefert die Anzahl der gesendeten Byte oder 1 falls ein Fehler bemerkt wurde Flags kann folgende Werte annehmen 1 Daten au erhalb des Bandes verarbeiten Process out of band data 4 Routing umgehen und eine direkte Schnittstelle verwenden Fehler Fehler werden im SocketError gespeichert Es gibt folgende Fehler SYS _EBADF Der Socketdeskriptor ist ung ltig SYS_ENOTSOCK Der Deskriptor i
121. olean GetVerify liefert den Status des DOS Flags Verify Ist es True berpr ft DOS Daten die auf die Festplatte geschrieben werden indem sie nach jedem Schreibzugriff unmittel bar erneut gelesen und die Pr fsummen verglichen werden Ist Verify False werden die Daten nicht tiberpriift Hinweis Auf Nicht DOS Systemen ausgenommen OS 2 Anwendungen unter reinem DOS ist Verify immer True Siehe auch SetVerify INTR procedure Intr IntNo Byte var Regs Registers Intr f hrt einen Softwareinterrupt mit der Nummer IntNo zwischen 0 und 255 aus indem die Prozessorregister auf Regs gesetzt werden Der Inhalt der Register vor Rtick kehr der Interruptprozedur wird in Regs gespeichert Hinweise Unten Nicht DOS System macht dieser Aufruf nichts Siehe auch MsDos MsDos procedure MSDos var Regs Registers MSDos f hrt einen Betriebssystemaufruf aus Die Prozedur entspricht einem Aufruf des Intr Befehls mit der Interruptnummer f r den Betriebssystemaufruf Hinweis Bei Nicht DOS Betriebssystemen macht dieser Aufruf gar nichts unter DOS wird der Interrupt 21h aufgerufen Siehe auch Intr PACKTIME procedure PackTime var t DateTime var p LongInt PackTime konvertiert das Datum und die Zeit die in T gespeichert sind in ein gepack tes Format das an die Datei SetFTime als Parameter bergeben werden kann Siehe auch SetFTime FindFirst FindNext und UnPackTime program Example4 Beispiel f r die Funktionen Pack
122. osex ex12 pp GETCBREAK procedure GetCBreak var breakvalue Boolean GetCBreak ermittelt den Status der Strg Pause Priifung unter DOS und Amiga OS Wenn BreakValue False ist wird nur wahrend E A Operationen auf die Eingabe von Strg Pause getestet Falls BreakValue True ist findet eine solche Uberpriifung bei jedem Systemaufruf statt Auf allen anderen Plattformen ergibt BreakValue immer den Wert True Siehe auch SetCBreak GETDATE procedure GetDate var year Word var month Word var mday Word var wday Word GetDate liest das Systemdatum aus Year ist eine Zahl im Bereich von 1980 bis 2099 Month gibt die Zahl des Monats an w hrend mday den Tag im Monat beschreibt Der Wochentag des aktuellen Datums wird in wday zur ckgegeben wobei der Sonntag als Tag 0 Montag als Tag 1 und so weiter z hlen Siehe auch GetTime und SetDate Kapitel 4 16 Unit DOS GetEnv 017 program Example2 Beispiel f r die Funktion GetDate uses Dos const DayStr array 0 6 of String 3 Son Mon Die Mit Don Fre Sam MonthStr array 1 12 of String 3 Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez var Year Month Day WDay Word begin GetDate Year Month Day WDay WriteLn Aktuelles Datum WriteLn DayStr WDay Day MonthStr LMonth gt Year
123. ouseY gibt die vertikale Position der Maus auf dem Bildschirm zur ck Y wird in Zeichen angegeben wobei am oberen Bildschirmrand mit dem Wert 0 begonnen wird Ein Beispiel f r diese Funktion ist bei GetMouseX gezeigt Siehe auch GetMouseButtons GetMouseEvent und GetMouseX HIDEMOUSE procedure HideMouse HideMouse blendet den Mauszeiger aus Diese Funktion funktioniert nicht unbedingt auf allen Systemen Ob sie Auswirkungen zeitigt hangt vom Treiber ab Siehe auch ShowMouse program Example5 Beispiel f r die Funktion HideMouse uses Mouse var Event TMouseEvent Visible Boolean begin InitMouse ShowMouse Visible true WriteLn Linke Maustaste zeigt versteckt rechte Taste beendet repeat GetMouseEvent Event with Event do if Buttons MouseLeftbutton and Action MouseActionDown then begin if Visible then HideMouse else ShowMouse Visible not Visible end until Event Buttons MouseRightButton and Kapitel 4 21 Unit Mouse InitMouse 097 Event Action MouseActionDown DoneMouse end Listing 04 48 mouseex ex5 pp INITMOUSE procedure InitMouse InitMouse initialisiert den Maustreiber Die Prozedur belegt alle ben tigten Datenstruk turen damit die Maus funktioniert Nach dem InitMouse k nnen die anderen Maus funktionen aufgerufen werden Einem Aufruf von InitMouse mu beim Programmende immer ein Aufruf von Done Mouse folgen Wird er ausgelassen ist die Maus n
124. pfung mit OR 0 Hat keine spezielle Bedeutung Die Botschaft wird an die Warteschlange angeh ngt Falls die Warteschlange voll ist wird der aufrufende Proze miele a blockiert bis die Warteschlange wieder Botschaften aufnehmen kann ___ IPC_NOWAIT Falls die Warteschlange voll ist wird die Botschaft verworfen und der Befehl kehrt sofort zur ck O66 Kapitel 4 Referenz der RTL Online Daten Die Funktion liefert true falls die Meldung erfolgreich gesendet wurde ansonsten false Fehler Bei einem Fehler liefert der Befehl false und IPCerror wird gesetzt Siehe auch msgget msgrcv seefmsgctl Ein Beispiel befindet sich unterhalb zur Erkl rung zu msgctl SEMCTL function semctl semid cint semnum cint cmd cint var arg TSEMun cint semctl f hrt verschiedene Operationen auf die Nachricht semnum im Signalsystem mit der ID semid aus Der Parameter arg wird je nach auszuf hrender Operation verschieden interpretiert Es gibt folgende Darstellungen des varianten Records type TSEMun record case LongInt of 0 val LongInt 1 buf PSEMid_ds 2 arr PWord 3 padbuf PSeminfo 4 padpad Pointer end Welche Operation ausgef hrt wird h ngt vom Parameter cmd ab der einen der fol genden Werte annehmen kann IPC_STAT In diesem Fall sollte das Feld buf des Parameters arg gesetzt sein und die Adresse eines TSEMid_ds Records enthalten Der Befehl semct f llt diese Sem en Struktur TSEMid_
125. r Adresse vom Sender gefiillt und die Lange in Fromlen Die Funktion gibt die Zahl der empfangenen Byte aus Fehler Tritt ein Fehler auf wird 1 zur ckgegeben Siehe auch fpSocket und fprecv FPSEND function fpSend s cint msg pointer len size_t flags cint ssize_t fpSend sendet Len Byte ab der Adresse Msg an den Socket s s mu dazu verbunden sein Optionen k nnen der Verbindung in Flags bergeben werden Die Funktion gibt die Zahl der gesendeten Byte zur ck und 1 wenn ein erkennbarer Fehler auftrat flags kann einer der folgenden Werte sein 1 Daten au erhalb des Bandes verarbeiten Out of band Data 4 Das Routing soll umgangen und eine direkte Schnittstelle angesprochen werden Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen SYS _EBADF Der Socket Deskriptor ist ung ltig Der Deskriptor ist kein Socket Die Adresse ist au erhalb des eigenen Adre bereichs Die Meldung konnte nicht atomar gesendet werden SYS_ENOBUFS Das System besitzt nicht genug freien Puffer um die Operation durchf hren zu k nnen Siehe auch fpRecv FPSENDTO function fpSendTo s cint msg pointer len size_t flags cint tox psockaddr tolen tsocklen ssize_t fpSendTo sendet Daten aus dem Puffer Msg mit der Lange len durch den Socket s mit der Option Flags Die Daten werden an die Adresse tox gesandt die die Lange toLen besitzt Fehler Beim Auftreten eines Fehlers gibt di
126. rhalten KeyEventToString K end else rite until GetKeyEventChar K q DoneKeyBoard end Listing 04 55 kbdex ex4 pp POLLSHIFTSTATEEVENT function PollShiftStateEvent TKeyEvent PollShiftStateEvent gibt den aktuellen Shiftstatus in einem TKeyEvent zur ck Das Er gebnis ist 0 wenn kein Tastaturereignis anliegt Siehe auch PollKeyEvent GetKeyEvent program example6 Beispiel f r die Funktion PollShiftStateEvent uses keyboard var K TKeyEvent begin InitKeyBoard WriteLn Drticken Sie eine Taste repeat K PollKeyEvent if k lt gt 0 then begin K PollShiftStateEvent WriteLn Sondertaste erhalten ShiftStateToString K False Consume the key K GetKeyEvent K TranslateKeyEvent K end else q beendet das Programm 0114 Kapitel 4 Referenz der RTL Online Daten Write until GetKeyEventChar K q DoneKeyBoard end Listing 04 56 kbdex ex6 pp PUTKEYEVENT procedure PutKeyEvent KeyEvent TKeyEvent PutKeyEvent f gt den angegebenen KeyEvent in die Eingabewarteschlange ein Es mu beachtet werden da abh ngig von der aktuellen Implementation diese Warteschlan ge immer nur einen Wert aufnehmen kann das hei t da wenn PutKeyEvent mehr fach aufgerufen wird immer nur die letzte gedr ckte Taste erhalten bleibt Siehe auch PollKeyEvent GetKeyEvent program example5 Beispiel f r die Prozedur PutKeyEvent
127. riteLn VideoLog Count rows if DetailedVideoLogging then begin for 1 0 to ScreenWidth 1 do if ColUpd I lt gt 0 then Writeln Videolog Col i ColUpd I 3 gt rows changed for I 0 to ScreenHeight 1 do if RowUpd I lt gt 0 then Writeln Videolog Row i RowUpd 1 1 3 gt colums changed end end procedure LogUpdateScreen Force Boolean begin if Logging then DumpScreenStatistics Force OldVideoDriver UpdateScreen Force end procedure LogInitVideo begin OldVideoDriver InitDriver Assign VideoLog logFileName Rewrite Videolog Active true StartVideologging end procedure LogDoneVideo begin StopVideologging Close Videolog Active false OldVideoDriver DoneDriver end oso Kapitel 4 Referenz der RTL Online Daten procedure SetVideoLogFileName FileName String begin if not Active then LogFileName FileName end initialization GetVideoDriver OldVideoDriver NewVideoDriver OldVideoDriver NewVideoDriver UpdateScreen LogUpdateScreen NewVideoDriver InitDriver LogInitVideo NewVideoDriver DoneDriver LogDoneVideo LogFileName Video log Logging false SetVideoDriver NewVideoDriver end 4 20 2 Konstanten Typen und Variablen Konstanten Die folgenden Angaben stehen f r die Farben des Textbildschirms Black 0 _ Schwarz l T rkis l Purpur _ Braun
128. rstellen von IPC Nachrichten vorhanden IPC CREAT 1 shl 9 Erstellt wenn der Schl ssel nicht existiert Scheitert wenn der Schl ssel existiert Fehler melden wenn gewartet werden mu IPC_NOWAIT 4 shl 9 Diese Konstanten werden f r die verschiedenartigen xxxget Befehle benutzt IPC_RMID 0 Ressource entfernen IPC_SET ipc_perm Optionen setzen ipc_perm Optionen auslesen IPCs anzeigen Diese Konstanten k nnen an die verschiedenen xxxctl Befehle bermittelt werden Dabei handelt es sich um interne Steuercodes die nicht verwendet werden sollten Interner Message Steuercode Nicht verwenden Interner Message Steuercode Nicht verwenden Interner Message Steuercode Nicht verwenden Interner Message Steuercode Nicht verwenden MSG_NOERROR 1 shl 12 Interner Message Steuercode Nicht verwenden Konstanten f r Semaphore SEM _GETALL 13 ________Semaphor Operation Alle Semaphorenwerte lesen SEM_GETNCNT 14 Semaphor Operation Zahl der Prozesse die auf die SEM_GETPID 11 Semaphor Operation Proze ID der letzten Operation ermitteln Kapitel 4 19 Unit ipc Konstanten Typen Variablen 059 SEM_GETVAL 12 Semaphor Operation Aktuellen Wert der Semophore lesen SEM_GETZCNT 15 Semaphor Operation Zahl der Prozesse ermitteln die da rauf warten da die Semaphore den Wert 0 erreichen l SEM_SEMMNS SEM_SEMMNI Semaphor Operation SEM SEMMSL
129. rten Strings Str1 und Str2 Das Ergebnis ist ein negativer SizeInt wenn Str1 kleiner als Str2 ist 0 wenn Str1 und Str2 identisch sind Ein positiver SizeInt wenn Str1 gr er als Str2 ist Kapitel 4 17 Unit Strings StrCopy 025 Ein Beispiel ist bei der Funktion StrLComp gezeigt Siehe auch StrLComp StrIComp und StrLIComp STRCOPY function StrCopy Dest PChar Source PChar PChar Kopiert den nullterminierten String in Source nach Dest und gibt einen Zeiger auf Dest zur ck Dest mu genug freien Speicher reserviert haben um Source aufnehmen zu k nnen mindestens aber StrLen Source 1 Byte Fehler Es wird keine L ngen berpr fung durchgef hrt Siehe auch StrPCopy StrLCopy StrECopy und SysUtils StrCopy program Example4 Beispiel f r die Funktion StrCopy uses Strings const P PChar Das ist ein PChar String var PP PChar begin PP StrAlloc StrLen P 1 StrCopy PP P if StrComp PP P lt gt 0 then WriteLn Oh oh Probleme else WriteLn Alles funktioniert PP PP StrDispose PP end Listing 04 16 stringex ex4 pp STRDISPOSE procedure StrDispose P PChar Entfernt den String auf den P zeigt vom Heap und gibt den Speicher wieder frei Siehe auch StrNew und SysUtils StrDispose program Examplel7 Beispiel f r die Funktion StrDispose uses Strings const P PChar Das ist ein PChar String var P2 PChar begin P2
130. s Nullzeichen bertragen Die Funktion gibt Dest zur ck Siehe auch StrLCopy StrCopy und SysUtils StrMove program Examplel0 Beispiel f r die Funktion StrMove uses Strings const Pl PChar Das ist ein PChar String var P2 PChar begin P2 StrAlloc StrLen Pl 1 StrMove P2 Pl StrLen Pl 1 P2 Pl riteLn P2 P2 StrDispose P2 end Listing 04 26 stringex ex10 pp STRNEW function StrNew p PChar PChar Kopiert p auf den Heap und gibt einen Zeiger auf die Kopie zurtick Fehler Die Funktion gibt NIL zur ck wenn nicht genug Speicher f r die Kopie verf g bar ist Siehe auch StrCopy StrDispose und SysUtils StrNew program Examplel6 Beispiel f r die Funktion StrNew uses Strings const Pl PChar Das ist ein PChar String var P2 PChar O30 Kapitel 4 Referenz der RTL Online Daten begin P2 StrNew P1 if Pl P2 then WriteLn Das kann nicht passieren else WriteLn P2 P2 StrDispose P2 end Listing 04 27 stringex ex16 pp STRPAS function StrPas p PChar ShortString Konvertiert den nullterminierten String p in einen Pascal String um und gibt ihn als Funktionsergebnis zuriick Der Ergebnisstring wird bei einer Lange von 255 Zeichen abgeschnitten Siehe auch StrPCopy und SysUtils StrPas program Example3 Beispiel f r die Funktion StrPas uses Strings const P PChar Das ist ein PChar String
131. s Programm l uft Unter Unix restauriert der voreingestellte Tastaturtreiber die Zeilenenden au erdem von System Output nach 10 Ein Beispiel f r den Aufruf dieser Prozedur wird bei den meisten anderen Funktionen gezeigt Siehe auch InitKeyBoard FUNCTIONKEYNAME function FunctionkeyName KeyCode Word String FunctionKeyName gibt einen String mit dem Namen der Funktionstaste f r den Code KeyCode zur ck Dabei kann es sich um eine Fxx Taste oder eine der Cursortasten handeln Fehler In F llen in denen KeyCode keinen Code einer Funktionstaste enth lt wird der String SUnknownFunctionKey mit dem angeh ngten KeyCode zur ckgegeben Siehe auch ShiftStateToString und KeyEventToString program Example8 Beispiel f r die Funktion FunctionKeyName uses Keyboard var K TKeyEvent Kapitel 4 22 Unit Keyboard GetKeyboardDriver 0109 begin InitKeyboard Writeln Dr cken Sie eine Funktionstaste oder q um zu beenden repeat K GetkeyEvent K TranslateKeyEvent K if IsFunctionKkey k then begin Write Funktionstaste erhalten Writeln FunctionKeyName TKeyRecord K KeyCode end until GetKeyEventChar K q DoneKeyboard end Listing 04 50 kbdex ex8 pp GETKEYBOARDDRIVER procedure GetKeyboardDriver var Driver TKeyboardDriver GetKeyBoardDriver gibt in Driver den aktuell g ltigen Tastaturtreiber zur ck Mit dieser Funktion kann ein vorhandener Tastaturtreiber siehe S
132. sentwickler nicht genutzt werden sollte Das Array befindet sich haupts chlich im Inter face Bereich der Unit Video damit es beim Schreiben von st tzt Diese Variable stellt das Herz der Unit Video dar und das Array ist der physikalische Bildschirm Das Schreiben in das Array und anschlie ende Aufrufen von UpdateScreen zeigt die Se SUN wi aktuellen Zeichen auf dem Monitor an ea VideoBufSize Longlnt Die aktuelle Gr e des Bildschirmpuffers auf den VideoBuf zeigt Die beiden folgenden Variablen sind nur f r internen Gebrauch vorgesehen external_codepage TEncoding internal_codepage TEncoding Kapitel 4 20 Unit Video ClearScreen oss 4 20 3 Prozeduren und Funktionen CLEARSCREEN procedure ClearScreen ClearScreen l scht den aktuellen Bildschirm und ruft anschlie end UpdateScreen auf Beim L schen des Bildschirminhalts wird in alle Zeichenzellen des Bildschirmpuffers ein Leerzeichen und in die Farbzellen die voreingestellte Farbe Hellgrau auf Schwarz Farbattribut 07 geschrieben Siehe auch InitVideo und UpdateScreen program testvideo uses video keyboard vidutil var i LongInt k TKeyEvent begin InitVideo InitKeyboard for I 1 to 10 do TextOut i i Beliebige Taste l scht den Bildschirm UpdateScreen False GetKeyEvent ClearScreen TextOut 1 1 Bildschirm ist gel scht Ende mit bel Taste UpdateScreen True GetKeyEvent DoneKeyBoard DoneVideo
133. size_t msgtyp cint msgflg cint cint msgrcv ruft eine Botschaft des Typs msgtyp aus der Botschafts Warteschlange mit der ID msqid ab msgtyp enth lt den Typ den die Botschaft besitzen soll entspricht also dem mtype Feld des TMSGbuf Records Die Botschaft wird in der durch msgp angege benen MSGbuf Struktur gespeichert Der Parameter msgflg kann zu Steuerung des Verhaltens des msgrcv Befehls herange zogen werden Der Parameter kann aus einer OR Verkn pfung der folgenden Werte bestehen 0 Keine besondere Bedeutung IPC_NOWAIT Falls keine Meldungen verf gbar sind erzeugt der Befehl sofort Eee Nen ENOMSG Fehler u u tn MSG_NOERROR Falls die Botschaft zu gro ist wird kein Fehler erzeugt sondern die Botschaft gek rzt Normalerweise liefert der Befehl in solchen F llen einen Fehler E2BIG Die Funktion liefert true wenn die Botschaft korrekt empfangen wurde ansonsten false Fehler Bei einem Fehler wird false zur ckgegeben und IPCerror gesetzt Siehe auch msgget msgsnd msgctl Zum Beispiel siehe msgctl MSGSND function msgsnd msqid cint msgp PMSGbuf msgsz size_t msgflg cint cint msgsnd sendet eine Botschaft mit der ID msqid an die Botschaftswarteschlange msgp akzeptiert einen Zeiger auf einen Message Record der auf dem Typ TMsgBuf basieren sollte msgsiz ist die Gr e der Botschaft nicht des gesamten Message Records Die Variable msgflg kann aus folgenden Werten zusammengesetzt sein Verkn
134. speichert Folgende Werte sind m glich SYS_EBADF Der Socketdeskriptor ist ung ltig SYS EFAULT Addr zeigt auf einen Bereich au erhalb des Adre raums Siehe auch SetSocketOptions HosSTADDRTOSTR function HostAddrToStr Entry in_addr AnsiString HostAddrToStr wandelt die Hostadresse in Entry in einen menschenlesbaren String mit Punkttrennern um Dabei handelt es sich prinzipiell um die selbe Funktion wie Ne tAddrToStr aber mit den Byte in korrekter Reihenfolge Siehe auch NetAddrToStr StrToHostAddr und StrToNetAddr HosTADDRTOSTR6 function HostAddrToStr6 Entry Tin6_addr AnsiString HostAddrToStr6 wandelt die IPV6 Hostadresse in Entry in einen menschenlesbaren String mit Punkttrennern um Dabei handelt es sich prinzipiell um die selbe Funktion wie NetAddrToStr6 aber mit den Byte in korrekter Reihenfolge Siehe auch NetAddrToStr StrToHostAddr StrToNetAddr und StrToHostAddr6 HosTToNET function HostToNet Host in_addr in_addr function HostToNet Host LongInt LongInt HostToNet wandelt eine Hostadresse in eine Netzwerkadresse wobei die Endianness der Hostmaschine ber cksichtigt wird Die Adresse kann mit Anf hrungszeichen und Punktrennern oder als LongInt angegeben werden Siehe auch NetToHost NToHS HToNS ShortHostToNet und ShortNetToHost HTONL function htonl host LongInt LongInt htonl sorgt daf r da die Byte in host f r den Versand ber das Netzwerk in der rich tigen Reih
135. st tzten Bildschirmmodi melden Falls keine unterschiedlichen Bildschirmmodi erkannt werden sollte diese Funk tion nicht implementiert werden die allgemeine Routine gibt 1 zur ck was f r den aktuellen Modus steht Diese Funktion sollte die Daten f r den Modus mit dem angegebe nen Index melden Index ist nullbasiert Die Funktion sollte True zur ckgeben wenn die Daten richtig gemeldet wurden und False wenn in Index ein ung ltiger Wert angegeben wurde Ist diese Funktion nicht implementiert gibt die allgemeine Routine die Daten des aktuellen Bildschirmmodus zur ck wenn f r Index der Wert O angegeben ist Ist diese Funktion nicht implementiert wird von der allgemeinen Funktion O das hei t keine F higkeiten zur ckgegeben Die folgende Unit zeigt wie ein Bildschirmtreiber mit einem Treiber der Debuginfor mationen in eine Datei ausgibt berschrieben wird Die Unit kann in Beispielpro gramme eingebunden werden indem sie einfach der Uses Klausel hinzugef gt wird Das Setzen von DetailedVideoLogging auf True erzeugt ein detailliertes Protokoll bremst dabei aber das Programm stark ab 078 Kapitel 4 Referenz der RTL Online Daten unit viddbg interface uses video procedure StartVideologging procedure StopVideologging function IsVideoLogging Boolean procedure SetVideoLogFileName FileName String const DetailedVideoLogging Boolean False implementation uses sysutils keyboard
136. st kein Socket SYS_ENOBUFS Dem System steht nicht genug freier Pufferspeicher zur Verf gung _ Kapitel 4 18 Unit Sockets SendTo O55 Siehe auch recv SENDTO function SendTo Sock LongInt const Buf BufLen LongInt Flags LongInt var Addr AddrLen LongInt LongInt SendTo sendet Data aus dem Puffer Buf mit der Lange BufLen durch den Socket Sock mit den Optionen Flags Die Daten werden an die Adresse Addr gesandt die die Lange AddrLen hat Fehler Bei einem Fehler wird der Wert 1 zuriickgemeldet Siehe auch Socket Send und RecvFrom SETSOCKETOPTIONS function SetSocketOptions Sock LongInt Level LongInt OptName LongInt const OptVal optlen LongInt LongInt SetSocketOptions legt die Verbindungsoptionen fiir den Socket Sock fest Der Socket kann auf verschiedenen Levels ge ndert werden Der Parameter Level bestimmt dies und kann folgende Werte annehmen 7 SOL SOCKET Um den Socket selbst zu ndern XXX Setzen Sie Level auf die Nummer des Protokolls das die Optionen interpretieren soll Weitere Informationen ber diesen Befehl stehen in den Unix Manpages unter setsockopt Fehler werden in SocketError gespeichert wobei folgende Fehlercodes m glich sind SYS_EBADF __Der Socketdeskriptor ist ung ltig __Der Deskriptor ist kein Socket SYS_EFAULT OptVal verweist auf Speicher au erhalb des Adre raums Siehe auch GetSocketOptions SHORTHOSTTONET
137. sting 04 41 videoex ex6 pp GETVIDEODRIVER procedure GetVideoDriver var Driver TVideoDriver GetVideoDriver ergibt den aktuellen Bildschirmtreiber Record in Driver Auf diese Wei se kann einerseits der aktuelle Treiber geklont werden andererseits k nnen dann einzelne Bereiche mit SetVideoDriver tiberschrieben werden oss Kapitel 4 Referenz der RTL Online Daten GETVIDEOMODE procedure GetVideoMode var Mode TVideoMode GetVideoMode gibt die Einstellungen des aktuellen Bildschirmmodus zuriick Die Felder row und col der Record Variable Mode enthalten die Gr e des aktuellen Bildschirms und Mode Color den Wert True wenn der Bildschirm farbf hig ist Siehe auch SetVideoMode und GetVideoModeData program Example7 Beispiel f r die Funktion GetVideoMode uses Video Keyboard Vidutil var M TVideoMode S String begin InitVideo InitKeyboard GetVideoMode M if M Color then TextOut 1 1 Der aktuelle Modus unterst tzt Farbe else TextOut 1 1 Der aktuelle Modus kann keine Farben Str M Row S TextOut 1 2 Zahl der Zeilen S Str M Col S TextOut 1 3 Zahl der Spalten S TextOut 1 4 Ende mit beliebiger Taste UpdateScreen False GetKeyEvent DoneKeyboard DoneVideo end Listing 04 42 videoex ex7 pp GETVIDEOMODECOUNT function GetVideoModeCount Word GetVideoModeCount gibt die Zahl der Bildschirmmodi die der aktuelle Tr
138. t addr TInetSockAddr var SockIn Text var SockOut Text Boolean function Connect Sock LongInt const addr TInetSockAddr var SockIn File var SockOut File Boolean function Connect Sock LongInt const addr String var SockIn Text var SockOut Text Boolean function Connect Sock LongInt const addr String var SockIn File var SockOut File Boolean Connect ffnet eine Verbindung zu einem Peer dessen Adresse durch Addr beschrieben wird AddrLen enth lt die L nge der Adresse Der Typ von Addr h ngt von der Art der Verbinung ab die zu etablieren versucht wird Im allgemeinem ist der Typ jedoch TSockAddr oder TUnixSockAddr Diese regul re Connect Funktion liefert einen Datei deskriptor falls der Aufruf erfolgreich war Die anderen Varianten des Aufrufs von Connect mit den Text und File Parametern sind Kombinationen aus der normalen Funktion Connect und anschlie enden Aufrufen der Funktionen Sock2Text beziehungsweise Sock2File Diese erweiterten Funktionen liefern bei erfolgreicher Ausf hrung ein True und sonst den Wert False Fehler Bei einem Fehler der normalen Funktion wird 1 zur ckgeliefert und ein Feh lercode in SocketError gespeichert Siehe auch Listen Bind und Accept program Client Program to test Sockets unit by Michael van Canneyt and Peter Vreman Client Version First Run sock_svr to let it create a socket and then sock_cli to connect to that socket uses Sockets
139. type cint protocol cint sv pcint cint fpSocketPair erzeugt zwei Sockets in der Domain D vom Typ xType mit dem Protokoll Protocol Das Paar wird in sv zur ckgegeben die beiden Sockets unterscheiden sich nicht voneinander Die Funktion gibt bei einem Fehler den Wert 1 zur ck geht alles glatt meldet sie den Wert 0 Fehler Fehler werden in SocketError gespeichert es sind die selben Codes wie bei der Funktion Socket Siehe auch Str2UnixSockAddr GETPEERNAME function GetPeerName Sock LongInt var Addr var Addrlen LongInt LongInt GetPeerName liefert den Namen der Einheit die mit dem Socket Sock verbunden ist Damit dieser Aufruf gelingt mu der Socket verbunden sein Addr sollte auf gen gend Speicher verweisen um den Namen speichern zu k nnen Die Gr e des Speichers auf den Addr zeigt sollte von Addrlen festgelegt werden War die Funktion erfolgreich wird Addr mit dem Namen gef llt und Addrlen wird zur L nge von Addr gesetzt Fehler werden in SocketError gespeichert und k nnen die folgenden Werte annehmen amp SYS_EBADF ______ Der Socketdeskriptor ist ung ltige 2 SYS_ENOBUFS Das System hat nicht gen gend Pufferspeicher um die Operation auszuf hren _SYS_ENOTSOCK Der Deskriptor ist kein Socket SYS ENOTCONN Der Socket ist nicht verbunden Siehe auch Connect Socket und connect GETSOCKETNAME function GetSocketName Sock LongInt var Addr var Addrlen LongInt LongInt Hinweis Dies
140. tzten Maustreiber Auf diese Weise kann der aktuelle Treiber ermittelt werden damit verschiedene Callback Routinen tiberschrie ben werden k nnen Siehe auch SetMouseDriver GETMOUSEEVENT procedure GetMouseEvent var MouseEvent TMouseEvent GetMouseEvent liefert das nachsten Mausereignis eine Bewegung einen Tastendruck oder eine Tastenfreigabe oder wartet auf das Ereignis wenn sich derzeit keines in der Warteschlange befindet Einige Maustreiber stellen eine Maus Event Warteschlange zur Verfiigung in der man mehrere Events gleichzeitig zwischenspeichern kann andere machen das nicht In solchen F llen ist eine Event Warteschlange f r ein einziges Ereignis in PollMouseEvent verf gbar Siehe auch GetMouseButtons GetMouseX und GetMouseY O96 Kapitel 4 Referenz der RTL Online Daten GETMOUSEX function GetMouseX Word GetMouseX gibt die aktuelle horizonatale Position der Maus auf dem Textbildschirm an dabei wird mit dem Wert 0 an der linken Seite des Bildschirms begonnen Siehe auch GetMouseButtons GetMouseEvent und GetMouseY program Example4 Beispiel f r die Funktionen GetMouseX GetMouseY uses Mouse var X Y Word begin InitMouse WriteLn Maus in das Quadrat 10 10 bewegen um zu beenden repeat X GetMouseX Y GetMouseyY WriteLn X Y X 7 Y 7 7 until X 9 and Y 9 DoneMouse end Listing 04 47 mouseex ex4 pp GETMOUSEY function GetMouseY Word GetM
141. uf eine andere Maschine eingeloggt ist 0100 Kapitel 4 Referenz der RTL Online Daten Shift F1 und Shift F12 erzeugen die Tastaturcodes f r F11 und F12 Shift Pfeiltasten Shift Einfg Shift Entf Shift Pos1 und Shift Ende funktionieren nicht Dies trifft auch f r die Kombinationen mit Alt und Strg zu Alt in Kombination mit den Funktionstasten schaltet zwischen den Konsolen um liefert nicht die richtigen Tastatursequenzen Strg in Verbindung mit den Funktionstasten liefert die Steuercodes f r die Funkti onstasten ohne Strg In Xterm Shift Einfg f gt die Daten des X Clipboards ein es wird kein Tastaturcode er zeugt Auf der KDE Konsole Shift Einfg f gt die Daten aus dem X Clipboard ein es wird kein Tastaturcode generiert Shift in Verbindung mit den Pfeiltasten funktioniert ebensowenig wie die Pfeilta sten in Verbindung mit der Strg Taste Ist eine Nicht Standardtastatur angeschlossen kann es sein da auch einige andere Tasten nicht funktionieren Befindet man sich im Modus mit der eingeschr nkten Funktionalit t kann aber mit dem blichen Workaround um die Funktionstasten und deren ESC Pr fix herumgearbeitet werden Esc 1 F1 Esc 2 F2 und so weiter Esc vor der Eingabe einer anderen Taste ist gleichwertig mit der Alt Taste In solchen F llen und wenn das Terminal eine Ausgabe der ESC Sequenzen f r diese Tasten zur Verf gung
142. uf einen der folgenden Werte gesetzt SYS_EBADF________ Der Socketdeskriptor ist ung ltig SYS ENOTSOCK _ Der Deskriptor ist kein Socket _ Der Socket Typ unterst tzt keine Listen Operation SYS _EFAULT Addr zeigt auf einen Bereich au erhalb des Adre raums SYS EWOULDBLOCK Die angefragte Operation w rde den Proze blockieren Siehe auch Listen Connect und Bind Kapitel 4 18 Unit Sockets Bind 043 program server program to test Sockets unit by Micha l van Canneyt and Peter Vreman Server Version First Run sock_svr to let it create a socket and then sock_cli to connect to that socket uses Sockets var FromName String Buffer String 255 S LongInt Sin Sout Text SAddr TInetSockAddr procedure perror const S String begin WriteLn S SocketError Halt 100 end begin S Socket AF_INET SOCK_STREAM 0 if SocketError lt gt 0 then perror Server Socket SAddr Sin_family AF_INET port 50000 in network order SAddr Sin _port htons 50000 SAddr Sin_addr s_addr 0 if not Bind S SAddr SizeOf saddr then PError Server Bind if not Listen S 1 then PError Server Listen WriteLn Waiting for Connect from Client run now sock_cli in another tty if not Accept S FromName Sin Sout then PError Server Accept fromname Reset Sin ReWrite Sout WriteLn Sout Message From Server Fl
143. unction Accept Sock LongInt var Addr var Addrlen LongInt LongInt function Accept Sock LongInt var addr TInetSockAddr var SockIn File var SockOut File Boolean function Accept Sock LongInt var addr TInetSockAddr var SockIn Text var SockOut Text Boolean function Accept Sock LongInt var addr String var SockIn Text var SockOut Text Boolean function Accept Sock LongInt var addr String var SockIn File var SockOut File Boolean Accept nimmt die Verbindung von einem Socket Sock an der auf eine Verbindung war tet Falls eine Verbindung akzeptiert wird wird ein Dateideskriptor zur ckgeliefert bei einem Fehler 1 Uber den zuriickgegebenen Socket diirfen keine weiteren Verbindun gen angenommen werden Der bergebene Socket bleibt ge ffnet Der Accept Befehl speichert die Adresse des verbindenden Puffers entity in Addr und seine L nge in Addrlen Vor dem Aufruf sollte Addr auf gen gend Speicher verweisen und Addrlen sollte die Gr e dieses Speichers vor dem Aufruf enthalten Die anderen Varianten des Aufrufs von Accept mit den Text und File Parametern sind Kombinationen aus der normalen Funktion Accept und anschlie enden Aufrufen der Funktionen Sock2Text beziehungsweise Sock2File Diese erweiterten Funktionen liefern bei erfolgreicher Ausf hrung ein True und sonst den Wert False Fehler Bei einem Fehler wird von der einfachen Variante der Funktion der Wert 1 zur ckgeliefert und SocketError a
144. ung PollKeyEvent Wird von PollKeyEvent aufgerufen und mu die n chste Taste wenn u nen an ein Event anliegt zur ckgeben Darf die Tasten nicht speichern GetShiftState Wird von PollShiftStateEvent aufgerufen und mu den aktuellen Sta ee ae tus der Strg Alt und Shift Taste Shiftstate zur ckgeben TranslateKeyEvent bersetzt einen rohen Tastaturevent in ein richtiges Tastaturereignis das hei t mu den Shiftstate eintragen und die Funktionstasten Scancodes in Funktionstasten Steuercodes umwandeln Ist TranslateKeyEvent nicht eingetragen wird eine voreingestellte bersetzungsfunktion aufgerufen die die die bekannten Scancodes nn us aus Tabelle O4 7 in richtige Tastaturevents umsetzt ll TranslateKeyEvent bersetzt ein Tastaturereignis in ein Unicode Gegenst ck UniCode Tabelle 04 6 Die Hooks im Record TKeyBoardDriver Teil 2 von 2 Genaugenommen m ssen nur die Hooks GetKeyEvent und PollKeyEvent implementiert werden damit der Treiber richtig funktioniert Folgende Beispiel Unit logkeys zeigt wie ein Tastaturtreiber installiert wird wobei der installierte Treiber herangezogen wird und Hooks in die Funktion GetKeyEvent einge h ngt werden um die Tastaturevents zu registrieren und in einer Datei mitzuprotokol lieren unit logkeys interface procedure StartKeylogging procedure StopKeyLogging function IskKeylogging Boolean procedure SetKeyLogFileName FileName String implementation uses SysUtils Ke
145. urereignis in KeyEvent in die lesbare Beschreibung der gedriickten Taste dazu werden die Konstanten im Konstantenabschnitt ausgegeben Fehler Wird eine unbekannte Taste gedr ckt wird der Scancode mit vorangestelltem Konstantenstring SScanCode zur ckgegeben Siehe auch FunctionKeyName ShiftStateToString Ein Beispiel ist bei den meisten anderen Funktionen abgebildet KEYPRESSED function KeyPressed Boolean KeyPressed pr ft die Tastatur Eventqueue darauf ob ein Tastenevent anliegt und ergibt True falls das der Fall ist Die Funktion ruft dazu nur PollKeyEvent auf und pr ft auf ein g ltiges Ergebnis Kapitel 4 22 Unit Keyboard PollKeyEvent 0113 Siehe auch PollKeyEvent GetKeyEvent POLLKEYEVENT function PollKeyEvent TKeyEvent PollKeyEvent priift ob ein Tastaturereignis anliegt und gibt es zuriick wenn eines gefunden wird Liegt kein Ereignis an gibt die Funktion den Wert 0 zuriick Es mu beachtet werden da die Funktion den Tastendruck nicht aus der Liste nimmt er steht also in der Eventliste immer noch f r die Funktion GetKeyEvent zur Verf gung Siehe auch PutKeyEvent GetKeyEvent program example4 Beispiel f r die Funktion PollKeyEvent uses keyboard var K TKeyEvent begin InitKeyBoard WriteLn Drticken Sie eine Taste repeat K PollKeyEvent if k lt gt 0 then begin GetKeyEvent TranslateKeyEvent K q beendet das Programm riteLn riteLn Taste e
146. ush Sout while not EoF Sin do begin ReadLn Sin Buffer riteLn Server Read buffer end end Listing 04 32 sockex socksvr pp BIND function Bind Sock LongInt const Addr AddrLen LongInt Boolean function Bind Sock LongInt const addr String Boolean Bind verbindet den Socket Sock mit der Adresse Addr die die Lange Addrlen hat Die Funktion liefert True falls sie erfolgreich war ansonsten False Die Variante des Bind Befehls mit der TUnixSockAddr ist gleichwertig zum nacheinander folgenden Aufruf von Str2UnixSockAddr und der normalen Bind Function Die Funktion meldet True wenn sie erfolgreich ausgef hrt wurde beim Auftreten eines Fehlers False Fehler werden in SocketError gespeichert Es sind folgende Fehlercodes vorgesehen 044 Kapitel 4 Referenz der RTL Online Daten _SYS_EBADF Der Socketdeskriptor ist ung ltig SYS _EACCESS Die Adresse ist gesch tzt das Progamm besitzt nicht die Berechti gung sie zu ffnen Weitere m gliche Fehler k nnen in den Unix Manpages nachgelesen werden Siehe auch Socket CLOSESOCKET function CloseSocket Sock LongInt LongInt CloseSocket schlie t ein Socket Handle Die Funktion liefert 0 zur ck wenn der Socket erfolgreich geschlossen wurde Fehler Bei einem Fehler wird der Wert 1 zur ckgegeben Siehe auch Socket CONNECT function Connect Sock LongInt const Addr Addrlen LongInt Boolean function Connect Sock LongInt cons
147. uterwissen f r Praktiker C L Comouuter ji der 304 5 f Fabian Thorns Hrsg Das Virtualisierungs Buch Konzepte Techniken und L sungen Die aktualisierte und deutlich erweiterte 2 Auflage des Bestsellers zu VMware Xen Parallels Microsoft Qemu VirtualBox VServer und weiteren L sungen f r Windows Unix Linux und Mac Anwendungs bergreifend aufgebaut f r die optimale Kombination von Produkten f r jeden Einsatzbereich 799 Seiten Softcover 2007 EUR 49 90 D ISBN 978 3936546 56 9 Probekapitel und Inhaltsverzeichnis und die M glichkeit zur Direktbestellung aller verf gbaren B cher finden Sie auf www cul de er on en ay E COUPON nicht vorr tig ist kann sie es Ihnen innerhalb von 24 Stunden besorgen ermit bestelle ich folgende B cher des C amp L Computer und Literaturverlags Das Virtualisierungs Buch Konzepte Techniken und L sungen ISBN 978 3936546 56 9 Dazu pa t Wikis und Blogs Planen Einrichten Verwalten ISBN 978 3936546 44 4 Name StraBe Ort egen Sie diesen Coupon Ihrer Buchhandlung vor Falls das gew nschte Buch gerade x NE Computer amp Literatur L Fabian Thoms Hrsg Das Virtualisierungs Buch Konzepte Techniken und L sungen 2 aktualisierte und erweiterte Auflage Bez w Be VMware Ms Parallel Ken une Deutsche Originalausgabe Virtualisierungs Buch Das Unser Gesamtprogramm finden Sie unter
148. var S String begin S StrPas P Writeln S S end Listing 04 28 stringex ex3 pp STRPCoPY function StrPCopy d PChar const s String PChar Konvertiert den Pascal String in s in einen nullterminierten String und kopiert ihn nach d d mu gro genug sein um den String aufnehmen zu k nnen das hei t eine Gr e von Length s 1 besitzen Fehler Es wird keine L ngenpr fung durchgef hrt Siehe auch StrPas und SysUtils StrPCopy program Example2 Beispiel f r die Funktion StrPCopy uses Strings const S das ist ein normaler String var P PChar begin P StrAlloc Length S 1 if StrPCopy P S lt gt P then WriteLn Das ist unm glich else WriteLn P StrDispose P end Listing 04 29 stringex exe pp Kapitel 4 17 Unit Strings StrPos 031 STRPos function StrPos Strl PChar Str2 PChar PChar Gibt einen Zeiger auf das erste Vorkommen von Str2 in Str1 zur ck Enth lt Str1 den gesuchten Teilstring nicht wird NIL zur ckgegeben Siehe auch StrScan StrRScan und SysUtils StrPos program Examplel5 Beispiel f r die Funktion StrPos uses Strings oder SysUtils const P PChar Das ist ein PChar String S PChar ist begin WriteLn Position von ist in P Sizelnt StrPos P S Sizelnt P end Listing 04 30 stringex ex15 pp STRRSCAN function StrRScan p PChar c Char PChar Gibt
149. var NewVideoDriver OldVideoDriver TVideoDriver Active Logging Boolean LogFileName String VideoLog Text function TimeStamp String begin TimeStamp FormatDateTime hh nn ss Time end procedure StartVideoLogging begin Logging true WriteLn VideoLog Start logging video operations at TimeStamp end procedure StopVideoLogging begin WriteLn VideoLog Stop logging video operations at TimeStamp Logging false end function IsVideoLogging Boolean begin IsVideoLogging Logging end var ColUpd RowUpd array L0 1024 of Integer procedure DumpScreenStatistics Force Boolean var I Count Integer Kapitel 4 20 Unit Video Allgemeines 079 begin if Force then Write Videolog forced WriteLn VideoLog video update at TimeStamp gt FillChar Colupd SizeOf ColUpd 0 FillChar Rowupd SizeOf RowUpd 0 Count 0 for I 0 to VideoBufSize div SizeOf TVideoCell do begin if VideoBuf Li lt gt OldVideoBuf i then begin Inc Count Inc ColUpd I mod ScreenWidth Inc RowUpd I div ScreenHeight v end end Write VideoLog Count videocells differed divided over Count 0 for I 0 to ScreenWidth 1 do if ColUpd I lt gt 0 then Inc Count Write VideoLog Count gt columns and Count 0 for I 0 to ScreenHeight 1 do if RowUpd I lt gt 0 then Inc Count W
150. ver record InitDriver procedure DoneDriver procedure GetKeyEvent function TKeyEvent PollKeyEvent function TKeyEvent GetShiftState function Byte TranslateKeyEvent function KeyEvent TKeyEvent TKeyEvent TranslateKeyEventUniCode function KeyEvent TKeyEvent TKeyEvent end Mit dem Record TKeyboardDriver siehe auch Seite 0100 kann ein eigener Tastatur treiber mit der Funktion SetKeyboardDriver siehe Seite 0115 installiert werden Die verschiedenen Felder des Records korrespondieren mit den unterschiedlichen Funktio nen des Interfaces der Unit Keyboard Weitere Informationen dazu k nnen auf Seite 0100 nachgelesen werden TKeyEvent Cardinal Der Datentyp TKeyEvent ist der Grundtyp f r alle Tastaturevents Der Tastenanschlag wird in die 4 Byte des Typs TKeyEvent kodiert Die verschiedenen Felder des Tastendrucks k nnen mit einem Typecast des TKeyEvents auf den Typ TKeyRecord ermittelt werden TKeyRecord packed record KeyCode Word ShiftState Byte Flags Byte end 0108 Kapitel 4 Referenz der RTL Online Daten Der TKeyRecord ist die Umsetzung des TKeyEvents Die Bedeutung der einzelnen Felder ist in Tabelle 04 9 erl utert Feld Bedeutung KeyCode Abh ngig von den Flags entweder die physikalische Darstellung einer Taste unter DOS der Scancode ein Paar von ASCII Codes oder das bersetzte ASCII Unicode Zeichen ShiffState Der Shiftstate zum Zeitpunkt als die Taste gedr ckt wurde
151. von Free Pascal Konstante Wert Beschreibung _IPV6_ADDRFORM 1 Siehe http linux die net man 7 ipv6 Siehe http linux die net man 7 ipv6 Siehe http linux die net man 7 ipv6 Undokumentierte Getsockopt Option Siehe http linux die net man 7 ipv6 _IPV6_DSTOPTS 4 Siehe http linux die net man 7 ipv6 Siehe http linux die net man 7 ipv6 E Undokumentierte Getsockopt Option _IPV6_IPSEC_POLICY 34 Undokumentierte Getsockopt Option Undokumentierte Getsockopt Option E Undokumentierte Getsockopt Option _IPV6_ LEAVE ANYCAST 28 Undokumentierte Getsockopt Option Undokumentierte Getsockopt Option K Siehe http linux die net man 7 ipv6 _IPV6_MTU_ DISCOVER 23 Siehe http linux die net man 7 ipv6 Siehe http linux die net man 7 ipv6 A Siehe http linux die net man 7 ipv6 _IPV6_ MULTICAST LOOP 19 Siehe http linux die net man 7 ipv6 Undokumentierte Getsockopt Option 3 Siehe http linux die net man 7 ipv6 _IPV6_PKTOPTIONS 6 Undokumentierte Getsockopt Option Immer DF a Nie DF Frames senden _IPV6_PMTUDISC_WANT Use per route hints Siehe http linux die net man 7 ipv6 Siehe http linux die net man 7 ipv6 Siehe http linux die net man 7 ipv6 Hop mu kein Nachbar sein Hop mu ein Nachbar sein IPv6 Routing Header Typ 0 Undokumentierte Getsockopt Option Undokumentierte Getsockopt Option Undokumentierte Getsockopt Option Siehe http linux die net man 7 ipv6 3 Undokumentierte Getsockopt Option IPV6_XFRM_ POLICY 35 Undokumenti
152. yboard var NewKeyBoardDriver OldKeyBoardDriver TKeyboardDriver Active Logging Boolean LogFileName String KeyLog Text function TimeStamp String begin TimeStamp FormatDateTime hh nn ss Time end procedure StartKeylogging begin Logging True Writeln KeyLog Start logging keystrokes at TimeStamp end procedure StopKeyLogging begin Writeln KeyLog Stop logging keystrokes at TimeStamp Logging False end 0102 Kapitel 4 Referenz der RTL Online Daten function IskeyLogging Boolean begin IsKeyLogging Logging end function LogGetKeyEvent TKeyEvent var K TKeyEvent begin K OldkeyboardDriver GetKeyEvent if Logging then begin Write KeyLog TimeStamp Key event Writeln KeyLog KeyEventToString TranslateKeyEvent K end LogGetKeyEvent K end procedure LogInitKeyBoard begin OldKeyBoardDriver InitDriver Assign KeyLog logFileName Rewrite Keylog Active True StartKeylogging end procedure LogDoneKeyBoard begin Stopkeylogging Close Keylog Active False OldKeyBoardDriver DoneDriver end procedure SetKeyLogFileName FileName String begin if not Active then LogFileName FileName end initialization GetKeyBoardDriver OldKeyBoardDriver NewKeyBoardDriver OldKeyBoardDriver NewKeyBoardDriver GetKeyEvent LogGetKeyEvent NewKeyBoardDriver InitDriver LogInitKeybo
Download Pdf Manuals
Related Search
Related Contents
pdf Gestion de un parque de instrumentos season ticket online account user manual toshiba QardioBase 2015 User Manual Christian Ferdinand Oechsle 540(GS) Copyright © All rights reserved.
Failed to retrieve file