home *** CD-ROM | disk | FTP | other *** search
/ Best of German Only 2 / romside_best_of_german_only_2.iso / dos / utility / bs_pasca / handbuch.txt < prev    next >
Text File  |  1993-12-01  |  68KB  |  1,323 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.                     ****************************************************
  8.                     * BS-Pascal-Toolbox 2.51 * BS-Pascal-Toolbox 2.51+ *
  9.                     ****************************************************
  10.  
  11.                             Die universelle Turbo-Pascal-Toolbox
  12.  
  13.  
  14.  
  15.  
  16.  
  17.                                        - Handbuch -
  18.  
  19.  
  20.  
  21.  
  22.  
  23.       (C) 1992,93 by Boris Sachsenberg, Von-Elm-Weg 8g, D-27476 Cuxhaven
  24.       Inhaltsverzeichnis:
  25.  
  26.       1.  Vertriebskonzept
  27.       1.1 So lassen Sie sich registrieren
  28.       1.2 Lizenzbestimmungen
  29.       1.3 WICHIGE HINWEISE !
  30.  
  31.       2.  Allgemeines zum Programm
  32.       2.1 Was ist neu gegenüber Version 2.01 ?
  33.       2.2 Die Hilfedateien
  34.  
  35.       3.  Übersicht aller Routinen und Units
  36.       3.1     Die Unit Check
  37.       3.1.1   function  Ucase
  38.       3.1.2   function  Lcase
  39.       3.1.3   function  Center
  40.       3.1.4   function  Right
  41.       3.1.5   function  Left
  42.       3.1.6   function  DelAllChars
  43.       3.1.7   function  DelLastChars
  44.       3.1.8   function  DelFrontChars
  45.       3.1.9   function  StrToReal
  46.       3.1.10  function  StrToInt
  47.       3.1.11  function  DateToStr
  48.       3.1.12  function  TimeToStr
  49.       3.1.13  function  Date
  50.       3.1.14  function  Time
  51.       3.1.15  function  Using
  52.       3.1.16  function  Sim
  53.  
  54.       3.2     Die Unit Disk
  55.       3.2.1   function  DirExist
  56.       3.2.2   function  DiskLabel
  57.       3.2.3   function  FileExist
  58.       3.2.3   function  FileNew
  59.       3.2.5   function  FreeSpace
  60.       3.2.6   function  ActPath
  61.       3.2.7   function  PathToPrg
  62.       3.2.8   function  CopyFile
  63.       3.2.9   function  RenameFile
  64.       3.2.10  function  DeleteFile
  65.       3.2.11  function  Recurs
  66.       3.2.12  function  wildcard
  67.  
  68.       3.3     Die Unit Dosx
  69.       3.3.1   function  shell
  70.       3.3.2   function  shellwin
  71.       3.3.3   procedure boot
  72.  
  73.       3.4     Die Unit Types
  74.       3.4.1   Die Typendeklarationen
  75.       3.4.2   procedure nothing
  76.  
  77.       3.5     Die Unit Keyboard
  78.       3.5.1   Die Tastenkonstanten
  79.       3.5.2   procedure SetRate
  80.       3.5.3   function  GetSKey
  81.       3.5.4   function  GetKey
  82.       3.5.5   procedure EdLine
  83.       3.5.6   procedure PutKey
  84.  
  85.       3.6     Die Unit Mouse
  86.       3.6.1   const     NoMouse
  87.       3.6.2   const     MouseText
  88.       3.6.3   procedure MouseInit
  89.       3.6.4   procedure MouseGet
  90.       3.6.5   procedure MouseOn
  91.       3.6.6   procedure MouseOff
  92.       3.6.7   procedure MouseArea
  93.       3.6.8   procedure MousePut
  94.       3.6.9   procedure ButtonPressed
  95.       3.6.10  procedure ButtonReleased
  96.       3.6.11  procedure MouseMove
  97.       3.6.12  procedure MouseSpeed
  98.  
  99.       3.7     Die Unit Print
  100.       3.7.1   function  PrinterReady
  101.       3.7.2   procedure PrinterReset
  102.       3.7.3   procedure FormFeed
  103.  
  104.       3.8     Die Unit Screen
  105.       3.8.1   procedure ColorMode
  106.       3.8.2   function  Color
  107.       3.8.3   function  inv
  108.       3.8.4   function  invh
  109.       3.8.5   procedure SetCursor
  110.       3.8.6   procedure GetCursor
  111.       3.8.6   procedure HiddenCursor
  112.       3.8.8   procedure NormCursor
  113.       3.8.9   procedure BlockCursor
  114.       3.8.10  procedure DefaultCursor
  115.       3.8.11  procedure Logo
  116.  
  117.       3.9     Die Unit Timer
  118.       3.9.1   procedure timeron
  119.       3.9.2   procedure timeroff
  120.  
  121.       3.10    Die Unit Windows
  122.       3.10.1  Die Fenstervariable
  123.       3.10.2  Die Grafikkartenvariablen
  124.       3.10.3  Die Relativen Koordinaten
  125.       3.10.4  function  Openwindow
  126.       3.10.5  function  Activatewindow
  127.       3.10.6  function  GetChar
  128.       3.10.7  function  Getattr
  129.       3.10.8  procedure Putattr
  130.       3.10.9  procedure PutChar
  131.       3.10.10 procedure GetScr
  132.       3.10.11 procedure PutScr
  133.       3.10.12 function  Areasize
  134.       3.10.13 procedure Closewindow
  135.       3.10.14 procedure Wwrite
  136.       3.10.15 procedure Wwritec
  137.       3.10.16 procedure changecolors
  138.       3.10.17 procedure changecolorsc
  139.       3.10.18 procedure scroll
  140.       3.10.19 function  poswindow
  141.       3.10.20 function  resizewindow
  142.       3.10.21 function  changeborder
  143.       3.10.22 procedure winclrscr
  144.       3.10.23 procedure DrawFrame
  145.  
  146.       3.11    Die Unit Menu (Nur BS-Pascal-Toolbox 2.5+)
  147.       3.11.1  Die Farbvariablen
  148.       3.11.2  Die Ereignisvariablen
  149.       3.11.3  var standstat
  150.       3.11.4  const tastproc
  151.       3.11.5  procedure addmenu
  152.       3.11.6  procedure addsubmenu
  153.       3.11.7  procedure addsubmenuline
  154.       3.11.8  procedure delmenu
  155.       3.11.9  procedure addlist
  156.       3.11.10 procedure dellist
  157.       3.11.11 procedure addpopmenu
  158.       3.11.12 procedure delpopmenu
  159.       3.11.13 procedure writestat
  160.       3.11.14 procedure runprogram
  161.       3.11.15 procedure waitevent
  162.       3.11.16 procedure popup
  163.       3.11.17 procedure closepopup
  164.       3.11.18 procedure addlst
  165.       3.11.19 procedure addtext
  166.       3.11.20 procedure addbutton
  167.       3.11.21 procedure addokbutton
  168.       3.11.22 procedure addcancelbutton
  169.       3.11.23 procedure addinput
  170.       3.11.24 procedure deldialog
  171.       3.11.23 function  dialog
  172.       3.11.25 procedure actualize
  173.       3.11.26 procedure initscreen
  174.  
  175.       3.12    Die Unit Bsdialog (Nur BS-Pascal-Toolbox 2.5+)
  176.       3.12.1  Das Programm MakeHelp
  177.       3.12.2  Die Hilfsvariablen
  178.       3.12.3  Die Farbvariablen
  179.       3.12.4  function  Filebox
  180.       3.12.5  procedure msgbox
  181.       3.12.6  function  yesno
  182.       3.12.7  procedure errorbox
  183.       3.12.8  procedure inputbox
  184.       3.12.9  procedure help
  185.  
  186.       4.  Anhang
  187.       4.1 ASCII-Zeichencodes
  188.       4.2 ASCII-Linienzeichen
  189.  
  190.  
  191.       1. Vertriebskonzept
  192.  
  193.       Dieses Programm wird nach dem Sharewarekonzept vertrieben.
  194.       D.h. Sie als Anwender sind aufgefordert, das vorliegende Programm
  195.       in Ruhe zu testen und auszuprobieren.
  196.       Gefällt Ihnen das Programm, so müssen Sie vom Programmautor eine
  197.       Vollversion erwerben und sich registrieren lassen. Das bietet folgende
  198.       Vorteile:
  199.       -Die Vollversion enthält keine Shareware-Hinweise
  200.       -Sie erhalten ein gedrucktes Handbuch
  201.       -Sie bekommen zukünftige Updates billiger
  202.       -Sie haben Anspruch auf einen Support, der bei Problemen hilft
  203.       -Sie erfüllen den Sinn der Shareware (Nur wenn sich alle Benutzer von
  204.        Sharewareprogrammen registrieren lassen, kann sich dieses Konzept durch-
  205.        setzen und Sie bekommen weiterhin sehr günstig hochwertige Software, die
  206.        vorher ausgiebig getestet werden kann.
  207.       Das Programm in der Sharewareversion darf und soll sogar
  208.       in unveränderter Form kopiert und an andere weitergegeben werden.
  209.       Bitte beachten Sie hierzu auch 1.2 Lizenzbestimmungen.
  210.  
  211.       1.1 So lassen Sie sich registrieren
  212.  
  213.       Nach dem Starten des Programmes erscheint ein Hinweisschirm. Mit W
  214.       starten Sie das eigentliche Programm und mit B wird ein Bestell-
  215.       formular ausgedruckt, welches Sie dann ausgefüllt an mich schicken
  216.       müssen. Alternativ kann auch die Datei BESTELL.TXT von der
  217.       DOS-Ebene mit COPY BESTELL.TXT ausgedruckt werden. Wenn Sie keinen
  218.       Drucker besitzen, dann lesen Sie bitte die Bestellscheine am
  219.       Bildschirm(LIST BESTELL.TXT) und schreiben eine entsprechende
  220.       Bestellung mit den dort angegebenen Preisen für Porto/Verpackung und
  221.       Disketten. Auch Bestellungen über BTX und Telefon sind möglich (siehe
  222.       Bestellschein). Beschreibungen zu den Produkten auf den Bestellscheinen
  223.       finden Sie in der Datei PRODUKTE.TXT, die ebenfalls ausgedruckt werden
  224.       kann.
  225.  
  226.       1.2 Lizenzbestimmungen
  227.  
  228.       1. Mit dem Benutzen der Software wird der Vertrag anerkannt.
  229.       2. Der Vertrag ist zeitlich nicht begrenzt.
  230.       3. Ich übernehme für das Programm keine Garantien irgendwelcher Art.
  231.       4. Für Schäden, die durch das Programm entstehen haftet ausschließlich der
  232.          Lizenznehmer (Sie).
  233.       5. Es ist nicht gestattet Kopien der Vollversion anzufertigen und an
  234.          andere weiterzugeben! (Die Sharewareversion darf und soll sogar kopiert
  235.          und weitergegeben werden
  236.       6. Die Vollversion darf zur Zeit nur auf einem einzelnen Rechner
  237.          installiert und genutzt werden.
  238.       7. Es ist gestattet eine Sicherheitskopie zur eigenen Sicherheit
  239.          anzulegen, die aber nicht an dritte Personen weitergegeben werden darf.
  240.       8. Das Verändern bzw. Übersetzen des Programmcodes oder des Handbuches ist
  241.          nur mit vorheriger ausdrücklicher schriftlicher Genehmigung von mir
  242.          gestattet.
  243.       9. Die Runtime-Version (bei Menü-Fix & Quiz-Fix) darf NUR vom Lizenznehmer
  244.          beliebig kopiert und an Dritte weitergegeben werden. Die Runtime-
  245.          Version ist KEINE Freeware, sondern eine Lizenzversion.
  246.       10.Alle angegeben Preise sind keine Garantiepreise und dürfen jederzeit
  247.          von mir geändert werden.
  248.       11.Im Falle einer Preisänderung und einer Bestellung steht es mir frei,
  249.          Ihnen das Produkt zum alten Preis zu verkaufen, oder Sie zu informieren
  250.          und gegebenenfalls das Geld für schon bezahlte Ware zurückzuerstatten.
  251.       12.Besitzer der Vollversion haben Anspruch auf Support, der Ihnen bei
  252.          Problemen mit dieser Vollversion behilflich ist. Der Support erfolgt
  253.          entweder telefonisch oder schriftlich, wenn vom Lizenznehmer
  254.          ausreichend Rückporto beigelegt wurde.
  255.       13.Wenn ein Vollversionsbesitzer einen Fehler, der den Programmablauf
  256.          wesentlich beeinträchtigt, feststellt, bin ich verpflichtet, ihm
  257.          entweder kostenlos eine berichtigte Version zur Verfügung zu stellen,
  258.          oder ihm den Kaufpreis zurückzuerstatten.
  259.       14.Jeder Besitzer einer Vollversion, der mir eine Formatierte Diskette in
  260.          einem ausreichend frankierten Rückumschlag mit seiner Adresse schickt,
  261.          bekommt die nach der letzten Stelle der jeweiligen Versionsnummer
  262.          neuste Version zugestellt.
  263.  
  264.       1.3 WICHIGE HINWEISE !
  265.  
  266.       1.Aktuelle Hinweise finden sie in der Datei LIESMICH.TXT.
  267.       2.Bestellbedingungen, Kosten für Porto/Verpackung und Zahlungs-
  268.         möglichkeiten entnehmen Sie bitte dem Bestellschein (Datei BESTELL.TXT).
  269.         Sie kann direkt vom Sharewarehinweis aus gedruckt werden). In der
  270.         Vollversion liegt der Bestellschein bei.
  271.       3.Die Beschreibungen zu den anderen Programmen bzw. Produkten, die mit
  272.         dem Bestellschein bestellt werden können, finden Sie in der Datei
  273.         PRODUKTE.TXT.
  274.       4.Sollte bei Ihnen das Programm nicht funktionieren, haben Sie einen
  275.         Fehler im Programm oder im Handbuch entdeckt, vermissen Sie irgendeine
  276.         Funktion oder haben Sie Verbesserungsvorschläge für eine neue Version,
  277.         dann sollten Sie sich mit mir in Verbindung setzten (Adresse siehe
  278.         Titelseite oder Bestellschein)
  279.       5.Wenn Sie die telefonische Hotline in Anspruch nehmen wolle, legen Sie
  280.         bitte folgendes bereit:
  281.         -Ihre Registriernummer (steht auf der Rechnung der Vollversion)
  282.         -Ihre AUTOEXEC.BAT und CONFIG.SYS Datei
  283.         -Ihre Rechnerkonfiguration (Grafikkarte, Festplatte ?)
  284.       6.Dieses Programm entspricht den D.S.-Richtlinien. Die Sharewareversion
  285.         dieses Programmes kann bei allen D.S.-Händlern bezogen werden.
  286.         Mehr Infos zur D.S.: siehe Datei DSINFO.TXT.
  287.  
  288.  
  289.       2.  Allgemeines zum Programm
  290.  
  291.       Die Pascal-Toolbox wurde zuerst ausschließlich zur eigenen Benutzung
  292.       erstellt. Manche Routinen haben Ihren Ursprung in PD-Programmen oder auch
  293.       in Listings, die in Zeitschriften veröffentlicht wurden. Manche wurden
  294.       auch von Grund auf von mir entwickelt. Alle Routinen wurden jedenfalls von
  295.       mir total überarbeitet und zusammengestellt. Das DOS-Window, daß ich in
  296.       der Unit Dosx aufgenommen habe, ist ein PD-Programm und stammt
  297.       ursprünglich von M. Austermeier. Die BS-Pascal-Toolbox 2.5+ beinhaltet
  298.       alle Routinen der BS-Pascal-Toolbox 2.5 und zusätzlich noch die Units
  299.       Windows, Menu und Bsdialog, mit deren Hilfe man eine komplette
  300.       Fensterverwaltung, Routinen die in direkt in den Bildschirmspeicher
  301.       schreiben und eine Toolbox zur Erzeugung SAA ähnlicher Oberflächen erhält.
  302.       Preise siehe Datei PRODUKTE.TXT.
  303.  
  304.       2.1 Was ist neu gegenüber Version 2.01 ?
  305.        -Abgespeckte Version der Unit Windows auch in der normalen Version
  306.        -Unit Timer: Mit dieser Unit ist eine Programmierung von Prozeduren im
  307.         Hintergrund möglich. Als Beispielprogramm wird eine Uhr mit Bildschirm-
  308.         schoner geliefert.
  309.        -Die Unit Global entfällt.
  310.        -Unit Types: In dieser Unit sind alle Stringlängen von 1 bis 255 als
  311.         Konstanten gespeichert.
  312.        -Prozeduren delallchars und dellastchars ersetzen die Prozeduren
  313.         dellastspaces und delallspaces.
  314.        -procedure delfrontchars. (Wie dellastchars, nur daß voranstehende
  315.         Zeichen gelöscht werden.
  316.        -function date jetzt auch optional mit Wochentag
  317.        -function direxist: Überprüft, ob ein Verzeichnis existiert
  318.        -function wildcard: Ersetzt Jokerzeichen in Dateinamen
  319.        -procedure edline jetzt umfangreicher und komfortabler
  320.        -Leichtere Tastaturabfragen programmierbar, durch Tastenkonstanten
  321.        -Komplett neu programmierte Fensterverwaltung:
  322.         +Um ein vielfaches schneller, als die alte
  323.         +Alle Bugs z.B. bei der Schattenberechnung wurden entfernt
  324.         +Neue Scrollprozeduren
  325.        -Komfortable Dateiauswahlbox in der +-Version
  326.        -Listfelder in Dialogboxen möglich
  327.        -Hilfetexte können jetzt durch Scrolling beliebig lang sein
  328.        -Unit BSDIALOG liegt jetzt immer im Quelltext vor.
  329.        -Neu 2.51: Online-Hilfe (Hilfedateien für THelp bzw. die integrierte
  330.         Hilfe von Turbo-Pascal
  331.        u.v.a.m.
  332.  
  333.       2.2 Die Hilfedateien
  334.  
  335.       1.Benutzen der Hilfe mit THelp von Turbo-Pascal 6.0:
  336.        -Kopieren der Datei BSP.HLP in das Verzeichnis, in welchem sich
  337.         THELP.COM befindet.
  338.        -Aufrufen von THelp mit THELP/FBSP.HLP.
  339.        -Durch Druck auf die 5 im Nummernblock wird die Hilfe aufgerufen. Einen
  340.         Überblick über alle Themen erhält man durch Druck auf SHIFT-F1.
  341.  
  342.       2.Ersetzen der alten internen Hilfe von Turbo-Pascal 6.0:
  343.        -Ersetzen der Datei TURBO.HLP (Im Turbo-Pascal-Verzeichnis) durch
  344.         BSP.HLP (Auf der Toolbox-Diskette)
  345.        -Die neue Hilfe kann genauso benutzt werden, wie gewohnt, nur daß jetzt
  346.         statt der Standard-Turbo-Pascal-Befehle jetzt alle Befehle der Toolbox
  347.         in der Hilfe zu finden sind.
  348.  
  349.       3.Benutzen der Hilfe mit THelp von Borland/Turbo-Pascal 7.0:
  350.        -Kopieren der Datei BSP.TPH in das Verzeichnis, in welchem sich
  351.         THELP.EXE befindet.
  352.        -Aufrufen von THelp mit THELP/FBSP.TPH.
  353.        -Durch Druck auf die 5 im Nummernblock wird die Hilfe aufgerufen. Einen
  354.         Überblick über alle Themen erhält man durch Druck auf SHIFT-F1.
  355.  
  356.       4.Erweitern der internen Hilfe von Borland/Turbo-Pascal 7.0 (empfohlen)
  357.        -Kopieren der Datei BSP.TPH in das Verzeichnis, in welchem sich
  358.         TURBO.TPH befindet.
  359.        -Anwählen des Menüpunktes Hilfe-Dateien installieren in TP7.
  360.        -Button Neu anwählen und die Datei BSP.TPH wählen.
  361.        -Die interne Hilfe kann jetzt wie gewohnt weiterbenutzt werden, nur daß
  362.         sie jetzt um alle Befehle der Toolbox erweitert  wurde.
  363.        -Damit die Hilfe auch beim erneuten Aufruf von TP so bleibt, sollte man
  364.         noch die Konfiguration mit dem Menüpunkt Optionen-Speichern sichern.
  365.  
  366.  
  367.       3.  Übersicht aller Routinen und Units
  368.  
  369.       Aufbau:
  370.       procedure Color(vg,hg:byte);      U: SCREEN.TPU  B: SCRDEMO.PAS
  371.       │         │     └────────┐┌───────┘              │
  372.       │         └─────────────┐││┌─────────────────────┘
  373.       └──────────────────────┐││││
  374.       Prozedur oder Funktion─┘││││
  375.       Name────────────────────┘│││
  376.       Parameter────────────────┘││
  377.       Unit-Datei────────────────┘│
  378.       Beispieldatei──────────────┘
  379.  
  380.       3.1 Die Unit Check
  381.  
  382.       function Ucase(st: String):string;           U:   CHECK.TPU B: STRINGS.PAS
  383.       Wandelt einen String in Großbuchstaben um. Auch Umlaute werden beachtet.
  384.       writeln(ucase('Hallo Äüö KK ll') ergibt die Ausgabe "HALLO ÄÜÖ KK LL".
  385.  
  386.       function Lcase(st: String):string;           U:   CHECK.TPU B: STRINGS.PAS
  387.       Wandelt einen String in Kleinbuchstaben um. Auch Umlaute werden beachtet.
  388.       writeln(ucase('Hallo ÄüÖ KK LL') ergibt die Ausgabe "hallo äüö kk ll".
  389.  
  390.       function Center(st:string;ch:char;
  391.        an:byte):string;                            U:   CHECK.TPU B: STRINGS.PAS
  392.       Füllt den String st mit an Zeichen ch auf und zentriert ihn.
  393.       Center('Hallo Leute','*',30) würde ergeben:"*****Hallo Leute****"
  394.       Center('Hugo',' ',20) würde ergeben:"        Hugo        "
  395.  
  396.       function Right(st:string;ch:char;
  397.        an:byte):string;                            U:   CHECK.TPU B: STRINGS.PAS
  398.       Füllt den String st mit an Zeichen ch auf und richtet ihn rechtsbündig
  399.       aus.
  400.       Right('Hallo','*',20) würde ergeben:"***************Hallo"
  401.  
  402.       function Left(st:string;ch:char;
  403.        an:byte):string;                            U:   CHECK.TPU B: STRINGS.PAS
  404.       Füllt den String st mit an Zeichen ch auf und richtet ihn linksbündig aus.
  405.       Left('Hallo','*',20) würde ergeben:"Hallo***************"
  406.       Left('═','═',20) würde ergeben:"════════════════════"
  407.  
  408.       function DelAllChars(St:String;cha:char):
  409.        String;                                     U:   CHECK.TPU B: STRINGS.PAS
  410.       Entfernt alle Zeichen cha im String ST.
  411.       writeln(delallchars(' Hallo Heino  ',' ') würde ergeben:"HalloHeino"
  412.  
  413.       function DelLastChars(St:String;cha:char):
  414.        String;                                     U:   CHECK.TPU B: STRINGS.PAS
  415.       Entfernt alle nachstehenden Zeichen cha im String ST.
  416.       writeln(dellastchars(' Hallo Heino  ',' ') würde ergeben:" Hallo Heino"
  417.  
  418.       function DelFrontChars(St:String;cha:char):
  419.        String;                                     U:   CHECK.TPU B: STRINGS.PAS
  420.       Entfernt alle voranstehenden Zeichen cha im String ST.
  421.       writeln(delFrontchars(' Hallo Heino  ',' ') würde ergeben:"Hallo Heino "
  422.  
  423.       function StrToReal(St: String):real;         U:   CHECK.TPU B: STRINGS.PAS
  424.       Wandelt einen String in eine Real-Zahl um.
  425.  
  426.       function StrToInt(St: String):longint;       U:   CHECK.TPU B: STRINGS.PAS
  427.       Wandelt einen String in eine Integer(bzw. Longint)-Zahl um.
  428.  
  429.       function DateToStr(Day,Month,Year,
  430.        dayofweek:Word):Str13;                      U:   CHECK.TPU B: STRINGS.PAS
  431.       Wandelt das angegebene Datum in einen String um. Wenn dayofweek größer,
  432.       als 6 ist, wird der Wochentag weggelassen.
  433.       writeln(datetostr(12,10,1993,7)) würde ergeben:"12.10.1993"
  434.       writeln(datetostr(12,10,1993,1)) würde ergeben:"Mo,12.10.1993"
  435.  
  436.       function TimeToStr(Hour,Min,Sec: Word):Str8; U:   CHECK.TPU B: STRINGS.PAS
  437.       Wandelt die angegeben Uhrzeit in einen String um.
  438.       writeln(timetostr(12,34,20)) würde ergeben:"12:34:20"
  439.  
  440.       function Date(dayd:boolean):Str13;           U:   CHECK.TPU B: STRINGS.PAS
  441.       Gibt das aktuelle Datum aus. Wenn dayd true ist, wird zusätzlich der
  442.       Wochentag mit angegeben.
  443.       writeln(date(True)) würde z.B. ergeben: "Mi,01.02.1993"
  444.  
  445.       function Time:Str8;                          U:   CHECK.TPU B: STRINGS.PAS
  446.       Gibt die aktuelle Uhrzeit aus.
  447.       writeln(time) würde z.B. ergeben: "15:30:21"
  448.  
  449.       function Using(maske:string;wert:real):
  450.        string;                                     U:   CHECK.TPU B:   USING.PAS
  451.       Wandelt eine Zahl in einen String um und formatiert sie gemäß der Maske.
  452.       Die Maske besteht aus folgenden Steuerzeichen:
  453.       # Eine Ziffer. Wenn die Maske weder * noch  @ enthält, werden nicht
  454.         belegte Stellen als Leerzeichen übergeben. Wenn kein Vorzeichen
  455.         angegeben ist, enthalten negative Zahlen links ein -.
  456.       @ Eine Ziffer. Nicht belegte Stellen werden als 0 ausgegeben. Wenn die
  457.         Maske keine Vorzeichenangabe enthält, dann wird auch kein Vorzeichen
  458.         übergeben. Bereits eine einziges @ reicht aus, um den Formatiervorgang
  459.         aufzurufen.
  460.       * Wie @, nur werden nicht belegte Stellen als * ausgegeben.
  461.       + Ein Vorzeichen. Je nach Stelle wird der Zahl ein Vorzeichen
  462.         vorangestellt oder angehängt (Bei negativen zahlen -, bei positiven
  463.         Zahlen +)
  464.       - Wie +, aber es wird nur bei negativen Zahlen ein Vorzeichen erzeugt, bei
  465.         positiven Zahlen wird ein Leerzeichen ausgegeben.
  466.       , Letztes Auftreten markiert die Dezimaltrennstelle.
  467.       . wie ,
  468.         Trennzeichen, daß den beiden anderen untergeordnet ist.
  469.       Alle anderen Zeichen werden unverändert an Ihrer Position übernommen.
  470.       Beispiele für die Ausgabe sind im Beispielprogramm zu finden.
  471.  
  472.       function Sim(st1,st2:string):byte;           U:   CHECK.TPU B: SIMULAR.PAS
  473.       Stellt fest, an wievielen Stellen sich die Strings st1 und st2 voneinander
  474.       unterscheiden.
  475.       writeln(sim('Hallo','Hallo')) würde ergeben: 0
  476.       writeln(sim('Hallo','Halle')) würde ergeben: 1
  477.       writeln(sim('Hallo','Hal lo')) würde ergeben: 1
  478.       writeln(sim('Hallo','Han no')) würde ergeben: 3
  479.  
  480.       3.2 Die Unit Disk
  481.  
  482.       function DirExist(name:pathStr):boolean;     U:    DISK.TPU B:   DATEI.PAS
  483.       Gibt true zurück, wenn das angegebene Verzeichnis existiert, ansonsten
  484.       false.
  485.  
  486.       function  DiskLabel(lw:char):string;         U:    DISK.TPU B: DISKNAM.PAS
  487.       Liefert den Namen des Datenträgers im angegebenen Laufwerk zurück.
  488.  
  489.       function FileExist(name:pathStr):boolean;    U:    DISK.TPU B:   DATEI.PAS
  490.       Gibt true zurück, wenn die angegebene Datei existiert, ansonsten false.
  491.  
  492.       function FileNew(name:pathStr):byte;         U:    DISK.TPU B:   DATEI.PAS
  493.       Gibt 0 zurück , wenn die angegebene Datei nicht angelegt werden kann.
  494.       Wenn die Datei bereits existiert, wird 2 zurückgegeben. Wenn die Datei
  495.       angelegt werden kann, gibt FileNew 1 zurück.
  496.  
  497.       function FreeSpace(dr:char):longint;         U:    DISK.TPU B:------------
  498.       Gibt den freien Speicherplatz des angegebenen Laufwerks in Kilobyte
  499.       zurück. Wenn das Laufwerk nicht existiert hat Freespace den Wert 0.
  500.  
  501.       function ActPath:pathstr;                    U:    DISK.TPU B:VERZEICH.PAS
  502.       Gibt das aktuelle Verzeichnis zurück.
  503.  
  504.       function PathToPrg:pathstr;                  U:    DISK.TPU B:VERZEICH.PAS
  505.       Gibt das Verzeichnis zurück, in dem sich die Programmdatei befindet.
  506.  
  507.       function CopyFile  (old,new:pathstr;
  508.        cp:funproc):string;                         U:    DISK.TPU B: RECURS1.PAS
  509.       Kopiert die als old angegebene Datei zu der als new angegebenen Datei.
  510.       Existiert die als new angegebene Datei bereits, dann wird die Function cp
  511.       (Deklaration: funproc=function(fehl:string):boolean;) aufgerufen. Im
  512.       String fehl ist der Dateiname der betreffenden Datei enthalten. Gibt
  513.       diese Function true zurück, wird die alte Datei überschrieben. Gibt sie
  514.       dagegen false zurück, wird der Kopiervorgang abgebrochen. Copyfile gibt
  515.       evtl. auftretende Fehlermeldungen als String zurück. Ist der Rückgabe-
  516.       string leer, wurde der Kopiervorgang erfolgreich abgeschlossen.
  517.  
  518.       function RenameFile(old,new: pathstr):string;U:    DISK.TPU B:------------
  519.       Benennt die als old angegebene Datei zu der als new angegebene um. Mit
  520.       diesem Befehl ist auch Verschieben von Dateien in andere Verzeichnisse
  521.       möglich, allerdings nur auf einem Laufwerk. Rückgabestring siehe Copyfile.
  522.  
  523.       function DeleteFile(name:pathstr):string;    U:    DISK.TPU B: RECURS2.PAS
  524.       Löscht die angegebene Datei. Rückgabestring siehe Copyfile.
  525.  
  526.       function  Recurs(var orgpath:pathstr;files:
  527.        pathstr;dir:boolean;doproc:proctyp):string; U:    DISK.TPU B: RECURS?.PAS
  528.       Belegt eine Variable solange mit Dateinamen, solange Dateien, die der
  529.       übergebenen Maske entsprechen, gefunden wurden. Dabei durchkämmt die
  530.       Prozedur bei Bedarf auch rekursiv ganze Verzeichnisbäume. Die Variablen
  531.       müssen folgendermaßen belegt werden:
  532.       orgpath Verzeichnis, mit dem begonnen werden soll.
  533.       files   Maske der zu findenden Dateien (Auch Wildcards, wie * und ? sind
  534.               erlaubt.)
  535.       dir     true:  durchsucht auch rekursiv alle Unterverzeichnisse.
  536.               false: durchsucht nur, das mit orgpath angegebene Verzeichnis.
  537.       doproc  Prozedur, die für jede gefundene Datei bzw. jedes gefundene
  538.               Verzeichnis aufgerufen wird. Sie ist mit folgenden Parametern
  539.               definiert:
  540.               procedure(files,dir:string;boaf:boolean);Die Variablen werden wie
  541.               folgt übergeben:
  542.               files Enthält die gefundene Datei, wenn ein Verzeichnis gefunden
  543.                     wurde, enthält files einen Leerstring.
  544.               dir   Enthält das gefundene Verzeichnis, wenn eine Datei gefunden
  545.                     wurde, enthält dir einen Leerstring.
  546.               boaf  true: Datei oder Verzeichnis wurden gefunden.
  547.                     false: Es wurde wieder in das übegeordnete Verzeichnis
  548.                     zurück gewechselt.
  549.  
  550.       Ich muß leider zugeben, daß die ganze Prozedur etwas umständlich geraten
  551.       ist, aber ich wußte nicht, wie man diese Problem auf effektivere Weiße
  552.       lösen kann.
  553.       Zum besseren Verständnis empfehle ich auf alle Fälle, die 3
  554.       Beispielprogramme recurs1, recurs2 und recurs3 auch im Einzelschrittmodus
  555.       auszuführen und die Variableninhalte anzeigen zu lassen. Rückgabestring
  556.       siehe Copyfile.
  557.  
  558.       function wildcard(org,muster:pathstr):
  559.        pathstr;                                    U:    DISK.TPU B:   TESTW.PAS
  560.       Gibt den Vollständigen Dateinamen, der sich aus dem Muster muster, das
  561.       Jokerzeichen wie * und ? enthalten darf und dem Originaldateinamen org er-
  562.       gibt.
  563.       wildcard('C:\SW60\WRITER.EXE','*.BAK') würde "C:\SW60\WRITER.BAK" ergeben.
  564.  
  565.       3.3 Die Unit DosX
  566.  
  567.       function shell(command:string):byte;         U:    DOSX.TPU B:   SHELL.PAS
  568.       Führt den als Argument angegebenen DOS-Befehl aus oder ruft die angegebene
  569.       Programmdatei auf. Im Unterschied zur Standardprozedur Exec muß der Heap
  570.       vorher nicht mit $M begrenzt werden; vielmehr wird der gesamte zur Zeit
  571.       des Aufrufes zur Verfügung stehende Heap-Speicher dem aufzurufenden
  572.       Programm zugeteilt. Gibt Shell als Funktionsergebnis 0 aus, dann ging
  573.       alles glatt. Andernfalls ist einer der folgenden in Konstanten
  574.       definierten Fehler aufgetreten:
  575.       nomemory    =1; {Nicht genug Speicher frei}
  576.       internerror =2; {Interner Fehler}
  577.       memoryerror =3; {Speicherfehler}
  578.       unknownerror=4; {Unbekannter Fehler}
  579.       nostart     =5; {Angegebenes Kommando ist ungültig}
  580.  
  581.       function shellwin(x1,y1,x2,y2:byte;
  582.        command:string):byte;                       U:    DOSX.TPU B:SHELLWIN.PAS
  583.       Shellwin basiert auf dem DOS-Window von M. Austermeier. Ich habe es in
  584.       meine Toolbox aufgenommen, damit der Aufruf durch eine einzige Prozedur
  585.       vereinfacht und mein erweiterter Shell-Befehl unterstützt wird. Alle
  586.       Ausgaben, die das Programm über die entsprechenden DOS-Funktion auf den
  587.       Bildschirm schreiben, werden in das durch die Koordinaten anzugebende
  588.       Fenster umgeleitet. Rückgabewerte siehe shell.
  589.  
  590.       procedure boot(ks:boolean);                  U:    DOSX.TPU B:------------
  591.       Führt einen Neustart des Rechners aus. Ist ks=true, dann wird ein Kalt-
  592.       start ausgeführt, andernfalls ein Warmstart.
  593.  
  594.       3.4     Die Unit Types
  595.  
  596.       Die Typendeklarationen                       U:   TYPES.TPU B:------------
  597.       In der Unit types sind folgende Typen vereinbart, die von verschiedenen
  598.       anderen Units benötigt werden:
  599.       str1=string[1] ... str254=string[254] {Stringtypen der verschiedenen
  600.                                              Längen}
  601.       soc=set of char;                      {Wird von KEYBOARD benötigt}
  602.       proctype=procedure;                   {Prozedurvariable}
  603.  
  604.       procedure nothing;                           U:   TYPES.TPU B:------------
  605.       Dummy Prozedur, die nichts macht. Sie wird u.a. von MENU benötigt.
  606.  
  607.       3.5 Die Unit Keyboard
  608.  
  609.       Die Tastenkonstanten                         U:KEYBOARD.TPU B:------------
  610.       const
  611.       F1=   #0#59; ALT_F1=    #0#104; CTRL_F1=     #0#94; SHIFT_F1=    #0#84;
  612.       F2=   #0#60; ALT_F2=    #0#105; CTRL_F2=     #0#95; SHIFT_F2=    #0#85;
  613.       F3=   #0#61; ALT_F3=    #0#106; CTRL_F3=     #0#96; SHIFT_F3=    #0#86;
  614.       F4=   #0#62; ALT_F4=    #0#107; CTRL_F4=     #0#97; SHIFT_F4=    #0#87;
  615.       F5=   #0#63; ALT_F5=    #0#108; CTRL_F5=     #0#98; SHIFT_F5=    #0#88;
  616.       F6=   #0#64; ALT_F6=    #0#109; CTRL_F6=     #0#99; SHIFT_F6=    #0#89;
  617.       F7=   #0#65; ALT_F7=    #0#110; CTRL_F7=    #0#100; SHIFT_F7=    #0#90;
  618.       F8=   #0#66; ALT_F8=    #0#111; CTRL_F8=    #0#101; SHIFT_F8=    #0#91;
  619.       F9=   #0#67; ALT_F9=    #0#112; CTRL_F9=    #0#102; SHIFT_F9=    #0#92;
  620.       F10=  #0#68; ALT_F10=   #0#113; CTRL_F10=   #0#103; SHIFT_F10=   #0#93;
  621.       F11= #0#133; ALT_F11=   #0#139; CTRL_F11=   #0#137; SHIFT_F11=  #0#135;
  622.       F12= #0#134; ALT_F12=   #0#140; CTRL_F12=   #0#138; SHIFT_F12=  #0#136;
  623.  
  624.       PgUp= #0#73; CTRL_PgUp= #0#132; Up=          #0#72;
  625.       PgDn= #0#81; CTRL_PgDn= #0#118; Down=        #0#80;
  626.       Pos1= #0#71; CTRL_Pos1= #0#119; Lft=         #0#75; CTRL_Lft=   #0#115;
  627.       Ende= #0#79; CTRL_Ende= #0#117; Rght=        #0#77; CTRL_Rght=  #0#116;
  628.       Einfg=#0#81; CTRL_EINFG=  #0#4; Entf=        #0#83; CTRL_ENTF=    #0#6;
  629.       Back =   #8; CTRL_back =  #127;                     CTRL_Druck= #0#114;
  630.       ENTER=  #13; CTRL_ENTER=   #10; TAB=            #9; SHIFT_TAB=   #0#15;
  631.       ESC=    #27; LEER=         #32;
  632.  
  633.       ALT_A=  #030; CTRL_A=        1; ALT_N=       #0#49; CTRL_N=       #14;
  634.       ALT_B=   #18; CTRL_B=        2; ALT_O=       #0#24; CTRL_O=       #15;
  635.       ALT_C= #0#46; CTRL_C=        3; ALT_P=       #0#25; CTRL_P=       #16;
  636.       ALT_D= #0#32; CTRL_D=        4; ALT_Q=       #0#16; CTRL_Q=       #17;
  637.       ALT_E= #0#18; CTRL_E=        5; ALT_R=       #0#19; CTRL_R=       #18;
  638.       ALT_F= #0#33; CTRL_F=        6; ALT_S=       #0#31; CTRL_S=       #19;
  639.       ALT_G= #0#34; CTRL_G=        7; ALT_T=       #0#21; CTRL_T=       #20;
  640.       ALT_H= #0#35; CTRL_H=        8; ALT_U=       #0#22; CTRL_U=       #21;
  641.       ALT_I= #0#23; CTRL_I=        9; ALT_V=       #0#47; CTRL_V=       #22;
  642.       ALT_J= #0#36; CTRL_J=       10; ALT_W=       #0#17; CTRL_W=       #23;
  643.       ALT_K= #0#37; CTRL_K=       11; ALT_X=       #0#45; CTRL_X=       #24;
  644.       ALT_L= #0#38; CTRL_L=       12; ALT_Y=       #0#21; CTRL_Y=       #25;
  645.       ALT_M= #0#50; CTRL_M=       13; ALT_Z=       #0#44; CTRL_Z=       #26;
  646.  
  647.       procedure SetRate(ansp,wied:byte);           U:KEYBOARD.TPU B: SETRATE.PAS
  648.       Stellt die Ansprechzeit der Tastatur und die Wiederholrate ein.
  649.       Die Ansprechzeit (ansp) darf einen Wert von 0-3 (in ms) annehmen,
  650.       die Wiederholrate(wied) einen Wert von 0-31.
  651.  
  652.       function GetSKey:byte;                       U:KEYBOARD.TPU B:  TASTEN.PAS
  653.       Ermittelt den Status der Sondertasten. Die Sondertasten sind im
  654.       Interface-Teil als Konstanten deklariert. Sondertaste and Getskey >0
  655.       bedeutet, daß die entsprechende Taste gedrückt wird, bzw. aktiv ist.
  656.       Konstanten:
  657.       shift_L=2;  shift_R=1;   alt    =8;  ctrl   =4;
  658.       Scroll =16; ins    =128; caps   =64; num    =32;
  659.  
  660.       function GetKey:str2;                        U:KEYBOARD.TPU B:  TASTEN.PAS
  661.       Überprüft, ob eine Taste gedrückt wurde. Wenn ja dann ist der erste
  662.       Buchstabe, das ASCII-Zeichen der gedrückten Taste. Wenn eine Sondertaste
  663.       gedrückt wurde, dann ist das erste Zeichen #0 und das zweite Zeichen
  664.       enthält den erweiterten Tastaturcode. Alle Tastaturcodes sind im Anhang zu
  665.       finden.
  666.  
  667.       procedure EdLine (x,y,attr,lang,typ:byte;ul:
  668.        byte;var edln:string;var xc:byte;sol:soc;
  669.        texo,texa:asz;p:byte);                      U:KEYBOARD.TPU B:  EDTEST.PAS
  670.       Ein String wird editiert. Dabei wird die Maus unterstützt. Mausklick
  671.       innerhalb des Eingabefeldes bewirkt, daß der Cursor an diese Stelle kommt.
  672.       Mausklick ober halb der Eingabefeldes hat die gleiche Bedeutung wie Taste
  673.       Up und Mausklick unterhalb des Eingabefeldes hat die gleiche Wirkung wie
  674.       Taste down.
  675.       x,y  Gibt die Position des Eingabefeldes an.
  676.       xc   Variable, die die augenblickliche Cursorposition im String angibt.
  677.            Ist xc=0, dann wird der Cursor an das Ende des Strings gesetzt.
  678.       attr Gibt die Zeichenfarbe des Eingabefeldes an. Kann komfortabel über
  679.            die function color (UNIT Screen) angegeben werden)
  680.       lang Gibt die Länge des Eingabefeldes an.
  681.       typ  Eingabetyp: Wird durch die folgenden Konstanten bestimmt, die auch
  682.            durch Addition miteinander kombinierbar sind.
  683.            Normal  =1; {Normale Eingabe}
  684.            Pasword =2; {Alle Zeichen werden nur durch ein * am Bildschirm
  685.                         angezeigt.}
  686.            Upchars =4; {Alle Buchstaben werden in Großbuchstaben umgewandelt}
  687.            Delfst  =8; {Der Vorgabestring wird zuerst invertiert angezeigt.
  688.                         Wird jetzt ein neues Zeichen eingegeben, wird die
  689.                         Vorgabe gelöscht und nur das neue Zeichen übernommen.
  690.                         Danach kann normal weitereditiert werden. Wird dagegen
  691.                         zu Anfang eine andere Taste (z.B. Backspace oder Left)
  692.                         gedrückt, verschwindet die Invertierung und es kann
  693.                         sofort normal weitereditiert werden.}
  694.            Datest  =16;{Nur Datumsangaben sind zulässig}
  695.            Timest  =32;{Nur Zeitangaben sind zulässig}
  696.       ul   Gibt die Länge des zu editierenden Strings an. ist ul> la dann wird
  697.            gescrollt.
  698.       edln Zu editierender String.
  699.       sol  Gibt eine Menge aller erlaubten Zeichen an. enthält sol nur #0, wird
  700.            also mit [#0] angegeben, dann sind alle Zeichen erlaubt. Sollen
  701.            dagegen z.B. nur zahlen als Eingabe zulässig sein, dann müsste sol
  702.            mit ['0'..'9'] angegeben werden.
  703.       texa Tasten, bei deren Auslösung das Editieren beendet werden soll. Die
  704.       texo Tasten werden in einem Array[0..10] mit Komponenten vom Typ str2
  705.            übergeben. Für die Tastendefinitionen werden am besten die
  706.            Konstanten, die in der UNIT Keyboard definiert sind verwendet. Wird
  707.            eine Taste betätigt, die in texo angegeben ist, wird das Editieren
  708.            beendet und edln enthält den aktuellen Editierstring. Wird eine
  709.            Taste, die in texa angegeben ist, wird ebenfalls das Editieren
  710.            abgebrochen, nur das edln dann nicht den aktuellen String, sondern
  711.            den Inhalt besitzt, den es vor dem Edline-Aufruf hatte. Die Strings
  712.            werden am besten so belegt:
  713.            const texo:asz=('',up,down,enter,'','','','','','','');
  714.                  texa:asz=('',esc,'','','','','','','','','');
  715.            Das erste Feld darf nie belegt werden. Werden weniger, als 10 Tasten
  716.            definiert, muß das Array mit Leerstrings aufgefüllt werden.
  717.       p    Bei 2 bleibt das Pulldown-Menü beim Editieren aktiv, bei 0 nicht.
  718.            Hat nur Wirkung in der BS-Pascal-Toolbox 2.5+.
  719.  
  720.       procedure putkey(keypuffer: string);         U:KEYBOARD.TPU B:  PUTKEY.PAS
  721.       Schreibt den String keypuffer sind in den Tastaturpuffer. Tastencodes
  722.       werden innerhalb des Strings mit #[Tastencode] bzw. #0#[erweiterter
  723.       Tastencode] angegeben. Die Tastencodes sind im Anhang zu finden.
  724.       Anmerkung: Es dürfen höchstens 15 Tasten in den Tastaturpuffer
  725.       geschrieben werden.
  726.       Putkey('Hallo#13') würde Hallo und die Taste ENTER in den Tastaturpuffer
  727.       schreiben.
  728.       Putkey('#0#59#27') würde die Tasten F1 und ESC in den Tastaturpuffer
  729.       schreiben.
  730.  
  731.       3.5 Die Unit Mouse
  732.  
  733.       const NoMouse:Boolean=true;                  U:  MOUSEE.TPU B:      MT.PAS
  734.       Die Konstante hat den Wert true, wenn entweder noch nicht MouseInit
  735.       aufgerufen wurde, oder wenn keine Maus installiert ist. Alle Routinen in
  736.       der Unit Mouse, ausgenommen natürlich MouseInit werden nicht ausgeführt,
  737.       wenn Nomouse=true ist.
  738.  
  739.       const MouseText:Boolean=true;                U:  MOUSEE.TPU B:      MT.PAS
  740.       Wenn diese Typisierte Konstante auf true gesetzt ist, werden die
  741.       Mauskoordinaten automatisch in die richtigen Koordinaten für den
  742.       Textmodus umgerechnet. Soll die Unit Mouse dagegen im Grafikmodus
  743.       eingesetzt werden, dann muß die Konstante auf false gesetzt werden.
  744.  
  745.       procedure MouseInit;                         U:   MOUSE.TPU B:      MT.PAS
  746.       Initialisiert die Maus.
  747.  
  748.       procedure MouseGet(var x,y,k:integer);       U:   MOUSE.TPU B:      MT.PAS
  749.       Ermittelt in den Variablen x und y die aktuelle Mausposition.
  750.       Die Variable K enthält den Zustand der Mausknöpfe:
  751.       k and 1 > 0 = linke Taste gedrückt.
  752.       k and 2 > 0 = rechte taste gedrückt.
  753.       k and 4 > 0 = mittlere Taste gedrückt.
  754.  
  755.       procedure MouseOn;                           U:   MOUSE.TPU B:      MT.PAS
  756.       Macht den Mauszeiger sichtbar.
  757.  
  758.       procedure MouseOff;                          U:   MOUSE.TPU B:      MT.PAS
  759.       Macht den Mauszeiger unsichtbar.
  760.  
  761.       procedure MouseArea(X1,Y1,X2,Y2:integer);    U:   MOUSE.TPU B:      MT.PAS
  762.       Schränkt den Bewegungsraum der Maus auf das Rechteck, das mit den vier
  763.       Koordinaten x1,y1,x2,y2 bestimmt wird ein.
  764.  
  765.       procedure MousePut(X,Y:integer);             U:   MOUSE.TPU B:      MT.PAS
  766.       Setzt die Maus an die Position x,y.
  767.  
  768.       procedure ButtonPressed(But:integer;
  769.        VAR x,y,b,Count:integer);                   U:  MOUSEE.TPU B:------------
  770.       Gibt die Werte zurück, die beim letzten Drücken den in But angegebenen
  771.       Mausknopf gegeben waren.
  772.       But   0=linker Knopf, 1=rechter Knopf
  773.       Die Prozedur gibt folgende Werte zurück:
  774.       x,y   Mausposition beim Drücken von dem Mausknopf in But
  775.       b     Momentaner Mausbuttonstatus (vgl. MausPos)
  776.       Count Wie oft der MausKnopf But seit dem letzten Aufruf gedrückt wurde.
  777.  
  778.       procedure ButtonReleased(But: integer;
  779.        VAR x,y,b,Count: integer);                  U:  MOUSEE.TPU B:------------
  780.       Wie ButtonPressed, nur daß hier das Loslassen des Knopfes registriert wird
  781.  
  782.       procedure MouseMove(var x,y:integer);        U:  MOUSEE.TPU B:------------
  783.       Gibt die X/Y-Bewegung seit dem letzen Aufruf in die Variablen x und y
  784.       zurück.
  785.  
  786.       procedure MouseSpeed(sx, sy : integer);      U:  MOUSEE.TPU B:      MT.PAS
  787.       Verändert die Empfindlichkeit der Maus.
  788.       sx sx/100 inch entsprechen acht Pixel Mausbewegung horizontal
  789.       sy sy/100 inch entsprechen acht Pixel Mausbewegung vertikal
  790.  
  791.       3.6 Die Unit Print
  792.  
  793.       function PrinterReady:boolean;               U:   PRINT.TPU B:PRINTEST.PAS
  794.       Wenn der Drucker bereit ist Daten zu empfangen, wird true zurückgegeben,
  795.       ansonsten false.
  796.  
  797.       procedure PrinterReset;                      U:   PRINT.TPU B:PRINTEST.PAS
  798.       Führt einen Rest auf dem Drucker aus.
  799.  
  800.       procedure FormFeed;                          U:   PRINT.TPU B:PRINTEST.PAS
  801.       Führt einen Seitenvorschub (Form Feed) auf dem Drucker aus.
  802.  
  803.       3.7 Die Unit Screen
  804.  
  805.       procedure ColorMode(INTENS:BOOLEAN);         U:  SCREEN.TPU B: SCRDEMO.PAS
  806.       Wenn Colormode(true) aufgerufen wird, dann können für die
  807.       Hintergrundfarbe auch die Attribute 8-16 gesetzt werden, allerdings ist
  808.       dann keine blinkende Schrift mehr möglich. Mit Colormode(false) wird der
  809.       Vorgang wieder rückgängig gemacht.
  810.  
  811.       function  Color(vg,hg:byte):byte;            U:  SCREEN.TPU B: SCRDEMO.PAS
  812.       liefert den Farbwert, der sich aus der angegeben Textfarbe (vg) und
  813.       Hintergrundfarbe (hg) ergibt. Um die aktuelle Farbe zu ändern muß
  814.       Textattr:=color(vg,hg); eingegeben werde.
  815.       Um in der Pascal-Toolbox 2.00+ die Farben für verschiedene Bildelemnte zu
  816.       verändern, wird die Funktion vor allem gebraucht.
  817.  
  818.       function inv(at:byte):byte;                  U:  SCREEN.TPU B:------------
  819.       Liefert den invertierten Farbwert des Farbwertes at zurück. Beispiel
  820.       textattr:=inv(textattr) invertiert die aktuelle Farbe, dh. Textfarbe und
  821.       Hintergrundfarbe werden getauscht.
  822.  
  823.       function invh         (at1,at2:byte):byte;   U:  SCREEN.TPU B:------------
  824.       Liefert einen neuen Farbwert,wobei die Hintergrundfarbe aus der Textfarbe
  825.       vom Attribut at1 und die Textfarbe aus der Textfarbe vom Attribut at2
  826.       gebildet wird.
  827.  
  828.       procedure SetCursor(anf,en:byte);            U:  SCREEN.TPU B:  CURSOR.PAS
  829.       Setzt die Oberzeile (anf) und die Unterzeile (en) des Cursors neu.
  830.  
  831.       procedure GetCursor(Var anf,en:byte);        U:  SCREEN.TPU B:  CURSOR.PAS
  832.       Ermittelt die aktuelle Cursorform. anf=Oberzeile und en=Unterzeile.
  833.  
  834.       procedure HiddenCursor;                      U:  SCREEN.TPU B:  CURSOR.PAS
  835.       Macht den Cursor unsichtbar.
  836.  
  837.       procedure NormCursor;                        U:  SCREEN.TPU B:  CURSOR.PAS
  838.       Stellt den normalen Strichcursor her.
  839.  
  840.       procedure BlockCursor;                       U:  SCREEN.TPU B:  CURSOR.PAS
  841.       Stellt einen Blockcursor her.
  842.  
  843.       procedure DefaultCursor;                     U:  SCREEN.TPU B:  CURSOR.PAS
  844.       Stellt den Cursor wieder her, der vor dem Start des Programmes gesetzt
  845.       war.
  846.  
  847.       procedure Logo(x,y:Integer;Wort:String;
  848.        cha:char);                                  U:  SCREEN.TPU B: SCRDEMO.PAS
  849.       Gibt den String wort ab den Koordinaten x und y mit Großbuchstaben aus,
  850.       die aus dem Zeichen cha gebildet werden.
  851.  
  852.       3.9 Die Unit Timer
  853.  
  854.       procedure timeron(handler:proctype);         U:   TIMER.TPU B:  BLDSCH.PAS
  855.       Ruft die Prozedur handler über den Timerinterrupt 18.2* in der Sekunde
  856.       auf. Mit Hilfe dieser Prozedur ist es möglich einfache Hintergrund-
  857.       prozesse, wie z.B. eine Uhr oder Bildschirmschoner laufen zu lassen. Ein
  858.       Anwendungsbeispiel finden Sie im Programm BLDSCH.PAS.
  859.  
  860.       procedure timeroff;                          U:   TIMER.TPU B:  BLDSCH.PAS
  861.       Stellt den Originalinterrupt wieder her und Unterbricht die Ausführung der
  862.       durch timeron angegebenen Hintergrundprozedur.
  863.  
  864.       3.8 Die Unit Windows
  865.  
  866.       Alle Prozeduren, die mit + gekennzeichnet sind, sind nur in der +-Version
  867.       enthalten.
  868.  
  869.       Die Fenstervariable                         +U: WINDOWS.TPU B: WINDEMO.PAS
  870.       const w : WIPTR = nil;
  871.       Pointervariable, die auf ein Record verweist, in dem die Daten
  872.       des aktuellen Fensters festgehalten werden:
  873.       x1,y1,x2,y2 Koordinaten des Fensters
  874.       sx,sy       Schattenbreite/Länge
  875.       cx,cy       Cursorposition vor dem öffnen des Fensters
  876.       ca,cu       Cursorform vor dem Öffnen des Fensters
  877.       border      Rahmenwerte
  878.       handle      Nummer des Fensters
  879.       puffer      Bildschirm unter dem Fenster
  880.       lastwin,nextwin: Verweis auf weitere Fenster
  881.  
  882.       Die Grafikkartenvariablen                    U: WINDOWS.TPU B:------------
  883.       Die folgenden Variablen werden alle durch eine INIT-Prozedur direkt nach
  884.       dem Start des Programmes belegt.
  885.        Colmod:boolean; Wenn colmod=true, dann ist in dem Computer eine Farb-
  886.       Grafikkarte  installiert, ansonsten nur eine Monochrome Karte.
  887.        VioKarte:byte; Ist mit einer der folgenden Konstanten belegt:
  888.       MDA       = 0; CGA       = 1; EGA       = 2; EGA_MONO  = 3;
  889.       VGA       = 4; VGA_MONO  = 5; MCGA      = 6; MCGA_MONO = 7;
  890.        AnzLine, AnzCol:byte; Geben die Anzahl der Bildschirmzeilen und Spalten
  891.       an.
  892.  
  893.       Die Relativen Koordinaten                   +U: WINDOWS.TPU B: WINDEMO.PAS
  894.       const rx:byte =0; ry:byte =0;Bei den Prozeduren wwrite, wwritec,scroll,
  895.       changecolors, changecolorsc werden zu den angegebenen Koordinaten immer
  896.       rx bzw. ry hinzuaddiert. So ist es durch die folgenden Befehle nach
  897.       openwindow möglich, daß alle Koordinaten der oben erwähnten Prozeduren
  898.       relativ zum aktuellen fenster angegeben werden: rx:=w^.x1;ry:=w^.y1;
  899.       Um wieder absolute Koordinaten zu verwenden müssen rx und ry einfach
  900.       wieder auf 0 gesetzt werden.
  901.  
  902.       function  Openwindow    (x1,y1,x2,y2,sx,sy:
  903.        byte;border:word;attr,attrt:byte;title:
  904.        str132):integer;                           +U: WINDOWS.TPU B: WINDEMO.PAS
  905.       Öffnet ein neues Fenster mit den Koordinaten x1,y1,x2,y2. sx und sy geben
  906.       die Breite und Länge des Schattens an, der aber nur gezeichnet wird, wenn
  907.       border den Wert shadow enthält.Border kann zusätzlich zu den Werten für
  908.       den Rahmen (siehe procedure drawframe) noch die Werte 256 (CONST Shadow)
  909.       UND 512 (const CLEARWINDOW). Wenn shadow gesetzt ist, erhält das fenster
  910.       einen Schatten. Wenn clearwindow gesetzt ist, wird der Fensterinhalt nach
  911.       dem Aufruf von Openwindow gelöscht. attr enthält die Farbwerte für den
  912.       Rahmen und den Fensterhintergrund. attrt definiert die Farbe des
  913.       Fenstertitels. Title schließlich legt den Fenstertitel fest. Wenn title
  914.       ein Leerstring übergeben wird, wird kein Titel verwendet. Openwindow gibt
  915.       als Funktionswert entweder -1 (CONST winopenerror), wenn das fenster nicht
  916.       geöffnet werden konnte oder aber die Nummer des neuen Fensters zurück.
  917.  
  918.       function ActivateWindow(key:integer):boolean;U: WINDOWS.TPU B: WINDEMO.PAS
  919.       Bringt das mit key angegebene Fenster in den Vordergrund. Key ist der
  920.       Funktionswert, der von Openwindow zurückgegeben wurde. Wenn das Fenster
  921.       nicht nach vorne geholt werden konnte, gibt activatewindow false zurück,
  922.       ansonsten true.
  923.  
  924.       function  GetChar       (x,y:byte ):char;    U: WINDOWS.TPU B:------------
  925.       Liefert das Zeichen an der Bildschirmposition x,y zurück.
  926.  
  927.       function  Getattr       (x,y:byte ):byte;    U: WINDOWS.TPU B:------------
  928.       Liefert die Farbe an der Bildschirmposition x,y zurück.
  929.  
  930.       procedure Putattr       (x,y,attr:byte );    U: WINDOWS.TPU B:------------
  931.       Färbt das Zeichen an der Position x,y mit der Farbe attr.
  932.  
  933.       procedure PutChar       (x,y,attr:byte;ca:   U: WINDOWS.TPU B:------------
  934.        char);
  935.       Setzt an die Stelle x,y das Zeichen ca mit der Farbe attr.
  936.  
  937.       procedure Getscr(x1,y1,x2,y2:byte;
  938.        bufptr:pointer);                            U: WINDOWS.TPU B:  BLDSCH.PAS
  939.       Speichert den Bildschirmausschnitt, der durch die Koordinaten x1,y1,x2,y2
  940.       angegeben wird in der Pointervariablen bufptr.
  941.       ACHTUNG: Größe von bufptr bitte vorher mit Areasize ermitteln und mit
  942.       Getmem genügend Speicher reservieren.
  943.  
  944.       procedure PutScr(x1,y1,x2,y2:byte;
  945.        p:bufptr);                                  U: WINDOWS.TPU B:  BLDSCH.PAS
  946.       stellt einen Bildschirmausschnit wieder her. Arbeitet analog zu GetArea.
  947.  
  948.       function  Areasize(x1,y1,x2,y2:byte):word;   U: WINDOWS.TPU B:------------
  949.       Berechnet den benötigten Speicherplatz einer Pointervariablen, in der der
  950.       angegebene Bildschirmausschnitt gespeichert werden soll.
  951.  
  952.       procedure CloseWindow;                      +U: WINDOWS.TPU B: WINDEMO.PAS
  953.       Schließt das aktuelle Fenster.
  954.  
  955.       procedure Wwrite(x,y,attr:byte; st:str132);  U: WINDOWS.TPU B: WINDEMO.PAS
  956.       Schreibt den String st an der Position x,y direkt in den
  957.       Bildschirmspeicher. Die Zeichenfarbe wird mit attr bestimmt.
  958.       Siehe auch: Die Relativen Koordinaten.
  959.  
  960.       procedure Wwritec(x,y,attr1,attr2:byte;
  961.        st:str132);                                 U: WINDOWS.TPU B:------------
  962.       Arbeitet wie wwrite, mit dem Unterschied, daß der Buchstabe in einem
  963.       String, vor dem ein ^ steht mit der Farbe attr2, der restliche String mit
  964.       Farbe attr1 gezeichnet wird.
  965.       Siehe auch: Die Relativen Koordinaten.
  966.  
  967.       procedure changecolors  (x,y,attr,la:byte);  U: WINDOWS.TPU B:------------
  968.       färbt den Bereich ab der Position x,y mit der Länge la mit der Farbe attr
  969.       ein. Sonst wie wwrite.
  970.       Siehe auch: Die Relativen Koordinaten.
  971.  
  972.       procedure changecolorsc (x,y,attr1,attr2,
  973.        la,pc:byte);                                U: WINDOWS.TPU B:------------
  974.       Arbeitet wie changecolors, nur daß der Buchstabe, der auf der Position pc
  975.       steht mit der Farbe attr2 versehen wird, der übrige Bereich mit attr1.
  976.       Siehe auch: Die Relativen Koordinaten.
  977.  
  978.       procedure scroll        (x1,y1,x2,y2,attr,
  979.        anz,dir:byte);                             +U: WINDOWS.TPU B: WINDEMO.PAS
  980.       Verschiebt den Bildschirmausschnitt, der durch die Koordinaten x1,y1,x2,y2
  981.       angegeben wird um anz Zeilen bzw. Spalten in die Richtung dir. Dir wird
  982.       durch eine der folgenden Konstanten definiert:
  983.       leftm=1;{Nach links}  rightm =2; {Nach rechts}
  984.       topm =3;{nach Oben}   bottomm=4; {Nach unten}
  985.       Der freiwerdende Bereich wird mit der Farbe attr gelöscht. Wenn attr=255
  986.       (CONST NO_CLEAR), dann wird der Bereich nicht gelöscht.
  987.       Siehe auch: Die Relativen Koordinaten.
  988.  
  989.       function  poswindow     (x,y:byte ):boolean;+U: WINDOWS.TPU B: WINDEMO.PAS
  990.       Setzt das aktuelle Fenster an die Position x,y.Rückgabewert: true=Alles OK,
  991.       false=Fenster konnte nicht verschoben werden.
  992.  
  993.       function  resizewindow  (a,b,c,d,attr,attrt:
  994.        byte;title:str132):boolean;                +U: WINDOWS.TPU B: WINDEMO.PAS
  995.       Vergrößert, bzw. verkleinert das aktuelle Fenster  mit den neuen
  996.       Koordinaten a,b,c,d. Dabei wird der Rahmen neu mit dem Titel title und
  997.       der Farbe attrt gezeichnet. Wird das fenster vergrößert, wird der neue
  998.       Fensterraum mit der Farbe attr gelöscht, wenn die Border-Variable des
  999.       Fensters den Wert clear_window enthält. Der Fensterbereich, der innerhalb
  1000.       des alten und des neuen Rahmens liegt, bleibt erhalten.
  1001.  
  1002.       function  changeborder  (bord:word;attr,
  1003.        attrt:byte;title:str132):boolean;          +U: WINDOWS.TPU B: WINDEMO.PAS
  1004.       Zeichnet das Fenster mit den angegeben Parametern (siehe Openwindow) neu.
  1005.       Der Fensterinhalt bleibt bestehen.
  1006.  
  1007.       procedure winclrscr;                        +U: WINDOWS.TPU B: WINDEMO.PAS
  1008.       Löscht den Inhalt des aktuellen Fensters.
  1009.  
  1010.       procedure DrawFrame(x1,y1,x2,y2,border,
  1011.        attr,attrt:byte;title:string);             +U: WINDOWS.TPU B:------------
  1012.       Zeichnet einen Rahmen mit dem Titel title und den angegeben Koordinaten.
  1013.       attr gibt die Farbe des Rahmens, attrt die des Titels an.
  1014.       Border enthält eine Kombination der folgendes Konstanten:
  1015.       const doubletop        =1;
  1016.             doubleright      =2;
  1017.             doublebottom     =4;
  1018.             doubleleft       =8;
  1019.             doubleall        =15;
  1020.             simpleall        =0;
  1021.             noframe          =16;
  1022.             centertitle      =32;
  1023.             titleline        =64;
  1024.             notitleframe     =128;
  1025.  
  1026.       Beispiel border:=simpleall+notitleframe
  1027.                border:=doubletop+doublebottom+centertitle
  1028.                border:=doubleall
  1029.  
  1030.       3.11 Die Unit Menu (Nur BS-Pascal-Toolbox 2.5+)
  1031.  
  1032.       Die Farbvariablen                            U:    MENU.TPU B:BSP_PLUS.PAS
  1033.       Farbwerte können leicht mit der function color (Unit screen) ermittelt
  1034.       werden.
  1035.       nor,           {Normaler Text}
  1036.       men,menh,      {Menü, Menühotkey}
  1037.       tit,           {Titel}
  1038.       txtfen,txtfenh,{Fenstertext, Fenstertexthotkey}
  1039.       ttlfen,        {Fenstertitel}
  1040.       buta,butah,    {Aktiver Button, Aktiver Buttonhotkey}
  1041.       buti,butih,    {Inaktiver Button, Inaktiver Buttonhotkey}
  1042.       butd,butdh,    {Defaultbutton, Defaultbuttonhotkey}
  1043.       eina,eini:     {Aktive Eingabezeile, Inaktive Eingabezeile}
  1044.  
  1045.       Die Ereignisvariablen                        U:    MENU.TPU B:BSP_PLUS.PAS
  1046.       mk,mx,my beinhalten den zuletzt ermittelten Status der Maus: mk=Mausknopf
  1047.                mx,my=Mauskoordinaten
  1048.       c        enthält die zuletzt gedrückte Taste.
  1049.  
  1050.       var standstat:string;                        U:    MENU.TPU B:BSP_PLUS.PAS
  1051.       Der Text, der in der Variable standstat enthalten ist, wird beim Start
  1052.       des Programmes und nach anderen Statuszeilen, die von internen Routinen
  1053.       angezeigt werden, in die Statuszeile geschrieben.
  1054.  
  1055.       const tastproc:proctyp=nothing;              U:    MENU.TPU B:BSP_PLUS.PAS
  1056.       Diese Prozedur wird immer nach der Aktualisierung der variable c
  1057.       aufgerufen, um eventuell eigene Prozeduren, bei Druck einer bestimmten
  1058.       Taste aufzurufen. die Prozedur, wie natürlich auch alle andern, die durch
  1059.       eine Variable aufgerufen werden, muß als far deklariert werde.
  1060.       Beispiel (Ruft bei Druck auf F1 die Help-Prozedur auf)
  1061.       tastproc:=bsptast;
  1062.       procedure bsptast;far;
  1063.       begin
  1064.        if c=#0#59 then begin help;c:='';end;
  1065.       end;
  1066.  
  1067.       procedure addmenu(nam,sta:str132);           U:    MENU.TPU B:BSP_PLUS.PAS
  1068.       Fügt einen neuen Menüpunkt in die Pulldown-Menüleiste ein.
  1069.       nam Name des Eintrages
  1070.       sta Text, der in der Statuszeile angezeigt wird.
  1071.       Der Buchstabe nach einem ^ im Namen wird hervorgehoben.
  1072.  
  1073.       procedure addsubmenu(nam,sta,neu:str132;
  1074.        pron:proctyp);                              U:    MENU.TPU B:BSP_PLUS.PAS
  1075.       Fügt einen neuen Untermenüpunkt ein. Wenn neu belegt ist, bleibt das Menü
  1076.       offen und der Eintrag wird durch neu ersetzt. bei nochmaligem Aufruf wird
  1077.       wieder der Originaleintrag gesetzt. Beim Aufruf wird immer die Prozedur
  1078.       pron aufgerufen.
  1079.  
  1080.       procedure addsubmenuline;                    U:    MENU.TPU B:BSP_PLUS.PAS
  1081.       Fügt eine Unterteilungslinie im Untermenü ein.
  1082.  
  1083.       procedure delmenu;                           U:    MENU.TPU B:------------
  1084.       Löscht alle vorher gemachten Pulldownmenüeinträge. Das Menü kann neu
  1085.       definiert werden.
  1086.  
  1087.       procedure addlist(var fl,al:lsy;nam:str132); U:    MENU.TPU B:BSP_PLUS.PAS
  1088.       Fügt einer Listbox, die in den Variablen fl und al gespeichert ist einen
  1089.       neuen Eintrag name hinzu.al und fl müssen vorher mit dem Typ lsy
  1090.       deklariert werden.
  1091.  
  1092.       procedure dellist        (var fst,std:lsy);  U:    MENU.TPU B:BSP_PLUS.PAS
  1093.       Löscht alle Einträge der Listbox der Variablen fst und std.
  1094.  
  1095.       procedure addpopmenu(nam:str132;
  1096.        pron:proctyp);                              U:    MENU.TPU B:BSP_PLUS.PAS
  1097.       Fügt dem Popupmenü einen Eintrag hinzu.
  1098.  
  1099.       procedure delpopmenu;                        U:    MENU.TPU B:------------
  1100.       Löscht alle Popupmenüeinträge.
  1101.  
  1102.       procedure writestat(status:str132);          U:    MENU.TPU B:------------
  1103.       Schreibt den angegebenen Text in die Statuszeile.
  1104.  
  1105.       procedure runprogram(sp:proctyp;
  1106.        kopf,fuss:str132);                          U:    MENU.TPU B:BSP_PLUS.PAS
  1107.       Initialisiert zuerst den Bildschirm mit der Titelzeile kopf und der
  1108.       Fußzeile fuss; dann wird die Prozedur sp aufgerufen.
  1109.       Vorher sollte die Maus mit Mouseinit und Mouseon aktiviert werden.
  1110.  
  1111.       procedure waitevent(p:byte);                 U:    MENU.TPU B:------------
  1112.       Wartet auf ein Ereignis. Wenn p=1, dann ist das Pulldown-Menü aktiv, wenn
  1113.       p=0 nicht. p=2 wird für interne Zwecke gebraucht.
  1114.  
  1115.       procedure popup(tit:str132;px,py:byte);      U:    MENU.TPU B:BSP_PLUS.PAS
  1116.       aktiviert das popup-Menü mit den vorher definierten Einträgen an der
  1117.       Position px, py. Mit ESC wird das Menü abgebrochen. Das Pulldown-.Menü
  1118.       bleibt weiterhin aktivierbar.
  1119.  
  1120.       procedure closepopup;                        U:    MENU.TPU B:BSP_PLUS.PAS
  1121.       Schließt das Popup-Menü.
  1122.  
  1123.       procedure addlst(var fst,std:sttyp;x,y,anze,
  1124.        lae:byte;proc:proctype;fl,al:lsy);          U:    MENU.TPU B:BSP_PLUS.PAS
  1125.       Fügt dem Dialog der Variablen fst und std, die vorher beide mit dem Typ
  1126.       sttyp deklariert werden müssen an die Position x,y die listbox hinzu, die
  1127.       in den Variablen fl und al gespeichert ist. Die Listbox muß vorher mit
  1128.       addlist belegt werden. Anze bestimmt die Zeilenanzahl der Listbox und lae
  1129.       dir breite.Proc bestimmt die Prozedur, die immer aufgerufen wird, wenn ein
  1130.       neuer Eintrag in der Listbox gewählt wird.
  1131.  
  1132.       procedure addtext(var fst,std:sttyp;
  1133.        x,y:byte;name:string);                      U:    MENU.TPU B:BSP_PLUS.PAS
  1134.       Fügt dem Dialog der Variablen fst und std, die vorher beide mit dem Typ
  1135.       sttyp deklariert werden müssen einen statischen Text hinzu. Der Buchstabe
  1136.       nach ^ wird hervorgehoben.
  1137.  
  1138.       procedure addbutton(var fst,std:sttyp;x,y:
  1139.        byte;typ:byte;name:string;proc:proctyp);    U:    MENU.TPU B:BSP_PLUS.PAS
  1140.       Fügt dem Dialog einen Button hinzu. typ legt fest, ob er Button mit ESC
  1141.       oder ENTER aktiviert werden kann. Wenn ja dann muß typ mit entk, bzw. esck
  1142.       oder auch entk+esck definiert werden. Wenn nein, dann muß typ mit 0 belegt
  1143.       werden. proc legt die Prozedur fest, die beim aktivieren des Buttons
  1144.       aufgerufen werden soll. Nach dem beenden der Prozedur wird der Dialog
  1145.       weitergeführt.
  1146.  
  1147.       procedure addokbutton(var fst,std:sttyp;x,y:
  1148.        byte;typ:byte;name:string);                 U:    MENU.TPU B:BSP_PLUS.PAS
  1149.       Fügt einen Button hinzu, der nach dem aktivieren das Fenster schließt und
  1150.       alle Eingaben in den entsprechenden Variablen speichert.
  1151.  
  1152.       procedure addcancelbutton(var fst,std:sttyp;
  1153.        x,y:byte;typ:byte;name:string);             U:    MENU.TPU B:BSP_PLUS.PAS
  1154.       Fügt einen Button hinzu, der analog zu Addokbutton arbeitet, mit dem
  1155.       Unterschied, daß alle gemachten Eingaben im Dialog nicht gespeichert
  1156.       werden.
  1157.  
  1158.       procedure addinput(var fst,std:sttyp;var zs:
  1159.        zis;x,y,typ,lang,ul:byte;sez:soc);          U:    MENU.TPU B:BSP_PLUS.PAS
  1160.       Fügt dem Dialog eine Eingabezeile hinzu. Die zu editierende Variable muß
  1161.       vorher mit dem typ zis, der als ^string vereinbart ist, deklariert werden.
  1162.       Die übrigen variablen müssen gemäß der Prozedur Edline belegt werden
  1163.       Wichtig: Die Variablen vom Typ zis dürfen erst nach den addinput-Befehlen
  1164.       belegt werden. Nach dem Befehl deldialog sind die Variableninhalte
  1165.       gelöscht. Sie müssen daher vorher in andere Variablen übertragen werden.
  1166.       Beispiel:
  1167.       var edln:zis
  1168.       begin
  1169.        [...]
  1170.        addinput(fst,std,edln,1,1,normal,30,30,[#0]);
  1171.        [...]
  1172.        edln^:='';
  1173.        dialog([...]);
  1174.        writeln('Ergebnis: ',edln^);
  1175.       end.
  1176.  
  1177.       procedure deldialog(var fst,std:sttyp);      U:    MENU.TPU B:BSP_PLUS.PAS
  1178.       Löscht die Dialogdefinition der Variablen fst uns std. Danach kann ein
  1179.       neuer Dialog in den variablen definiert werden.
  1180.  
  1181.       function dialog(p:byte;x1,y1,x2,y2, wborder:
  1182.        byte;titel:string;VAR FST,std:sttyp):string;U:    MENU.TPU B:BSP_PLUS.PAS
  1183.       Führt den in den variablen std und fst gespeicherten Dialog aus. Wenn
  1184.       p=2, dann bleibt das Pulldown-Menü bei der Ausführung des Dialoges aktiv.
  1185.       x1,y1x,2,y2,wborder und titel siehe openwindow. Mit TAB, down und left
  1186.       (Nicht bei Eingabezeilen) kommt man ein Feld weiter mit SHIFT-TAB, UP und
  1187.       RIGHT ein Feld zurück. ALT+hervorgehobener Buchstabe oder nur Buchstabe
  1188.       (Nicht bei Eingabezeilen) aktiviert das entsprechende Element. Bei Text
  1189.       wird das nächste Element, daß kein Text ist aktiviert. Außerdem kann der
  1190.       gesamte Dialog mit der Maus gesteuert werden.
  1191.       Wichtig: Nach dem Ausführen des Dialoges muß die Dialogdefinition mit
  1192.       dem Befehl deldialog gelöscht werden. Damit wird dann auch der Speicher
  1193.       wieder freigegeben.
  1194.  
  1195.       procedure actualize      (std:sttyp);        U:    MENU.TPU B:------------
  1196.       Zeichnet das Dialogelement, das in der Variable std enthalten ist neu.
  1197.  
  1198.       procedure initscreen(kopf,fuss:str80);       U:    MENU.TPU B:------------
  1199.       Baut den gesamten Bildschirm mit allen Menüs und der angegebenen Kopf-
  1200.       und Fußzeile neu auf.
  1201.  
  1202.       3.12    Die Unit Bsdialog (Nur BS-Pascal-Toolbox 2.5+)
  1203.  
  1204.       Diese Unit liegt immer im Quelltext vor.
  1205.  
  1206.       Das Programm Makehelp
  1207.       Die Hilfedatei muß zuerst im ASCII-Format mit einem Editor erstellt
  1208.       werden und folgenden Aufbau haben:
  1209.       #[Stichwort1]
  1210.       Hilfetext zum Stichwort 1.
  1211.       Blablablablablablablablablablablablablablablablablablabla
  1212.       Blablablablablablablablablablablablablablablablablablabla
  1213.       Blablablablablablablablablablablablablablablablablablabla
  1214.       Blablablablablablablablablablablablablablablablablablabla
  1215.       #[Stichwort 2]
  1216.       Hilfetext zum Stichwort 2.
  1217.       Blablablablablablablablablablablablablablablablablablabla
  1218.       Blablablablablablablablablablablablablablablablablablabla
  1219.       Blablablablablablablablablablablablablablablablablablabla
  1220.       Blablablablablablablablablablablablablablablablablablabla
  1221.       [usw...]
  1222.       Um die Hilfedatei dann mit der Toolbox verwenden zu können, muß sie mit
  1223.       dem Programm Makehelp, das im Quellcode vorliegt konvertiert werden.
  1224.  
  1225.       Die Hilfsvariablen                           U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1226.       Die Variable helpfile muß zuerst mit der Hilfsdatei, die verwendet werden
  1227.       soll, belegt werden. Die Variable Topic muß mit dem Stichwort belegt
  1228.       werden, dessen Hilfstext beim nächsten Aufruf von Help angezeigt werden
  1229.       soll. Ist die Variable mit 'Index' belegt, wird der Index der Hilfsdatei
  1230.       angezeigt.
  1231.  
  1232.       Die Farbvariablen                            U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1233.       Belegung der Farbvariablen am besten mit function color (Unit screen)
  1234.       hwc Farbe der Dialogboxen der Prozeduren msgbox, yesno und inputbox.
  1235.       erc Farbe der Dialogboxen der Prozedur errorbox
  1236.  
  1237.       function  Filebox(tite:str132):pathstr;      U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1238.       Öffnet eine Dialogbox mit dem Titel tite zum Auswählen von Dateien. In
  1239.       der Liste werden immer die Dateien im aktuellen Verzeichnis angezeigt, die
  1240.       durch die Maske mask definiert werden. Mask ist eine global Variable, die
  1241.       vorher unbedingt belegt werden muß. Sollen alle Dateien angezeigt werden,
  1242.       muß mask den Inhalt "*.*" haben. Der Funktionsrückgabewert enthält den
  1243.       gewählten Dateinamen. Wurde der Dialog abgebrochen, gibt die Function
  1244.       einen Leerstring zurück.
  1245.  
  1246.       procedure msgbox  (msg:string);              U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1247.       Öffnet zentriert auf dem Bildschirm eine Dialogbox, die den Text msg
  1248.       anzeigt. Ein | im Text verursacht einen Zeilenumbruch.
  1249.  
  1250.       function  yesno   (msg:string):boolean;      U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1251.       Öffnet zentriert auf dem Bildschirm eine Dialogbox, die den Text msg
  1252.       anzeigt. Ein | im Text verursacht einen Zeilenumbruch. Wenn ja gewählt
  1253.       wurde, liefert die function true, ansonsten false.
  1254.  
  1255.       procedure errorbox(msg:string);              U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1256.       Wie msgbox, nur mit der Farbe erc.
  1257.  
  1258.       function inputbox(titel,msg:string;var
  1259.        edln:string;typ,la,ul:byte):boolean;        U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1260.       Öffnet zentriert auf dem Bildschirm eine Dialogbox, die den Text msg
  1261.       anzeigt. Ein | im Text verursacht einen Zeilenumbruch. edln gibt die
  1262.       Variable an, deren Inhalt editiert werden soll. die übrigen Variablen:
  1263.       siehe procedure edline (Unit Keyboard). Die Prozedur gibt true zurück,
  1264.       wenn die Dialogbox mit dem OK-Button geschlossen wurde, ansonsten false.
  1265.  
  1266.       procedure help;                              U:BSDIALOG.TPU B:BSP_PLUS.PAS
  1267.       Öffnet eine Hilfefenster mit dem Text, der dem Stichwort der Variablen
  1268.       topic in der Hilfsdatei der Variablen Helpfile folgt. Index zeigt einen
  1269.       Index aller Stichwörter der Hilfsdatei an. Zurück wählt das
  1270.       vorhergehende Thema.
  1271.  
  1272.  
  1273.       4.  Anhang
  1274.  
  1275.       4.1 ASCII-Zeichencodes
  1276.  
  1277.         0 ^@ │ 32    │ 64 @  │ 96 `  │128 Ç  │160 á  │192 └  │224 α
  1278.         1 ^A │ 33 !  │ 65 A  │ 97 a  │129 ü  │161 í  │193 ┴  │225 ß
  1279.         2 ^B │ 34 "  │ 66 B  │ 98 b  │130 é  │162 ó  │194 ┬  │226 Γ
  1280.         3 ^C │ 35 #  │ 67 C  │ 99 c  │131 â  │163 ú  │195 ├  │227 π
  1281.         4 ^D │ 36 $  │ 68 D  │100 d  │132 ä  │164 ñ  │196 ─  │228 Σ
  1282.         5 ^E │ 37 %  │ 69 E  │101 e  │133 à  │165 Ñ  │197 ┼  │229 σ
  1283.         6 ^F │ 38 &  │ 70 F  │102 f  │134 å  │166 ª  │198 ╞  │230 µ
  1284.         7 ^G │ 39 '  │ 71 G  │103 g  │135 ç  │167 º  │199 ╟  │231 τ
  1285.         8 ^H │ 40 (  │ 72 H  │104 h  │136 ê  │168 ¿  │200 ╚  │232 Φ
  1286.         9 TAB│ 41 )  │ 73 I  │105 i  │137 ë  │169 ⌐  │201 ╔  │233 Θ
  1287.        10 ^J │ 42 *  │ 74 J  │106 j  │138 è  │170 ¬  │202 ╩  │234 Ω
  1288.        11 ^K │ 43 +  │ 75 K  │107 k  │139 ï  │171 ½  │203 ╦  │235 δ
  1289.        12 ^L │ 44 ,  │ 76 L  │108 l  │140 î  │172 ¼  │204 ╠  │236 ∞
  1290.        13 RET│ 45 -  │ 77 M  │109 m  │141 ì  │173 ¡  │205 ═  │237 φ
  1291.        14 ^N │ 46 .  │ 78 N  │110 n  │142 Ä  │174 «  │206 ╬  │238 ε
  1292.        15 ^O │ 47 /  │ 79 O  │111 o  │143 Å  │175 »  │207 ╧  │239 ∩
  1293.        16 ^P │ 48 0  │ 80 P  │112 p  │144 É  │176 ░  │208 ╨  │240 ≡
  1294.        17 ^Q │ 49 1  │ 81 Q  │113 q  │145 æ  │177 ▒  │209 ╤  │241 ±
  1295.        18 ^R │ 50 2  │ 82 R  │114 r  │146 Æ  │178 ▓  │210 ╥  │242 ≥
  1296.        19 ^S │ 51 3  │ 83 S  │115 s  │147 ô  │179 │  │211 ╙  │243 ≤
  1297.        20 ^T │052 4  │ 84 T  │116 t  │148 ö  │180 ┤  │212 ╘  │244 ⌠
  1298.        21 ^U │ 53 5  │ 85 U  │117 u  │149 ò  │181 ╡  │213 ╒  │245 ⌡
  1299.        22 ^V │ 54 6  │ 86 V  │118 v  │150 û  │182 ╢  │214 ╓  │246 ÷
  1300.        23 ^W │ 55 7  │ 87 W  │119 w  │151 ù  │183 ╖  │215 ╫  │247 ≈
  1301.        24 ^X │ 56 8  │ 88 X  │120 x  │152 ÿ  │184 ╕  │216 ╪  │248 °
  1302.        25 <Y │ 57 9  │ 89 Y  │121 y  │153 Ö  │185 ╣  │217 ┘  │249 ∙
  1303.        26 ^Z │ 58 :  │ 90 Z  │122 z  │154 Ü  │186 ║  │218 ┌  │250 ·
  1304.        27 ESC│ 59 ;  │ 91 [  │123 {  │155 ¢  │187 ╗  │219 █  │251 √
  1305.        28 ^\ │ 60 <  │ 92 \  │124 |  │156 £  │188 ╝  │220 ▄  │252 ⁿ
  1306.        29 <] │ 61 =  │ 93 ]  │125 }  │157 ¥  │189 ╜  │221 ▌  │253 ²
  1307.        30 ^^ │ 62 >  │ 94 ^  │126 ~  │158 ₧  │190 ╛  │222 ▐  │254 ■
  1308.        31 ^_ │ 63 ?  │ 95 _  │127 DEL│159 ƒ  │191 ┐  │223 ▀  │255
  1309.  
  1310.       4.2 ASCII-Linienzeichen
  1311.  
  1312.       218 194 191  201 203 187  214 210 183  213 209 184
  1313.        ┌   ┬   ┐    ╔   ╦   ╗    ╓   ╥   ╖    ╒   ╤   ╕
  1314.  
  1315.       195 197 180  204 206 185  199 215 182  198 216 181
  1316.        ├   ┼   ┤    ╠   ╬   ╣    ╟   ╫   ╢    ╞   ╪   ╡
  1317.  
  1318.       192 193 217  200 202 188  211 208 189  212 207 190
  1319.        └   ┴   ┘    ╚   ╩   ╝    ╙   ╨   ╜    ╘   ╧   ╛
  1320.  
  1321.       179 196      186 205
  1322.        │   ─        ║   ═
  1323.