home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: InfoMgt / InfoMgt.zip / kim21.zip / KIM21.INF (.txt) < prev    next >
OS/2 Help File  |  1995-11-01  |  360KB  |  14,449 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Info ╨¬ber.. ΓòÉΓòÉΓòÉ
  3.  
  4. Online-Handbuch f╨ær Datenbankbefehle 
  5.  
  6.  1. KIM/2 Handuch 1.2
  7.  
  8.  
  9. ΓòÉΓòÉΓòÉ 2. Updates ab Version 2.1 ΓòÉΓòÉΓòÉ
  10.  
  11. Update Info
  12.  
  13. Sehr geehrter Anwender,
  14.  
  15. KIM wird stetig weiterentwickelt. An dieser Stelle werden ╨₧nderungen, die
  16. noch nicht in der Hauptbeschreibung fixiert sind, in Kurzform beschrieben.
  17. ╨₧nderungen werden nach einen halben Jahr aus dieser ╨¬bersicht entfernt,
  18. und in die Haupt╨æbersicht ╨æbernommen.
  19.  
  20. Darstellung der Variablen :
  21.  
  22. test,zeile     (numerisch)
  23. text$,test$    (zeichen)
  24.  
  25. -----------------------------------------------------------------------------
  26. September 1995
  27. -----------------------------------------------------------------------------
  28. L╨önge des Inhalts einer Zeichenkettenvariable von 256 Zeichen auf
  29. 512 Zeichen erh╨ñht.
  30. -----------------------------------------------------------------------------
  31. Bildschirmaufl╨ñsung ermitteln :
  32. -------------------------------
  33. get_display spalten,zeilen
  34. -----------------------------------------------------------------------------
  35. Verschl╨æsseln von Daten :
  36. -------------------------
  37. <Key> ist die Grundlage der Verschl╨æsselung und Entschl╨æsselung
  38.  
  39. Zeichenkette :
  40. crypt key$,text$
  41.  
  42. Zeichenketten-Array :
  43. crypt_array key$,arr$,start,ende
  44.  
  45. z.B. Verschl╨æsseln
  46.  
  47. text$="Dies ist ein Test" : key$="Mary"
  48. crypt key$,text$
  49.  
  50. F╨ær die Entschl╨æsselung benutzen Sie den gleichen <key$>
  51.  
  52. crypt key$,text$
  53. -----------------------------------------------------------------------------
  54. Zahlenvariablen werden bei Stringaddition in Strings umgewandelt !
  55.  
  56. a=5
  57. b=4
  58. text= a + "und" + b
  59.  
  60. -----------------------------------------------------------------------------
  61. Bestimmen der Mausposition
  62.  
  63. get_mouse_pos x,y
  64.  
  65. -----------------------------------------------------------------------------
  66. Multitasking mit KIM !
  67.  
  68. Sehen Sie hierf╨ær das Beispiel : NEW21A1.KIM
  69.  
  70. -----------------------------------------------------------------------------
  71. Die rechte Maustaste abfragen und ein Popup-Men╨æ an der Mausposition
  72. zeigen :
  73.  
  74.   modul mouse_right()
  75.  
  76.     deffloat x,y,dx,dy
  77.  
  78.     get_mouse_pos x,y
  79.  
  80.     rem "Pixel" eine neue Eigenschaft !!!
  81.  
  82.     def_popup_menu "pop",x,y;"pixel"
  83.  
  84.     def_popup_item "p1"," Programm beenden"
  85.     def_popup_item "p2"," Beep "
  86.     def_popup_item "p3"," Multitasking"
  87.     add_item "pop","p1","p2","p3"
  88.     win_paint "pop"
  89.  
  90.   endmod
  91.  
  92. -----------------------------------------------------------------------------
  93. Oktober 1995
  94. -----------------------------------------------------------------------------
  95. Neue Befehlsparameter f╨ær IGETREC_ARRAY
  96.  
  97. igetrec_array dbnr,flag,trenn$,_felder$,_arr$,start,ende,index1,... ;len1,...
  98.               ;_pos,op,indexnr,verglwert$
  99.  
  100. Eingabeparameter :
  101.  
  102. dbnr               Datenbank-Nr.
  103. flag               0=vorw╨örts / 1=r╨æckw╨örts bl╨öttern
  104. trenn$             Trennzeichen
  105. _felder$           Datenbankstruktur
  106. index1..n          Felder (Index)
  107. len1..n            L╨öngenangaben
  108. op                 Operator  0 entspricht =
  109.                              1 entspricht >
  110.                             -1 entspricht <
  111. indexnr            Entspricht dem Feld auf dem die Indexdatei existiert
  112.                    f╨ær den Vergleichswert <verglwert$>
  113.                    Wird die Indexnr als negativer Wert angegeben, erfolgt
  114.                    ein numerischer Vergleich.
  115. verglwert$         Vergleichswert f╨ær Auswertung
  116.  
  117. Ausgabeparameter :
  118.  
  119. _arr$              Datens╨ötze von <start> bis <ende>
  120. _pos               Array muss gleiche Gr╨ñ╤üe haben wie _arr$
  121.                    Positionen in der Datenbank f╨ær IGO_NR,..
  122.  
  123. Nun was kann man machen ? Mit IGETREC_ARRAY - Funktionen k╨ñnnen Sie eine
  124. selektive Auswahl von Datens╨ötze aus einer Datenbank holen.
  125. Zum Beispiel Sie m╨ñchten aus einer Kundendatenbank alle Kunden selektieren
  126. deren Kundennummer gr╨ñ╤üer, kleiner oder gleich 10000 ist.
  127. Daf╨ær ist es wichtig, da╤ü auf der Kundennummer ein Index besteht und
  128. der Index der aktive Index ist.
  129. Weiterhin m╨æssen Sie mit IREAD eine Positionierung durchf╨æhren, bevor
  130. Sie IGETREC_ARRAY benutzen.
  131.  
  132. Beispiel : Kunden < 20000
  133.  
  134. istart 1,_felder
  135. iread 1,ok,"     20000",_felder
  136. igetrec 1,_felder
  137. igetrec_array 1,0,"-",_felder,_arr,0,100,1,4,5,6 ;10,20,30,20;_pos,-1,-1,"20000"
  138.  
  139. Beispiel : Kunden > 10000
  140.  
  141. istart 1,_felder
  142. iread 1,ok,"     10001",_felder
  143. igetrec 1,_felder
  144. igetrec_array 1,0,"-",_felder,_arr,0,100,1,4,5,6 ;10,20,30,20;_pos, 1,-1,"10000"
  145.  
  146. Beispiel : Kunden = 10000
  147.  
  148. istart 1,_felder
  149. iread 1,ok,"     10000",_felder
  150. igetrec 1,_felder
  151. igetrec_array 1,0,"-",_felder,_arr,0,100,1,4,5,6 ;10,20,30,20;_pos, 0,-1,"10000"
  152.  
  153.  
  154. Bei diesen Vergleichen ist folgendes zu beachten : In der Datenbank ist das
  155. Indexfeld ein Charakterfeld. F╨ær den Vergleich werden die Werte in Zahlen
  156. gewandelt, da die Indexnr. als negativer Wert angegeben ist.
  157.  
  158. -----------------------------------------------------------------------------
  159. L╨ñschen einer Zeile in einer Tabelle :
  160. DEL_TABLE_REC "table_id"
  161.  
  162. L╨ñscht eine Zeile aus einer Tabelle, dabei wird das verkn╨æpfte Datenarray
  163. auch korrigiert.
  164. -----------------------------------------------------------------------------
  165.  
  166.  
  167. ΓòÉΓòÉΓòÉ 3. Hinweise zur Probierversion ΓòÉΓòÉΓòÉ
  168.  
  169. Probierversion
  170.  
  171. Allgemeines
  172.  
  173. Falls Sie die KIM Testversion bestellt haben, ist der folgende Abschnitt f╨ær Sie.
  174.  
  175. Sehr geehrter Tester,
  176.  
  177. KIM ist eine leistungsf╨öhige Programmiersprache f╨ær OS/2, DOS und Windows.
  178. In der Orginalversion wird ein 400 seitiges deutsches Handbuch mitgeliefert.
  179. Das Handbuch f╨æhrt anhand mehrerer Beispiele in die Programmierung von KIM ein.
  180. F╨ær den erfahrenen Programmierer steht ein ausf╨æhrlicher Referenzteil
  181. zu Verf╨ægung. Weiterhin erhalten Sie ein lizenzfreies Runtime-Kit um ihre
  182. Programme an Dritte weiterzugeben.
  183. F╨ær den elektronischen Support bieten wir eine Mailbox an.
  184.  
  185. Der Preis f╨ær die Testversion wird auf den Preis der Orginalversion angerechnet.
  186.  
  187. KIM erhalten Sie bei :
  188.  
  189.   EDV-B╨æro Kohlenbach
  190.   Hauptstr. 5
  191.  
  192.   90547 Stein
  193.  
  194.   Tel. 0911 - 68894-01 (10 - 15 Uhr)
  195.   Fax. 0911 - 68894-03
  196.  
  197.   oder
  198.  
  199.   Software Gibson
  200.  
  201.   Tel. 09183 - 40052
  202.   Fax. 09183 - 242
  203.  
  204.  
  205. ΓòÉΓòÉΓòÉ 4. Der Editor ΓòÉΓòÉΓòÉ
  206.  
  207. Der Editor
  208.  
  209. Allgemeine Hinweise
  210. Der  KIM-Editor  ist ein kleines Textverabeitungsprogramm,  mit
  211. dessen  Hilfe  Sie den Code f╨ær Ihre KIM-Programme  entwickeln,
  212. schreiben  und speichern k╨ñnnen. Selbstverst╨öndlich besitzt  er
  213. nicht  die  umfangreichen Optionen eines Systems wie Word  oder
  214. Star  Writer. Vielmehr ist dieser Editor speziell auf  die  bei
  215. der    Programmierung   mit   KIM   auftretenden    Bed╨ærfnisse
  216. zugeschnitten.  Neben  normalen  Funktionen  wie  Ausschneiden,
  217. Kopieren  und  Einf╨ægen von Text stehen besondere Optionen  wie
  218. die   Aktivierung  des  KIM-Debuggers  oder  der  Aufruf  einer
  219. Labeltabelle zur Verf╨ægung.
  220. Der  KIM-Editor  entspricht in seiner Bedienung  den  Standard-
  221. Editoren der entsprechenden Betriebssysteme (also MS-Write oder
  222. OS/2-Systemeditor) und sollte Ihnen deshalb gel╨öufig sein.  Wir
  223. wollen  hier nur auf die notwendigsten Grundlagen eingehen  und
  224. verweisen Sie auf die Handb╨æcher zu Ihren Betriebssystemen.
  225.  
  226.  
  227. Aufruf
  228.  
  229. Unter OS/2 :
  230. ╨⌐ffnen Sie den Ordner "KIM Datenbanksystem" und klicken Sie
  231. auf das Symbol : KIM-Editor.
  232.  
  233. Unter DOS :
  234. Wechseln Sie in das Verzeichnis KIMxx mit:
  235.  
  236. cd KIMxx (dann Enter-Taste dr╨æcken)
  237.  
  238. Dies ist nicht notwendig, falls Sie in der Datei "Autoexec.bat"
  239. eine  Pfadzuweisung PATH=\KIMxx angegeben wurde. Rufen Sie  nun
  240. den Editor auf:
  241.  
  242. KE (dann Enter-Taste dr╨æcken)
  243.  
  244. Es erscheint der KIM-Editor auf Ihrem Monitor:
  245.  
  246. Bereits vom ╨öu╤üerlichen her gleicht dieser Editor ziemlich  den
  247. Standardeditoren der jeweiligen Betriebssysteme. Mit Hilfe  des
  248. Systembuttons   links   oben   k╨ñnnen   Sie   die   Gr╨ñ╤üe   der
  249. Programmoberfl╨öche  ver╨öndern, zu anderen  Programmen  wechseln
  250. oder  das Programm beenden (vgl. auch das Kapitel ╨æber  Fenster
  251. und    Programmoberfl╨öchen).   Der   Maximierungs-   und    der
  252. Minimierungsbutton rechts oben erlauben die Vollbild- bzw.  die
  253. Symboldarstellung des Programmes. ╨¬ber die Scrollbars  kann  im
  254. Eingabefenster vorhandener Text durch das Fenster  gerollt  und
  255. somit vollst╨öndig eingesehen werden. In der Meldezeile wird der
  256. Name der jeweils geladenen Datei angezeigt. Haben Sie bei einer
  257. Neuerstellung  einer Datei noch keine Speicherung  vorgenommen,
  258. erscheint hier der Name "Noname.kim".
  259.  
  260. Texteingabe
  261.  
  262. Sie  geben den Text in das Eingabefenster ein. Bewegen Sie dazu
  263. den Mauscursor in dieses Fenster und klicken Sie mit der linken
  264. Maustaste einmal. Es erscheint ein Eingabezeichen links oben im
  265. Fenster.  Nun  k╨ñnnen Sie ganz normal Text  ╨æber  die  Tastatur
  266. eingeben.
  267. Um  einen  geschriebenen  Text  zu  bearbeiten,  mu╤ü  er  zuvor
  268. markiert   werden.  Dies  gelingt  durch  Dr╨æcken  der   linken
  269. Maustaste   und   Hinwegbewegen  des   Mauscursors   ╨æber   den
  270. gew╨ænschten Text oder durch Dr╨æcken der SHIFT-Taste und Bewegen
  271. des Cursors mittels der Cursortasten (Pfeiltasten).
  272. Ein  markierter Text kann durch Bet╨ötigen der Tastenkombination
  273. STRG+X  ausgeschnitten werden. Mit STRG+V f╨ægen Sie einen  Text
  274. aus  dem Zwischenspeicher wieder an der Cursorposition  in  den
  275. Text ein. Mit STRG+C wird ein markierter Text kopiert.
  276.  
  277.  
  278. Men╨æ Datei
  279.  
  280. Im   Men╨æ   Datei   finden  Sie  Optionen  zur   Neuerstellung,
  281. Speicherung und zum Laden von Dateien. Zus╨ötzlich ist hier eine
  282. Option zum Beenden des Programmes enthalten.
  283. Durch  Aktivieren  des Men╨æpunktes NEU wird eine  eventuell  im
  284. Editierfenster  vorhandene  Datei  entfernt  und   somit   eine
  285. Neuerstellung einer Datei m╨ñglich. Daher erfolgt zun╨öchst  eine
  286. Abfrage,  ob  Sie die alte Datei speichern m╨ñchten,  bevor  der
  287. Inhalt des Editierfensters gel╨ñscht wird.
  288. Mit  dem  Befehl LADEN k╨ñnnen Sie eine bereits vorhandene  KIM-
  289. Datei in den Editor holen. Es erscheint ein Auswahlfenster,  in
  290. welchem  Sie  den  Namen  und den Pfad  der  gew╨ænschten  Datei
  291. angeben  k╨ñnnen.  Durch Best╨ötigung (Klick auf  den  OK-Button)
  292. wird die Datei geladen.
  293. Sie   besitzen  zwei  M╨ñglichkeiten  der  Textspeicherung.  Mit
  294. SPEICHERN   f╨æhren  Sie  eine  Schnellspeicherung  durch.   KIM
  295. verwendet   hierbei   als  Dateinamen   den   im   Meldefenster
  296. vorgegebenen.  Haben Sie die Datei zuvor noch nie  gespeichert,
  297. erh╨ölt  sie  dadurch den Namen "Noname.kim". Einen neuen  Namen
  298. k╨ñnnen  Sie  einer  Datei  beim  Aufruf  von  SPEICHERN   UNTER
  299. verleihen.   In   diesem   Falle   ╨ñffnet   sich   wieder   ein
  300. Auswahlfenster, in welchem Sie Pfad und Verzeichnis  der  Datei
  301. selektieren k╨ñnnen.
  302. Wenn  Sie den Editor verlassen m╨ñchten, rufen Sie QUIT auf.  Es
  303. erscheint  noch  eine  Abfrage, ob  Sie  den  Editor  verlassen
  304. m╨ñchten.  Durch  Bet╨ötigen  des OK-Buttons  wird  das  Programm
  305. beendet.
  306.  
  307. Men╨æ Bearbeiten
  308.  
  309. In  diesem Men╨æ finden Sie Optionen zum Suchen und Tauschen von
  310. Textbegriffen.
  311. Wenn  Sie  den Befehl SUCHEN aktivieren, ╨ñffnet sich  ein
  312. Abfragefenster.
  313.  
  314. Dort geben Sie den zu suchenden Begriff ein und best╨ötigen Ihre
  315. Wahl  durch  Dr╨æcken  des  OK-Buttons.  KIM  springt  dann   im
  316. Editierfenster  zu der Position, an welcher sich  der  gesuchte
  317. Begriff befindet.
  318. Bei  der  Wahl  der Option TAUSCHEN ╨ñffnet sich  ein  ╨öhnliches
  319. Fenster,  welches  aber  zus╨ötzlich  noch  ein  Feld  mit   der
  320. Bezeichnung "Ersetzen durch" beinhaltet.
  321.  
  322. Geben Sie im Feld "Suchtext" den zu tauschenden Begriff vor und
  323. im  Feld "Ersetzen durch" den Begriff, welcher daf╨ær eingesetzt
  324. werden soll. Nach Dr╨æcken des OK-Buttons wird im gesamten  Text
  325. der entsprechende Tausch vorgenommen.
  326.  
  327. Men╨æ Start
  328.  
  329. Wenn  Sie  mit  der  Maus diesen Punkt anw╨öhlen,  wird  der  im
  330. Editierfenster   vorhandene   Quellcode   vom   KIM-Interpreter
  331. verarbeitet  und das ╨æber diesen Sourcecode erstellte  Programm
  332. ausgef╨æhrt.  Vor Aufruf dieses Befehls sollten Sie  ihre  Datei
  333. sichern, da es bei Programmfehlern zu einem Absturz des Editors
  334. und  damit  zu  einem Datenverlust kommen kann.  Ist  das  ╨æber
  335. diesen   Befehl   gestartete  Programm  beendet,   kehren   Sie
  336. automatisch zum Editor zur╨æck.
  337.  
  338. Men╨æ Optionen
  339.  
  340. In  diesem Men╨æ finden Sie eine Anweisung, welche Ihnen bei der
  341. Aufsp╨ærung  von Fehlern in Ihrem Programmcode hilft.  Wenn  Sie
  342. die   Option  FEHLERANALYSE  w╨öhlen,  untersucht  KIM  den   im
  343. Editierfenster     vorhandenen     Code     selbst╨öndig     auf
  344. Verschachtelungsfehler bei IF-ENDIF- und FOR-NEXT-Schleifen. Es
  345. wird  ╨æberpr╨æft,  ob zu jedem IF das zugeh╨ñrige  ENDIF  und  zu
  346. jedem  FOR  das entsprechende NEXT vorhanden ist. Entdeckt  das
  347. Programm   dabei   einen  Fehler,  werden   Sie   mit   genauer
  348. Zeilenangabe darauf hingewiesen.
  349.  
  350. Labeltabelle
  351.  
  352. Mit  diesem Befehl ist es Ihnen m╨ñglich, sich schnell in  einem
  353. Programmcode   zu  bewegen.  Bei  Aktivierung   erscheint   ein
  354. Auswahlmen╨æ mit allen im Text definierten Modulen.  Sie  k╨ñnnen
  355. durch  Selektieren eines gew╨ænschten Modulnamens ╨æber Mausklick
  356. sofort   zur Position im Programmcode springen, an welcher  das
  357. Modul  definiert  ist. Das Auswahlfenster schlie╤üt  sich  dabei
  358. automatisch.
  359.  
  360.  
  361. ΓòÉΓòÉΓòÉ 5. Der Maskengenerator ΓòÉΓòÉΓòÉ
  362.  
  363. Der Maskengenerator
  364.  
  365. Mit  dem  bisher in diesem Kapitel erlernten sind Sie jederzeit
  366. in    der    Lage,    Programmoberfl╨öchen   mit   vollst╨öndigen
  367. Eingabefeldern  auszustatten.  Sicher  sind  Ihnen  dabei  aber
  368. einige  Dinge aufgefallen, die die Erzeugung dieser Oberfl╨öchen
  369. alles  andere als bedienerfreundlich machen. So m╨æssen Sie  bei
  370. der   Definition   der   einzelnen  Objekte   im   Programmcode
  371. bekanntlich  die  genaue  Position  derselben  im  zugewiesenen
  372. Fenster festlegen. Dies ist aber gar nicht so einfach,  da  Sie
  373. hierf╨ær mit einer recht unanschaulichen Ma╤üeinheit (Zeichen pro
  374. Zeile)  jonglieren m╨æssen. Bis das Ergebnis auf dem  Bildschirm
  375. zu   Ihrer  Zufriedenheit  ausf╨öllt,  d╨ærften  mehrere  Anl╨öufe
  376. notwendig sein.
  377. Eine  M╨ñglichkeit,  die  einzelnen Objekte  graphisch  auf  dem
  378. Monitor  zu  definieren  w╨öre dabei nat╨ærlich  sehr  hilfreich.
  379. Deswegen  steht  Ihnen  im  KIM-Editor  ein  ╨öu╤üerst  m╨öchtiges
  380. Utensil zur Verf╨ægung, der Maskengenerator. Mit Ihm k╨ñnnen  Sie
  381. auf graphischen Wege eine Programmoberfl╨öche mit Eingabefeldern
  382. und   zus╨ötzlichen  Objekten  definieren  und  automatisch  den
  383. entsprechenden Programmcode daf╨ær erzeugen lassen.
  384.  
  385. Starten
  386.  
  387. Um  den Maskengenerator zu starten, geben Sie auf der DOS- oder
  388. OS/2-Ebene nach dem Promptzeichen ein:
  389.  
  390. KIM KMASK
  391.  
  392. oder
  393.  
  394. Starten Sie den Editor und w╨öhlen den Men╨æpunkt Maskengenerator.
  395.  
  396.  
  397.  
  398. Die Men╨æleiste
  399. Im  oberen Teil des Bildschirms erkennen Sie die Men╨æleiste des
  400. Maskengenerators.  Sie  k╨ñnnen zwischen  den  Punkten  "Datei",
  401. "Objekt_neu",  "Bearbeiten" und "Code" w╨öhlen. Einen  Men╨æpunkt
  402. w╨öhlen  Sie  aus, indem Sie den Mauszeiger auf den  gew╨ænschten
  403. Befehl bewegen und die linke Maustaste dr╨æcken. Es ╨ñffnet  sich
  404. dann  ein  Pull-Down-Men╨æ bzw. wird der Befehl Code ausgef╨æhrt.
  405. Optional  gelingt die Aktivierung ╨æber die Tastatur,  wenn  Sie
  406. die  ALT-Taste  gleichzeitig mit dem im Befehl  unterstrichenen
  407. Buchstaben  dr╨æcken, also z.B. ALT + D, um das Men╨æ "Datei"  zu
  408. Фffnen.
  409.  
  410.  
  411. Das Men╨æ Datei
  412. Im  Men╨æ  Datei befinden sich folgende Befehle: "Neu", "Laden",
  413. "Speichern", "Speichern unter" und "Quit". Diese Befehle lassen
  414. sich  durch  Klick mit der linken Maustaste auf die  gew╨ænschte
  415. Anweisung  aktivieren. Mit der Tastatur f╨æhren Sie die  Befehle
  416. durch  gleichzeitiges Dr╨æcken der SHIFT-Taste und  des  jeweils
  417. unterstrichenen Buchstaben im Befehlswort aus, z.B. beenden Sie
  418. den Maskengenerator durch Dr╨æcken von SHIFT + Q.
  419.  
  420. Neu :
  421. Wenn  sie  den  Befehl "Neu" aktivieren, wird  der  Inhalt  des
  422. Editors   gel╨ñscht,  und  Sie  k╨ñnnen  eine  neue  Programmaske
  423. erstellen. Falls Sie gerade eine andere Maske bearbeitet haben,
  424. fragt   das  Programm  vor  dem  L╨ñschen,  ob  die  alte  Maske
  425. gespeichert werden soll oder nicht.
  426.  
  427. Laden:
  428. Sie bekommen als m╨ñgliche ladbare Dateien alle Files angeboten,
  429. die   die   Endung   *.msk  besitzen  und  im  Startverzeichnis
  430. C Es ist aber
  431. selbstverst╨öndlich m╨ñglich, Dateien aus anderen  Verzeichnissen
  432. zu  laden. Sie k╨ñnnen das aktuelle Verzeichnis durch Klick  auf
  433. die  beiden  Punkte (entspricht dem DOS-Befehl  cd..)  im  Feld
  434. "Dateien" wechseln. Klicken Sie auf die gew╨ænschte Datei. Diese
  435. erscheint  dann im Feld "Datei/Pfad" und ist somit  selektiert.
  436. Durch  Klick  auf  die OK-Taste wird sie in den Maskengenerator
  437. geladen.  Ein Klick auf den ABBRUCH-Button bringt  Sie  in  das
  438. Hauptmen╨æ zur╨æck, ohne da╤ü eine Datei geladen wurde.
  439.  
  440. Speichern:
  441. Eine   bearbeitete   Datei  kann  mit   Hilfe   dieser   Option
  442. schnellgespeichert werden. Wenn Sie den Befehl  ╨æber  Mausklick
  443. oder  durch  Dr╨æcken von SHIFT + S aktivieren,  erfolgt  sofort
  444. eine   Speicherung  der  Datei  ohne  weitere  R╨æckfrage.   Als
  445. Dateiname  wird  derjenige verwendet,  der  in  der  Meldezeile
  446. unterhalb  der Men╨æleiste aufgef╨æhrt ist. Haben Sie noch  keine
  447. Speicherung  vorher durchgef╨æhrt, erh╨ölt die  Datei  den  Namen
  448. "Noname.kim".
  449.  
  450. Speichern unter:
  451. Mit  dieser  Option k╨ñnnen Sie eine Datei mit einem  beliebigen
  452. Namen  in  einem beliebigen Verzeichnis speichern.  Der  Befehl
  453. l╨ö╤üt   sich   durch  Mausklick  darauf  oder  mit   Hilfe   der
  454. Tastenkombination  SHIFT + U aufrufen. Es  erscheint  ein
  455. Meldungsfenster.
  456. Best╨ötigen  Sie  die Meldung mit OK (Mausklick  darauf,  ENTER-
  457. Taste  oder  "O" dr╨æcken), dann erscheint das bereits  von  dem
  458. Befehl   "Laden"  bekannte  Untermen╨æ.  W╨öhlen  Sie  wie   dort
  459. beschrieben das gew╨ænschte Zielverzeichnis aus und geben Sie in
  460. das  Feld Datei/Pfad den zuk╨ænftigen Dateinamen ein. Sind  alle
  461. Eingaben  zu Ihrer Zufriedenheit get╨ötigt, best╨ötigen  Sie  mit
  462. "OK". Sie k╨ñnnen das Untermen╨æ jederzeit mit ABBRUCH (Mausklick
  463. darauf  oder ESC-Taste dr╨æcken) verlassen. Dann wird allerdings
  464. keine   Speicherung  vorgenommen.
  465.  
  466. Quit:
  467. Wenn Sie den Maskengenerator verlassen m╨ñchten, klicken Sie mit
  468. der  Maus den Befehl QUIT an. Optional l╨ö╤üt die Anweisung  sich
  469. mit  der  Tastenkombination SHIFT + Q aktivieren. Es wird  dann
  470. nachgefragt,  ob Sie tats╨öchlich den Maskengenerator  verlassen
  471. wollen.
  472. Wenn  Sie  den  Maskengenerator noch nicht  verlassen  m╨ñchten,
  473. bringt  Sie  der Button "ABBRUCH" ohne weitere Konsequenzen  in
  474. das Programm zur╨æck. Best╨ötigen Sie Ihre Entscheidung mit "OK",
  475. so verlassen Sie den Maskengenerator.
  476.  
  477. Erstellen von Objekten
  478. Beim  Aufruf  des  Maskengenerators erscheint  das  eigentliche
  479. Editierfeld  v╨ñllig  leer und bereit  f╨ær  Ihre  Eingaben.  Das
  480. Editierfeld   wird   sp╨öter   bei   der   Codeerstellung    als
  481. Programmfenster   verwendet,  in  welches   alle   anderen   zu
  482. definierenden Objekte eingef╨ægt werden.
  483. Ein  Aufruf  des Men╨æs OBJEKT_NEU zeigt Ihnen eine Liste  aller
  484. Oberfl╨öchenobjekte,   die   mit  Hilfe   des   Maskengenerators
  485. definiert werden k╨ñnnen:
  486.  
  487. Feldname:
  488. Es wird  eine  Feldbezeichnung erstellt (entspricht  dem Befehl
  489. DEF_PROMPT).
  490.  
  491. String:
  492. Es  wird  ein  allgemeines   Eingabefeld   erstellt (entspricht
  493. dem Befehl DEF_STRING).
  494.  
  495. Datum:
  496. Es   wird   ein   Datumsfeld  erstellt   (entspricht
  497. DEF_INPUT_DATE).
  498.  
  499. Zeit:
  500. Es wird  ein  Zeitfeld  erstellt   (entspricht DEF_INPUT_TIME).
  501.  
  502. Text:
  503. Es   wird  ein   Textfeld   erstellt     (entspricht DEF_TEXT).
  504.  
  505. Gruppe:
  506. Ein Gruppenobjekt wird  definiert  (analog zu  der  bei Fenster
  507. und    Programmoberfl╨öchen    besprochenen.
  508.  
  509. Push-Button:
  510. Ein    Push-Button  wird    erzeugt    (entspricht DEF_BUTTON).
  511.  
  512. Radio-Button:
  513. Ein Radiobutton wird definiert (dies  entspricht dem Befehl
  514. DEF_BUTTON mit dem FLAG "RADIO").
  515.  
  516. Checkbox:
  517. Ein  Checkbox-Button  wird erzeugt (dies entspricht  dem Befehl
  518. DEF_BUTTON mit dem FLAG "CHECKBOX").
  519.  
  520. Wenn Sie eines dieser Objekte durch Mausklick darauf (oder  mit
  521. der ENTER-Taste nach Positionierung des Aktivierungsbalkens auf
  522. das   Objekt)  ausw╨öhlen,  erscheint  dieses  links  unten   im
  523. Editierfenster des Maskengenerators:
  524.  
  525.  
  526. Bearbeiten von Objekten
  527. Nat╨ærlich ist die Erzeugung eines Maskenobjektes nur der  erste
  528. Schritt.  Die  Objekte m╨æssen nun an die richtige  Position  im
  529. Fenster gesetzt und gegebenenfalls ver╨öndert werden.
  530. Verschieben eines Objekts
  531. Ein  Objekt  l╨ö╤üt sich verschieben, indem Sie  mit  der  linken
  532. Maustaste in das Objekt klicken, diese gedr╨æckt halten und  das
  533. Objekt  zum neuen Standort auf dem Bildschirm ziehen. Wenn  Sie
  534. die  linke Maustaste loslassen, rastet das Objekt an der  neuen
  535. Position  ein.  Um  das Objekt endg╨æltig an einer  Position  zu
  536. fixieren  und versehentliches Verschieben zu vermeiden,  w╨öhlen
  537. Sie   aus  dem  Men╨æ  BEARBEITEN  den  Befehl  "Fixieren"   aus
  538. (Mausklick darauf oder durch Dr╨æcken der Tasten SHIFT + F). Das
  539. Objekt kann dann nicht mehr bearbeitet werden.
  540. Diese Fixierung l╨ö╤üt sich durch die Anweisung "Position neu" im
  541. Men╨æ  BEARBEITEN  wieder  r╨æckg╨öngig machen.  Haben  Sie  diese
  542. Option  mittels  Mausklick  oder Tastenkombination  SHIFT  +  P
  543. aktiviert,   l╨ö╤üt  sich  das  Objekt  wieder  verschieben   und
  544. bearbeiten.
  545.  
  546. Gr╨ñ╤üen╨önderung eines Objekts
  547.  
  548. Sie  klicken den Rand des Objekts mit der linken Maustaste  an,
  549. halten  diese  gedr╨æckt und ziehen den Rand in  die  gew╨ænschte
  550. Richtung.  Das  Objekt beginnt sich nun zu vergr╨ñ╤üern  oder  zu
  551. verkleinern.
  552.  
  553. L╨ñschen eines Objekts
  554.  
  555. W╨öhlen Sie das entsprechende Objekt durch einen Doppelklick mit
  556. der  linken Maustaste darauf aus. Anschlie╤üend  aktivieren  Sie
  557. die  Option "L╨ñschen" aus dem Men╨æ BEARBEITEN (durch  Mausklick
  558. darauf  oder  mit SHIFT + L). Haben Sie das Objekt zuvor  nicht
  559. aktiviert,  erhalten Sie eine Fehlermeldung mit der Mitteilung,
  560. da╤ü der Befehl nicht durchf╨æhrbar ist.
  561. ╨₧nderung der Objekteigenschaften
  562. Das   mit   OBJEKT_NEU  definierte  Objekt  wird  standardm╨ö╤üig
  563. erstellt. Nat╨ærlich k╨ñnnen Sie dieses Objekt im Maskengenerator
  564. noch individuell gestalten.
  565. Sobald  Sie  ein  Objekt  erstellt  haben,  erscheint  es   als
  566. rechteckiger  Kasten  links unten im Editierfenster.  Innerhalb
  567. des   Objekts   befindet   sich   die   ID-Kennung,   die   vom
  568. Maskengenerator  routinem╨ö╤üig aus der Art des Objekts  und  der
  569. aktuellen Objektzahl gebildet wird. Haben Sie z.B. als  drittes
  570. Objekt  ein Datumsfeld definiert, so erh╨ölt dieses die  Kennung
  571. "Datum3".
  572. Betrachten  Sie  die  Combobox rechts in der  Meldezeile.  Dort
  573. finden  Sie  nun  ebenfalls die ID-Kennung des  neu  erstellten
  574. Objekts. Dieser Combobox kommt nun eine besondere Bedeutung bei
  575. der  ╨₧nderung von Objekteigenschaften zu. M╨ñchten Sie an  einem
  576. Objekt  Ver╨önderungen  vornehmen, so ╨ñffnen  Sie  die  Combobox
  577. durch einen Mausklick auf den Pfeil rechts von der Box. In  der
  578. Combobox finden Sie die ID-Kennungen aller definierten Objekte.
  579. Klicken  Sie auf die Kennung des entsprechenden Objekts.  Diese
  580. erscheint  nun  auf als aktives Objekt oben  in  der  Combobox.
  581. Gleichzeitig  ╨ñffnet sich ein Untermen╨æ, das ╨₧nderungen  dieses
  582. Objekts erlaubt.
  583.  
  584. Im   Feld  "ID-Kennung"  finden  Sie  die  vom  Maskengenerator
  585. routinem╨ö╤üig  erstellte Bezeichnung f╨ær das definierte  Objekt.
  586. Sie k╨ñnnen diese ╨öndern, indem Sie den alten Text markieren und
  587. durch Dr╨æcken der ENTF-Taste l╨ñschen. Nun ist das Feld f╨ær  die
  588. Eingabe einer neuen Bezeichnung frei. Beachten Sie aber  bitte,
  589. da╤ü  Sie  unbedingt  eine  ID-Kennung f╨ær  das  Objekt  angeben
  590. m╨æssen, sonst kann der Programmcode f╨ær die Maske nicht korrekt
  591. erstellt werden.
  592. Im  n╨öchsten Feld "Inhalt" k╨ñnnen Sie nach Wahl dem Objekt eine
  593. zus╨ötzliche  Bezeichnung bzw. einen Vorgabetext  verleihen  (je
  594. nach  Art  des  Objekts;  Buttons  und  Gruppen  erhalten  eine
  595. Zusatzbezeichnung, Felder einen Vorgabetext).  Eine  Eintragung
  596. in  dieses Feld ist aber nicht zwingend erforderlich. Geben Sie
  597. nichts  an, wird im Programmcode an der entsprechenden Position
  598. ein  Leerstring  ╨æbergeben. Im Editierfeld des Maskengenerators
  599. erscheint nun im entsprechenden Objekt statt der ID-Kennung der
  600. hier eingegebene Inhalt.
  601. Die  beiden  langen freien Felder sind f╨ær die  Definition  von
  602. zus╨ötzlichen Eigenschaften des Objekts vorgesehen. Diese k╨ñnnen
  603. Sie  wie bereits besprochen ╨æber FLAGS definieren. Einige FLAGS
  604. sind  bereits in diesem Untermen╨æ aufgef╨æhrt. Eine vollst╨öndige
  605. Liste  aller  in KIM verf╨ægbaren FLAGS finden Sie im  Abschnitt
  606. "Fenster und Programmoberfl╨öchen".
  607. Geben Sie die gew╨ænschten FLAGS wie gezeigt in Anf╨æhrungs-  und
  608. Schlu╤üzeichen  ein.  M╨ñchten  Sie  mehrere  FLAGS   definieren,
  609. trennen Sie diese voneinander durch Kommata.
  610. Haben   Sie  die  Objekteigenschaften  zu  Ihrer  Zufriedenheit
  611. ver╨öndert,  beenden  Sie  das Untermen╨æ  "Eigenschaften"  durch
  612. Mausklick auf den Button "Schlie╤üen".
  613.  
  614.  
  615.  
  616. Erstellen des Programmcodes
  617. Wenn   Sie   die  vollst╨öndige  Programmaske  mit   Hilfe   des
  618. Maskengenerators  erstellt haben, besteht  der  letzte  Schritt
  619. darin,  den dazugeh╨ñrigen Programmcode zu erzeugen.  Auch  dies
  620. ╨æbernimmt der Maskengenerator selbst╨öndig f╨ær Sie.
  621. Klicken Sie in der Men╨æleiste den Befehl CODE an. Analog k╨ñnnen
  622. Sie durch Dr╨æcken der Tastenkombination ALT + C diese Anweisung
  623. aktivieren.  Es  ╨ñffnet sich das bereits vom Befehl  Laden  her
  624. bekannte   Untermen╨æ,  in  welchem  Sie  den   Namen   der   zu
  625. speichernden  Datei sowie das Verzeichnis,  in  das  die  Datei
  626. geschrieben  werden soll, angeben k╨ñnnen. Sind  Sie  mit  Ihren
  627. Angaben zufrieden, klicken Sie auf den OK-Button. Der die Maske
  628. beschreibende  Code wird daraufhin erstellt.  Ist  der  Vorgang
  629. beendet, kehren Sie zum Maskengenerator zur╨æck, wo Sie  weitere
  630. Eingaben t╨ötigen oder mit QUIT das Programm beenden k╨ñnnen.
  631.  
  632.  
  633.  
  634. Bearbeiten des Codes
  635. Nat╨ærlich  kann  der Maskengenerator nicht einen  vollst╨öndigen
  636. Code  f╨ær  eine ganze Programmoberfl╨öche erzeugen. So  besitzen
  637. Sie keine M╨ñglichkeit, Men╨æleisten, Toolbars oder ╨öhnliches mit
  638. dem  Maskengenerator  zu  definieren. Diese  ╨₧nderungen  m╨æssen
  639. nachtr╨öglich "per Hand" eingegeben werden. Des weiteren  werden
  640. die  zu  den  Feldern  geh╨ñrenden Variablen  nicht  selbst╨öndig
  641. generiert.  Diese  m╨æssen nachtr╨öglich in  den  Code  eingef╨ægt
  642. werden.
  643. Laden Sie hierzu die mit dem Maskengenerator erstellte Datei in
  644. den   normalen  KIM-Editor  und  ╨öndern  Sie  den  Programmcode
  645. entsprechend.
  646.  
  647.  
  648. Individuelle Gestaltung
  649. Der  Maskengenerator  wird Ihnen unverschl╨æsselt  mitgeliefert.
  650. Dadurch erhalten Sie die M╨ñglichkeit, dieses Utility nach Ihren
  651. W╨ænschen  individuell umzugestalten. Gehen Sie aber  bitte  mit
  652. ╨₧nderungen  im  Quellcode des Maskengenerators  sorgf╨öltig  und
  653. vorsichtig  um  und  variieren Sie nur  die  hier  besprochenen
  654. Teile,  wenn  Sie sich noch nicht so sicher im KIM-Programmcode
  655. f╨æhlen. Denken Sie daran, da╤ü ein einziger gravierender  Fehler
  656. im Code das Programm zum Absturz bringt.
  657. Wir  empfehlen  Ihnen deshalb, den urspr╨ænglichen  Programmcode
  658. des  Maskengenerators  vor ╨₧nderungen in  eine  neue  Datei  zu
  659. kopieren,  so  da╤ü  Sie  im Falle eines durch  Ihre  ╨₧nderungen
  660. verursachten  Programmabsturzes  immer  noch  im  Besitz  eines
  661. funktionsf╨öhigen Programms sind.
  662.  
  663.  
  664. Gr╨ñ╤üe des Editierfensters
  665.  
  666. Wie   bereits   besprochen   stellt  das   Editierfenster   des
  667. Maskengenerators  die  Oberfl╨öche Ihres  zuk╨ænftigen  Programms
  668. dar.  In  dieses  Fenster positionieren Sie Ihre  Maskenobjekte
  669. graphisch an die gew╨ænschten Stellen.
  670. Wenn  Sie die Gr╨ñ╤üe dieses Fensters ╨öndern m╨ñchten, m╨æssen  Sie
  671. sich  in den Quellcode des Maskengenerators begeben. Laden  Sie
  672. dazu die Datei KMASK.KIM in den KIM-Editor.
  673.  
  674. Bewegen Sie nun den Cursor in die Codezeile 28. Dort werden die
  675. Variablen  _x,  _y,  _breite und _hoehe definiert.  ╨¬ber  diese
  676. Variablen wird die Gr╨ñ╤üe des Editierfensters gesteuert. In  den
  677. Codezeilen 29 bis 32 finden Sie als Voreinstellungen,  da╤ü  das
  678. Fenster  von  der  Position 2,2 aus 75  Zeichen  breit  und  15
  679. Zeichen  hoch  sein  soll.  Die  Position  der  linken   oberen
  680. Fensterecke  sollten  Sie  nach M╨ñglichkeit  nicht  ╨öndern,  da
  681. hiermit  das Fenster so in den Maskengenerator eingef╨ægt  wird,
  682. da╤ü  man  die  Men╨æ-  und Meldeleiste gut erkennen  kann.  Nach
  683. Belieben  ver╨öndern k╨ñnnen Sie jedoch die Breite (╨æber _breite)
  684. und  H╨ñhe  (╨æber _hoehe) des Editierfensters. ╨₧ndern  Sie  dazu
  685. entsprechend den Variableninhalt in den Codezeilen 31 und 32.
  686.  
  687. Vorgabe f╨ær Dateinamen
  688.  
  689. Wenn  Sie  den Maskengenerator neu starten oder die  Men╨æoption
  690. "Neu" w╨öhlen, wird der Inhalt des Editierfensters gel╨ñscht  und
  691. die  neue Datei erh╨ölt den Vorgabenamen "Noname.Kim". Wenn  Sie
  692. einen anderen Dateinamen als Vorgabe w╨öhlen m╨ñchten, laden  Sie
  693. wie  beschrieben  mit KE KMASK.KIM den Quellcode  in  den  KIM-
  694. Editor  und setzen den Cursor in die Zeile 35. Dort finden  Sie
  695. die  Wertzuweisung _dateiname = "Noname.Kim". ╨₧ndern Sie  diese
  696. Codezeile, indem Sie der Variablen als Inhalt einen Namen Ihrer
  697. Wahl zuweisen.
  698.  
  699. Farbeinstellungen des Maskengenerators
  700.  
  701. Die   Farbvorgaben  des  Maskengenerators   lassen   sich   auf
  702. unterschiedliche Weise ╨öndern, entweder ╨æber das Betriebssystem
  703. oder durch Manipulation des Quellcodes.
  704. ╨₧nderung ╨æber Windows:
  705. Wenn  Sie  die Windows-Version von KIM besitzen, so ╨öndern  Sie
  706. die   Farbeinstellungen  wie  folgt.  Rufen  Sie  das   Fenster
  707. Hauptgruppe auf. Dort klicken Sie das Men╨æ Systemsteuerung  an.
  708. In  diesem Men╨æ rufen Sie den Punkt Farben auf. Dort k╨ñnnen Sie
  709. alle Farben des Programmfensters ╨öndern. Bedenken Sie aber, da╤ü
  710. so vorgenommene ╨₧nderungen f╨ær alle Windows-Programme sowie f╨ær
  711. Windows selbst g╨æltig sind.
  712. ╨₧nderung ╨æber OS/2:
  713. Rufen  Sie den Maskengenerator auf und gehen Sie in die Ansicht
  714. Desktop  -  Icon View. Von dort starten Sie das  Utility  Color
  715. Palette.  Bewegen Sie den Mauszeiger auf die gew╨ænschte  Farbe,
  716. dr╨æcken die rechte Maustaste, halten diese gedr╨æckt und  ziehen
  717. Sie  den Cursor in den Fensterbereich des Maskengenerators, dem
  718. Sie  die neue Farbe zuweisen wollen. Lassen Sie dann die rechte
  719. Maustaste los. Der entsprechende Fensterbereich besitzt nun die
  720. neue   Farbe.   Im  Gegensatz  zu  Windows  ist   eine   solche
  721. Farbver╨önderung  bei  OS/2  nur f╨ær  das  bearbeitete  Programm
  722. gБltig.
  723. ╨₧nderung ╨æber den Quellcode:
  724. Laden  Sie  mit  KE KMASK.KIM den Quellcode in den  KIM-Editor.
  725. Bewegen  Sie den Cursor in die Zeilen 39 und 40. Dort  befinden
  726. sich die Definitionen von Farbpaletten. ╨₧ndern Sie die hier die
  727. Vordergrund-  und  Hintergrundfarben nach Ihren  Vorstellungen.
  728. Die  entsprechenden Farbcodes finden Sie in der Farbtabelle  im
  729. Anhang.
  730. Beachten Sie bitte, da╤ü sich diese Farbpaletten im Originalcode
  731. nur   auf   die   mit   dem  Maskengenerator   neu   erstellten
  732. Maskenobjekte  beziehen. M╨ñchten Sie auch  andere  Bestandteile
  733. des    Programmfensters   beeinflussen,    m╨æssen    Sie    den
  734. entsprechenden  Definitionsbefehl f╨ær  dieses  Objekt  im  Code
  735. suchen,  dort das FLAG "COLOR ON" anf╨ægen und anschlie╤üend  mit
  736. COLOR  ITEM diesem Objekt die gew╨ænschte Farbpalette  zuweisen.
  737. N╨öheres  ╨æber dieses Vorgehen finden Sie im Abschnitt 4.3.  des
  738. Kapitels ╨æber Programmoberfl╨öchen und Fenster.
  739. Ein  Hinweis  hierzu:  Die meisten Definitionsbefehle  f╨ær  die
  740. Programmbestandteile  finden Sie im Modul  fenster_inhalt.  Das
  741. eigentliche Programmfenster wird in der Codezeile 44 definiert.
  742.  
  743.  
  744. ΓòÉΓòÉΓòÉ 6. Der Debugger ΓòÉΓòÉΓòÉ
  745.  
  746. Der Debugger
  747.  
  748. Um  Ihren  Programmcode auf etwaige Fehler hin  zu  ╨æberpr╨æfen,
  749. steht  Ihnen  nicht der Men╨æpunkt Fehleranalyse zur  Verf╨ægung,
  750. sondern ein noch m╨öchtigeres Hilfsmittel, der KIM-Debugger. Mit
  751. dessen  Hilfe  k╨ñnnen  Sie ihren Programmcode  zeilenweise  auf
  752. Unstimmigkeiten ╨æberpr╨æfen. Geben Sie dazu an der Position, von
  753. der  aus  Sie  die ╨¬berpr╨æfung durchf╨æhren wollen,  den  Befehl
  754. START in Ihren Code ein. Es wird der gesamte Quellcode bis  zum
  755. Schlu╤ü  ╨æberpr╨æft,  es  sei  denn,  Sie  beenden  diesen   Test
  756. vorzeitig,  indem Sie an einer anderen Stelle den  Befehl  ENDE
  757. einf╨ægen.  Wenn  Sie nach Einf╨ægen von START nun  das  Programm
  758. aufrufen,   erhalten  Sie  abwechselnd  die  Oberfl╨öche   Ihres
  759. Programms und ein Debuggerfenster.
  760.  
  761. Der  KIM-Debugger  arbeitet den Programmcode  befehlsgem╨ö╤ü  ab.
  762. Dies bedeutet, da╤ü der Quellcode nicht zeilenweise vom Debugger
  763. ╨æberpr╨æft  wird, sondern in der Reihenfolge der Ausf╨æhrung  der
  764. Befehle.  Wird beispielsweise ein Label angesprungen, ╨æberpr╨æft
  765. der Debugger am Label weiter.
  766. Jeder  einzelne Programmschritt wird Ihnen im oberen Feld.  Auf
  767. diese  Weise  k╨ñnnen  Sie  den  Ablauf  eines  Programms  exakt
  768. nachvollziehen.
  769. Es  ist Ihnen auch m╨ñglich, den Inhalt bestimmter Variablen  an
  770. unterschiedlichen  Positionen im Programmcode  einzusehen.  Auf
  771. der  linken Seite im Debuggerfenster sind f╨ænf Felder  mit  der
  772. Bezeichnung Variable vorgesehen. Geben Sie dort nach Erscheinen
  773. des  Debuggerfensters die Namen der zu ╨æberpr╨æfenden  Variablen
  774. an. Der Debugger ermittelt dann selbst╨öndig bei jeder Codezeile
  775. den  Inhalt  dieser Variablen. Sie k╨ñnnen auch  an  irgendeiner
  776. Position  w╨öhrend des Debugvorgangs einen neuen  Variablennamen
  777. angeben   und   durch  Bet╨ötigen  des  Buttons  "Aktual."   den
  778. Variableninhalt ╨æberpr╨æfen.
  779. Eine Codezeile bleibt so lange im oberen Informationsfeld,  bis
  780. Sie  durch  Bet╨ötigen  des  Buttons  "Weiter"  die  ╨¬berpr╨æfung
  781. fortsetzen.  Sie k╨ñnnen den Debugger jederzeit  mit  Hilfe  des
  782. Buttons  "Deb.Ende"  verlassen. Es wurde dann  aber  nicht  der
  783. gesamte  urspr╨ænglich zur ╨¬berpr╨æfung vorgesehene Codeabschnitt
  784. durchgesehen.
  785. Vergessen  Sie  nicht,  nach  Beendigung  der  ╨¬berpr╨æfung  die
  786. Befehle   START  und  ENDE  wieder  aus  dem  Programmcode   zu
  787. entfernen, um das Programm normal betriebsf╨öhig zu machen.
  788.  
  789.  
  790. ΓòÉΓòÉΓòÉ 7. Grundbegriffe ΓòÉΓòÉΓòÉ
  791.  
  792. Grundbegriffe
  793.  
  794.  
  795. Datenbank
  796.  
  797. Die erstellten Datenbanken sind dBASE-kompatibel. Als Index wird der dBASE-IV
  798. Index unterst╨ætzt. (Andere Indexformate : FOXPRO und CLIPPER k╨ñnnen bestellt
  799. werden )
  800.  
  801. Systemkapazit╨öt : (dBASE IV - Index)
  802.  
  803. Gr╨ñ╤üe der Datendatei             :   1,000,000,000 Bytes
  804. Feldbreite                       :   256 Bytes
  805. Memofeld                         :   64 KB
  806. Anzahl der Felder                :   128
  807. Offene Datenbanken               :   100
  808. Anzahl Subindizes pro Index      :   47
  809. Datensatzbreite                  :   64 KB
  810.  
  811. 0) Befehle
  812.  
  813. Befehle sind reservierte W╨ñrter und d╨ærfen nicht als Variablennamen verwendet werden.
  814. Ein Befehl besteht aus einem Kommandowort und einem Parameterblock.
  815. Mehrere Befehle in einer Zeile m╨æssen mit einem Doppelpunkt  getrennt werden.
  816.  
  817. 1) Variablen
  818.  
  819. Daten, die wir aus einer Datenbank lesen oder schreiben, stellen wir am Bildschirm dar.
  820. F╨ær so einen Vorgang m╨æssen Daten in sogenannten Variablen gespeichert werden.
  821. Variablen m╨æssen in KIM deklariert werden, bevor man  Sie nutzt.
  822. Es gibt lokale und globale Variablen. Globale Variablen habe eine G╨æltigkeit
  823. in  allen  Modulen eines  Programms. Eine globale  Variable wird mit dem
  824. Unterstrich am  Anfang des  Variablennamens gekennzeichnet, (z.B. _test).
  825. Ein Variablenname kann 32 Zeichen lang  sein. Deklarationen in Modulen gelten
  826. in der  Regel als lokal.  Mehrere Variablen k╨ñnnen mit  Kommas getrennt
  827. deklariert werden.
  828. In KIM gibt es zwei Variablentypen : TEXT- und NUMERISCHE VARIABLEN.
  829.  
  830.  
  831. a) Numerische Variable
  832. Eine numerische Variable wird mit dem Befehl DEFFLOAT oder DIMFLOAT deklariert.
  833. KIM speichert einen numerische Werte als Flie╤ükommazahl.
  834. Mit DIMFLOAT wird ein Array von numerischen Variablen deklariert.
  835. Beispiel       DEFFLOAT a,b,c,d
  836.                DIMFLOAT test,1,100
  837. Mit DIMFLOAT wird test1,test2,test3,...test100 deklariert.
  838.  
  839.  
  840. b) Stringvariable
  841. String- oder Textvariablen dienen zum Speichern von alphanumerischen Zeichenketten.
  842. F╨ær die Deklaration gibt es 4 Befehle : DEFSTRING, DIM,DEFINE,DIMMEMO
  843. Der Inhalt einer Stringvariablen kann bis zu 512 Zeichen beinhalten.
  844. Eine Stringvariable, die mit DIMMEMO deklariert wird, kann bis zu 64000 Zeichen
  845. lang sein. In KIM wird diese Form der Variable als MEMOVARIABLE bezeichnet.
  846.  
  847. Beispiel       DEFSTRING eingabe,text,ausgabe,datei
  848.                DIM feld,1,100
  849.                DEFINE kunde1,20 as Name
  850.                DEFINE kunde2,15 as Vorname
  851.                DIMMEMO memo,10000      (Memovariable mit 10000 Bytes)
  852. MIT DIM werden die Variablen feld1,feld2,feld3,.. feld100 deklariert.
  853.  
  854. Die Definition von Variablen mit DEFINE dient den Datenbankbefehlen.
  855. DEFINE-Variablen sind immer globale Variablen und m╨æssen durchgehend nummeriert sein.
  856. (kunde1,kunde2,kunde3...)
  857. Einer DEFINE-Variable kann ein Zusatzname mit AS zugeteilt werden.
  858. Im Programm kann die Variable mit einem Punkt und Zusatznamen angesprochen werden.
  859.  
  860. Beispiel      DEFINE kunde1,20 as Name
  861.               DEFINE kunde2,15 as Vorname
  862.               DEFSTRING text
  863.               text=kunde.Vorname + " " + kunde.Name
  864.  
  865. Der Wert 20 und 15 ist eine L╨öngenangabe der Variablen und f╨ær die Nutzung mit einer
  866. DBASE-kompatiblen Datenbank belanglos, da die L╨öngen der Datenbankfelder ╨æber die
  867. Datenbankstruktur festgelegt werden.
  868.  
  869.  
  870. 2.) Die Zuweisung =
  871.  
  872. Anweisung text1="Hallo" bedeutet, da╤ü der Stringvariablen namens text1 der Inhalt
  873. "Hallo" zugewiesen wird. Allgemein gesprochen  werden die Zeichen oder der Inhalt
  874. einer Variablen rechts vom Gleichheitszeichen der Variablen links davon zugewiesen.
  875. Die mathematische Bedeutung des Gleichheitszeichen (linke Seite = rechte Seite) mu╤ü
  876. hierbei nicht erf╨ællt sein. Mit dem Gleichheitszeichen kann man auch Variablen den
  877. Wert anderer Variablen zuweisen, aber nur zwischen Variablen gleichen Typs!
  878.  
  879.  
  880. 3) Operatoren
  881. a)Mathematische Operatoren
  882.  
  883. Oftmals ist es notwendig, in einem Programm Rechenoperationen auszuf╨æhren.
  884. In KIM sind folgende mathematischen Operatoren anwendbar :
  885.       +      Addieren
  886.       -      Subtrahieren
  887.       /      Dividieren
  888.       *      Multiplizieren
  889.       ^      Potenzieren
  890.  
  891. Was die Anwendbarkeit und G╨æltigkeit dieser Operatoren angeht, so orientiert sich
  892. KIM an die g╨öngigen Rechenregeln. Zur Erinerung seien Ihnen an dieser Stelle die
  893. wichtigsten mathematischen Gebote noch einmal dargelegt :
  894.  
  895.       Punkt vor Strich
  896.       Addieren und Subtrahieren sowie Multiplizieren und Dividieren sind
  897.       untereinander gleichberechtigt und werden von links nach rechts
  898.       abgehandelt.
  899.       Division durch die Zahl Null ist verboten
  900.       Potenzierung hat die h╨ñchste Priorit╨öt
  901.       Klammerausdr╨æcke werden von innen nach au╤üen gerechnet.
  902.  
  903. b) Vergleichsoperatoren
  904.  
  905. Vergleiche sind ein wichtiger Bestandteil einer jeden Computersprache.
  906. Sie werden bei Erstellung eines Programms h╨öufig an einen Punkt kommen,
  907. wo Sie vom Computer fordern mΓäûssen, auf eine Entscheidung des Anwenders
  908. zu reagieren. Grunds╨ötzlich hat der Computer bei einem Vergleich zu
  909. entscheiden, ob eine Aussage wahr oder falsch ist, um entsprechend zu reagieren.
  910. Der Vergleich selbst wird mit einem Operator durchgef╨æhrt.
  911.  
  912. In KIM k╨ñnnen Sie folgende Vergleichsoperatoren einsetzen :
  913.  
  914. =      ist gleich
  915. <=     ist kleiner oder gleich
  916. >=     ist gr╨ñ╤üer oder gleich
  917. <>     ist ungleich
  918. <      ist kleiner
  919. >      ist gr╨ñ╤üer
  920.  
  921. Alle Vergleichsoperatoren sind gleichberechtigt. Es steht Ihnen frei, welchen
  922. Operator Sie f╨ær ein bestimmtes Problem verwenden. Manchmal gibt es auch mehrere
  923. logische L╨ñsungen f╨ær eine Aufgabe. Bitte beachten Sie unbedingt, da╤ü Sie nur
  924. gleiche Variablentypen (und damit Datentypen) miteinander vergleichen, also nur
  925. Zahlenvariablen mit Zahlenvariablen und Stringvariablen mit Stringvariablen.
  926. Es ist sicher unsinnig, danach zu fragen, ob 3 gr╨ñ╤üer als "hallo" ist.
  927.  
  928.  
  929. c.) Logische Operatoren
  930.  
  931. KIM unterst╨ætzt die logischen Operatoren OR und AND, um mehrere Vergleiche miteinander
  932. zu verkn╨æpfen. Logische Operatoren k╨Ännen nur in Verbindung mit IF/ENDIF
  933. und WHILE/WEND genutzt werden.
  934. Beispiel    IF name="MEIER" AND ort="M╨¬NCHEN" THEN
  935.              ....
  936.              ....
  937.             ENDIF
  938.  
  939.  
  940. d) Stringoperatoren
  941.  
  942. KIM unterst╨ætzt die M╨ñglichkeit mehrere Strings (Zeichenketten) miteinander zu
  943. verkn╨æpfen. Daf╨ær dient der der Operator "+".
  944.  
  945.  
  946. Beispiel     test = "Hallo " + "Franz"
  947.              test2=test1+","+test2+","+test3
  948.  
  949.  
  950. 4) Typumwandlungen
  951. In KIM besteht die M╨ñglichkeit einer Typumwandlung, da╤ü Sie einen String in eine
  952. Zahl und eine Zahl in einen String umwandeln.
  953.  
  954.  
  955. a) FORM
  956. FORM zahl,stringvariable,stellen,l╨önge
  957.  
  958. Mit dem Befehl FORM wird das Ergebnis eines numerischen Ausdrucks in einen
  959. alphanumerischen Text umgewandelt und in <stringvariable> gespeichert.
  960. Dabei kann man das Ergebnis auf Nachkommastellen formatieren und die L╨önge
  961. der Zeichenkette bestimmen (Weitere Infos siehe im Referenzteil).
  962.  
  963.  
  964.  
  965. b)VAL
  966.  
  967. VAL string,numerische Variable
  968. Hiermit k╨ñnnen Sie den Inhalt einer Stringvariable in eine Zahl umwandeln.
  969. (Dabei ist zu beachten : "hallo" -> 0
  970. (Weitere Infos siehe Referenzteil)
  971.  
  972.  
  973. 5) Verzweigungen
  974.  
  975. Verzweigungen sind einer der wichtigsten Bestandteile eines Programms.
  976. Mit Ihrer Hilfe erm╨ñglicht man dem Rechner, auf verschiedene Entscheidungen
  977. unterschiedlich zu reagieren. F╨ær das Programmieren von Verzweigungen benutzt
  978. man die Befehlskombination IF/THEN/ELSE/ENDIF.
  979.  
  980. Beispiel    IF a > b THEN
  981.              ....
  982.              ....
  983.             ELSE
  984.              ....
  985.              ....
  986.             ENDIF
  987.  
  988. Ist der Ausdruck nach der IF-Anweisung erf╨ællt,
  989. werden die Anweisungen nach der THEN-Anweisung ausgef╨æhrt, bis die ELSE
  990. Anweisung erreicht ist. Dann wird der Programmteil bis zum ENDIF ╨æbersprungen.
  991. Ist der Ausdruck nach der IF-Anweisung nicht erf╨ællt, wird der Programmblock zwischen
  992. THEN und ELSE ╨æbersprungen und die Anweisungen nach dem ELSE-Befehl ausgef╨æhrt.
  993. Die Verschachtelung von IF/ENDIF Befehlen ist m╨ñglich.
  994. Der Befehl ELSE ist optional. Wird er weggelassen gilt f╨ær ENDIF das Gleiche
  995. wie f╨ær ELSE. Wichtig! Zu jedem IF geh╨ñrt ein ENDIF.
  996.  
  997.  
  998. 6) Schleifen
  999.  
  1000. Schleifen sind Programmabschnitte, in denen eine bestimmte Befehlsfolge mehrmals
  1001. hintereinander durchlaufen werden kann.
  1002. In KIM gibt es zwei Befehle f╨ær Schleifen : FOR/NEXT und WHILE/WEND
  1003.  
  1004. a) FOR/NEXT
  1005. Beispiel :        FOR i=1 TO 10
  1006.                     [Anweisungsblock]
  1007.                     ....
  1008.                     ....
  1009.                   NEXT
  1010.  
  1011. Der Anweisungsblock wird 10 mal ausgef╨æhrt. Die Variable i ist die Laufvariable und
  1012. wird um den Wert 1 erh╨ñht, bis der Endwert nach dem TO-Befehl erreicht wird.
  1013. M╨ñchte man eine FOR/NEXT Schleife vorzeitig beenden, darf man die Schleife nicht mit
  1014. einen Sprungbefehl verlassen, sondern mu╤ü die Laufvariable auf den Endwert +1 setzen.
  1015. Beispiel :            FOR i=1 TO 10
  1016.                           IF i=5 THEN I=11 : ENDIF
  1017.                       NEXT
  1018.  
  1019. b) WHILE/WEND
  1020. Beispiel :            WHILE a=0 and b=0
  1021.                           [Anweisungsblock]
  1022.                       WEND
  1023. Der Anweisungsblock wird so oft wiederholt, bis der Ausdruck nach dem
  1024. WHILE-Befehl falsch ist.
  1025. Schleifen k╨ñnnen bis auf 20 Ebenen verschachtelt werden.
  1026.  
  1027.  
  1028. 7) Labels und unbedingte Spr╨ænge
  1029. Begriffdefinition : GOTO (ital. Spaghetti)
  1030.  
  1031. Labels sind Sprungmarkierungen in Programmen. Ein Label besteht aus dem
  1032. Zeichen # und einem Labelnamen. Der Labelname darf 32 Zeichen lang sein.
  1033.  
  1034. Beispiel            #TEST
  1035. Mit dem Befehl GOTO k╨ñnnen Sie einen unbedingten Sprung zu einem Label ausl╨ñsen.
  1036.  
  1037. Beispiel            GOTO #test
  1038.                      ....
  1039.                      ....
  1040.                     #test
  1041.                      ....
  1042.                      ....
  1043.  
  1044.  
  1045. 8) Unterprogramme und Module
  1046. a) Unterprogramme
  1047.  
  1048. Im Gegensatz zu den unbedingten Spr╨ængen, die durch den Befehl GOTO ausgel╨ñst
  1049. werden, sind Spr╨ænge zu Unterprgrammen ein beliebtes und h╨öufig angewandtes
  1050. Programmierungsutensil.
  1051.  
  1052.  
  1053. Beispiel           GOSUB #teilen
  1054.                     ....
  1055.                     ....
  1056.                    END
  1057.                    REM *** Unterprogramme ***
  1058.                    #teilen
  1059.                     ....
  1060.                     ....
  1061.                     ....
  1062.                    RETURN
  1063.  
  1064. Aktiviert wird das Unterprogramm mit GOSUB #teilen. Die Anweisungen zwischen dem
  1065. Label #teilen und RETURN werden abgearbeitet und das Programm kehrt wieder zur
  1066. GOSUB-Anweisung zur╨æck. In Unterprogrammen, die mit GOSUB aufgerufen werden,
  1067. k╨ñnnen keine lokalen Variablen definiert werden.
  1068.  
  1069.  
  1070. b) Module
  1071.  
  1072. Ein Modul ist ein abgekapselter Programmteil mit lokalen Variablendefinitionen und einer
  1073. Schnittstelle zur Parameter╨æbergabe. Das klingt komplizierter als es in Wirklichkeit ist.
  1074. Die Befehle von KIM sind vordefinierte Module. Diese Module bestehen aus einem
  1075. Befehlswort und einem Parameterblock. Die Befehle von KIM werden durch den Aufruf
  1076. des Namens erreicht. Module, die vom Programmierer erstellt wurden, werden mit
  1077. dem Befehl CALL und Modulnamen aufgerufen.
  1078. Mit eigenen Modulen kann man den Befehlsvorrat erweitern.
  1079. UEin Modulname darf aus 32 alphanumerischen Zeichen bestehen.F╨ær die Kapselung von
  1080. Modulen gelten folgende Ausnahmen: Globale Variablen, ge╨ñffnete Datenbanken und
  1081. definierte Oberfl╤ächenobjekte gelten f╨ær das gesamte Programm.
  1082. Wurde eine Datenbank im Modul x ge╨ñffnet und beim Verlassen des Moduls nicht
  1083. geschlossen, ist Sie im Modul y nutzbar. (Weitere Infos siehe Referenzteil)
  1084.  
  1085. Beispiel            CALL addiere (a,b,c)
  1086.                     END
  1087.                     REM *** Module ****
  1088.                     MODUL addiere (float a, float b, float c)
  1089.                       deffloat d
  1090.                       d=a+b
  1091.                       c=d
  1092.                     ENDMOD
  1093.  
  1094.  
  1095. 9) Include und Importdateien
  1096.  
  1097. M╨ñchte man ein Programm aus ergonomischen Gr╨ænden in mehrere physikalische
  1098. Dateien aufteilen und bei der Ausf╨æhrung wieder zusammenf╨ægen, geschieht
  1099. dies mit sogenannten INCLUDE- und IMPORT-Dateien.
  1100. Eine Includedatei wird beim Start des Programms in das Programm eingebunden.
  1101. Eingef╨ægt in das Hauptprogramm wird eine Include-Datei durch den Befehl
  1102.  
  1103.  
  1104. @Dateiname
  1105.  
  1106. Beachten Sie, da╤ü zwischen dem Zeichen @ und dem Dateinamen kein Leerzeichen
  1107. vorhanden ist. Importdateien werden zur Laufzeit des Programms geladen und
  1108. ben╨ñtigen beim Start noch keinen Speicherplatz. Eine Importdatei darf 64 KB
  1109. gro╤ü sein.
  1110. Am Ende einer Importdatei befindet sich der Befehl IMPORTEND. Er veranlasst,
  1111. die Importdatei aus dem Speicher zu entfernen.
  1112. In Importdateien d╨ærfen keine weiteren Importdateien aufgerufen werden, keine
  1113. Labels gesetzt werden, die vom Hauptprogramm genutzt werden und keine Module
  1114. definiert werden. In Include-Dateien ist dies zul╨össig.
  1115. (Info ╨æber die Syntax finden Sie im Referenzteil.)
  1116.  
  1117.  
  1118. 10) Parametereingabe
  1119.  
  1120. Parametereingaben lassen sich in KIM ╨æber mehrere Textzeilen eingeben.
  1121. Dies macht ein Programm ╨æberschaubarer. Als Zeilentrennzeichen werden zwei
  1122. Punkte ".." benutzt.
  1123. Beispiel  deffloat  a,..
  1124.                     b,..
  1125.                     c,..
  1126.  
  1127.  
  1128. 10) Aliasvariablen
  1129.  
  1130. In manchen F╨öllen ist es notwendig sehr allgemein g╨æltige Module zu schreiben.
  1131. Mit einigen Befehlen ist dies aber nicht ohne weiteres m╨ñglich.
  1132. Als Beispiel m╨ñchte ich hier den Befehl <INEXT> nennen.
  1133. M╨ñchte man eine Routine schreiben, die es erm╨ñglicht in mehreren
  1134. Datenbanken mit unterschiedlicher Recordstruktur zu bl╨öttern, wird es
  1135. schwierig.
  1136.  
  1137. Beispiel :      INEXT 1,ok,kunden
  1138.                 INEXT 2,ok,artikel
  1139.                 INEXT 3,ok,lager
  1140.  
  1141. In KIM gibt es eine M╨ñglichkeit diese Problem zu l╨ñsen :
  1142.  
  1143. modul blaettern (float dbnr , float ok , char struktur )
  1144.  
  1145.   inext dbnr,ok,(1)struktur(1)
  1146.  
  1147. endmod
  1148.  
  1149. (1)=Kaufm╨önnische UND - Zeichen (SHIFT-6)
  1150.  
  1151.  
  1152. Was geschieht ? Der Inhalt von <struktur> wird ersetzt mit (1)struktur(1).
  1153.  
  1154. call blaettern(1,ok,"kunden")
  1155. call blaettern(2,ok,"artikel")
  1156. call blaettern(3,ok,"lager")
  1157.  
  1158.  
  1159.  
  1160.  
  1161. ΓòÉΓòÉΓòÉ 8. Eventfunktionen ΓòÉΓòÉΓòÉ
  1162.  
  1163. Eventfunktionen
  1164.  
  1165. Allgemeines
  1166.  
  1167. Neu in KIM 2.1 sind die sogenannten Userfunktionen.(Eventfunktionen)
  1168.  
  1169. Beispiel der alten Funktionsweise :
  1170. Sie haben einen Button definiert und an ein Fensterobjekt addiert.
  1171. Dr╨æcken Sie den Button, haben Sie bis jetzt ╨æber die Funktion
  1172. "get_item_pos" festgestellt ob die linke Maustaste oder die ENTER-
  1173. Taste gedr╨æckt wurde. Nun musste man noch pr╨æfen welches Objekt
  1174. angesprochen wurde und hat dann einen entsprechenden
  1175. Programmcode gestartet.
  1176.  
  1177. Neu :
  1178. Der Userfunktionsname besteht aus dem Namen des Objekts und einen
  1179. Ergeignis. ( z.B. "Button1_select()"
  1180. Wird z.B. ein Button "Button1" angeklickt, wird die Funktion
  1181. Button1_select() aufgerufen.
  1182.  
  1183. Die alte Programmierweise kann beibehalten werden. Eine Userfunktion mu╤ü nicht definiert sein. Ist aber f╨ær die Zukunft aber der schnellere Weg.
  1184.  
  1185.  
  1186. Verf╨ægbare Events
  1187.  
  1188.  
  1189. Userfunktion              Ereignis
  1190. -------------------------------------------------------------------
  1191. Button1_select()       -> Objekt wird angeklickt oder mit ENTER
  1192.                           ausgew╨öhlt, entspricht  taste=13
  1193. Button1_getfocus()     -> Objekt erh╨ölt den Fokus
  1194. Button1_lostfocus()    -> Objekt verliert den Fokus
  1195. Button1_doubleclick()  -> Nur wenn Objekt bei Definition die Eigenschaft :
  1196.                           "double_click" erh╨ölt.
  1197. Button1_validate()     -> Bei Eingabefehler, z.B. Eingabe au╤üerhalb
  1198.                           des g╨æltigen Bereichs.
  1199.  
  1200. Button1_changed()      -> User hat Feldeintrag ge╨öndert
  1201.                           // Funktioniert nur bei def_string momentan
  1202.  
  1203. WinID_timer()          -> s. DEF_WINDOW
  1204.  
  1205.  
  1206. Beispiel
  1207.  
  1208. def_window "window",...
  1209. def_button "button1",..
  1210. add_item "window","button1"
  1211.  
  1212. win_paint "window"
  1213.  
  1214. while i<>1000
  1215.  win_ev i
  1216. wend
  1217.  
  1218. end
  1219.  
  1220. rem ****************************************
  1221. rem Eventfunktion
  1222. rem ****************************************
  1223.  
  1224. modul button1_select()
  1225.  
  1226. rem Wenn Button gedr╨æckt wurde, dann soll ein Ton erklingen
  1227.  
  1228. beep
  1229.  
  1230. endmod
  1231.  
  1232. Tastaturevents
  1233.  
  1234. Eventfunktion um die Tastatureingaben abzufangen :
  1235. Vorher mu╤ü die entsprechende Taste mit SET_KEYMAP definiert sein.
  1236.  
  1237. MODUL SYSTEM_KEYPRESS()
  1238.  
  1239.  if system.keypress=10005 then
  1240.    beep
  1241.  endif
  1242.  
  1243. ENDMOD
  1244.  
  1245. Innerhalb der Funktion SYSTEM_KEYPRESS wird ein logischer Tastenevent an
  1246. die Variable <system.keypress> ╨æbergeben.
  1247. Diese Variable mu╤ü nicht deklariert werden. Dies ╨æbernimmt KIM.
  1248. Die Variable <system.keypress> liefert nur gemappte Tasten zur╨æck !
  1249.  
  1250.  
  1251. Userfunction-Arrays
  1252.  
  1253. Nehmen wir an, Sie haben eine Maske mit 30 Datumseingaben.
  1254. Nun m╨ñchten wir bei allen 30 Feldern pr╨æfen ob die Eingabe korrekt war.
  1255. Die Datumseingabeobjekte tragen die Kennung : inp1,inp2,...,inp30.
  1256.  
  1257. In der oben beschriebenen Weise sieht das so aus :
  1258.  
  1259. modul inp1_validate()
  1260.  deffloat flag
  1261.  msgbox "Datumseingabeformat falsch ! ( TT.MM.YYYY ) ",0,flag,""
  1262.  setfocus "inp1"
  1263. endmod
  1264.  
  1265. modul inp2_validate()
  1266.  deffloat flag
  1267.  msgbox "Datumseingabeformat falsch ! ( TT.MM.YYYY ) ",0,flag,""
  1268.  setfocus "inp2"
  1269. endmod
  1270.  
  1271.  
  1272. u.s.w ( 27 x )
  1273.  
  1274.  
  1275. modul inp30_validate()
  1276.  deffloat flag
  1277.  msgbox "Datumseingabeformat falsch ! ( TT.MM.YYYY ) ",0,flag,""
  1278.  setfocus "inp30"
  1279. endmod
  1280.  
  1281.  
  1282. KIM unterst╨ætzt folgende M╨ñglichkeit :
  1283.  
  1284. Das Modul wird ohne "Index" deklariert und erh╨ölt als Platzhalter
  1285. das Zeichen # :
  1286.  
  1287. modul inp#_validate()
  1288.  deffloat flag,taste
  1289.  def_string obj$,alt$
  1290.  get_item_pos obj$,taste,alt$
  1291.  msgbox "Datumseingabeformat falsch ! ( TT.MM.YYYY ) ",0,flag,""
  1292.  setfocus alt$
  1293. endmod
  1294.  
  1295. GET_ITEM_POS wird benutzt, um eine Positionierung des Cursors f╨ær
  1296. die Neueingabe durchzuf╨æhren. GET_ITEM_POS liefert das aktive und
  1297. das zuletzt aktive Objekt zur╨æck.
  1298.  
  1299. Beim Aufruf einer Userfunction wird zuerst nach einer eindeutigen Kennung
  1300. gepr╨æft ( z.B. inp1_validate ). Wird keine eindeutige Kennung gefunden,
  1301. pr╨æft KIM auf eine Array-Variante (z.b. inp#_validate. ).
  1302. Wenn "inp1_validate" und "inp#_validate" existieren, dann erfolgt nur der
  1303. Aufruf von "inp1_validate". Wenn im gleichen Programm "inp2_validate"
  1304. nicht definiert wurde, pr╨æft KIM wieder auf eine Array-Variante.
  1305. So ist es m╨ñglich beide Funktionstypen in einem Programm zu nutzen.
  1306.  
  1307.  
  1308.  
  1309. ΓòÉΓòÉΓòÉ 9. Datenbankbeschreibung ΓòÉΓòÉΓòÉ
  1310.  
  1311. Datenbank
  1312.  
  1313. Ъbersicht
  1314. In  diesem Kapitel lernen Sie das Herzst╨æck eines KIM-Programms
  1315. kennen,  die  Datenbank.  Mit  ihr  werden  alle  ins  Programm
  1316. eingegebenen Informationen gespeichert und verwaltet.
  1317. Wir  werden  den  Aufbau von Datenbanken  und  den  zugeh╨Ärigen
  1318. Indexdateien  besprechen. Anschlie╤üend wird  gezeigt,  wie  mit
  1319. Datenbanken   gearbeitet   wird,  wie   Datens╨ötze   eingef╨ægt,
  1320. gel╨ñscht, herausgesucht und gel╨ñscht werden k╨ñnnen.
  1321. Ein  wichtiger  Abschnitt befa╤üt sich mit der  Verkn╨æpfung  von
  1322. Datenbanken  zu  Relationen. Es werden die  Kriterien  f╨ær  den
  1323. erfolgreichen  Aufbau einer Relation vorgestellt.  Anschlie╤üend
  1324. wird  der  Aufbau  und das Arbeiten mit Relationen  besprochen,
  1325. wobei  unter  anderem die M╨ñglichkeiten zur Umorganisation  der
  1326. relationalen  Datenbanken und der Definition von Abfragefiltern
  1327. im Mittelpunkt stehen.
  1328. Zum  Schlu╤ü  wird die Datenbank in einem Netzwerk  vorgestellt.
  1329. Hier  sind  vor  allem  die  diversen  Sperrvorrichtungen   von
  1330. Interesse,    welche    KIM   f╨ær   die   Besonderheiten    des
  1331. Netzwerkbetriebs bereith╨ölt. Sie erfahren, wie  man  Datens╨ötze
  1332. und Datenbanken vor Ver╨önderungen sch╨ætzen kann.
  1333.  
  1334.  
  1335. EinfБhrung
  1336. Datenbanken  stellen  das Herzst╨æck eines jeden  KIM-Programmes
  1337. dar.  Die  gesamte Programmiersprache ist darauf spezialisiert,
  1338. die  Probleme bei der Erstellung von Datenbanken m╨ñglichst  gut
  1339. und elegant zu meistern.
  1340. Unter  einer  Datenbank versteht man allgemein ein System,  das
  1341. Informationen  nach  einer  festgelegten  Ordnung  ablegt.  Aus
  1342. diesem System kann man Informationen abfragen ("Daten abheben")
  1343. oder  Informationen in das System einf╨ægen ("Daten einzahlen").
  1344. Diese  kleine  Erkl╨örung zeigt bereits, da╤ü der  Vergleich  mit
  1345. einer Bank bei diesem System gar nicht so abwegig ist.
  1346. Nun  darf man sich eine Datenbank aber nicht so vorstellen, als
  1347. ob  Daten dort wahllos in eine Datei gesteckt werden wie Socken
  1348. in  eine  Schublade.  Vielmehr werden darin  Daten  nach  einem
  1349. vorgegebenem System geordnet. Die einfachste M╨ñglichkeit, Daten
  1350. zu  ordnen, best╨ænde beispielsweise darin, alle Daten bez╨æglich
  1351. Ihres Anfangsbuchstabens alphabetisch zu ordnen.
  1352. Damit   w╨öre  bereits  eine  deutlich  bessere  Datenverwaltung
  1353. realisiert als bei einem einfachen Hineinstopfen aller Daten in
  1354. eine  Datei.  Aber  auch  damit wollen wir  es  nicht  bewenden
  1355. lassen.    Oft   m╨ñchte   man   erreichen,   da╤ü   verschiedene
  1356. Dateneingaben, die miteinander verbunden sind, auch so in einer
  1357. Datenbank  aufbewahrt werden, da╤ü Sie gemeinsam abrufbar  sind.
  1358. Ein  Beispiel  daf╨ær w╨öre, da╤ü man beim Abfragen  eines  Namens
  1359. auch  gleichzeitig den zugeh╨ñrigen Vornamen aus  der  Datenbank
  1360. hervorholen kann.
  1361. Nat╨ærlich  sind  moderne Datenbanken  dazu  in  der  Lage.  Das
  1362. Geheimnis   besteht  darin,  da╤ü  zueinander  geh╨ñrende   Daten
  1363. gemeinsam  als  ein Datensatz abgespeichert werden.  Wird  nach
  1364. einer  bestimmten  Information  gefragt,  zeigt  die  Datenbank
  1365. sofort  den  gesamten Datensatz an. Die Ordnung der  Datens╨ötze
  1366. zueinander  erfolgt  ╨æber  eine  Indexdatei,  in  welcher   das
  1367. Kriterium  vorgegeben  ist, nach welchem die  Ordnung  erfolgen
  1368. soll.
  1369. Dieses  Ordnungssystem funktioniert aber  nur  dann,  wenn  das
  1370. Format  aller Datens╨ötze identisch ist. Was damit gemeint  ist,
  1371. sei in folgendem Beispiel erl╨öutert:
  1372. Ein Datensatz ist aus mehreren verschiedenen Feldern aufgebaut,
  1373. wobei  jedes Feld eine andere Information beinhaltet. Wenn  wir
  1374. beispielsweise  mit  einem Namen gleichzeitig  den  zugeh╨ñrigen
  1375. Vornamen  und  die  entsprechende  Adresse  speichern   wollen,
  1376. ben╨ñtigen  wir  einen Datensatz, der aus drei Feldern  besteht.
  1377. Das  erste Feld enth╨ölt die Daten, die den Namen betreffen, das
  1378. zweite  und  das  dritte Feld entsprechend diejenigen  f╨ær  den
  1379. Vornamen und die Anschrift.
  1380.  
  1381. Symbolisch  gesehen stellt die Datenbank den einen Aktenschrank
  1382. dar. Sie sehen, da╤ü in der Datenbank  bereits  die
  1383. Struktur  der  Datens╨ötze vorgegeben ist.  Bildlich  gesprochen
  1384. "passen"  n╨ömlich  nur Schubladen (sprich  Datens╨ötze)  in  den
  1385. Schrank (die Datenbank), die das entsprechende Format besitzen,
  1386. also  die Aufteilung in drei F╨öcher mit der gew╨ænschten  L╨önge.
  1387. W╨ærde  man versuchen, eine Schublade mit zwei oder vier F╨öchern
  1388. in den Schrank zu schieben, w╨ærde man keinen Erfolg haben.
  1389. Das  heute als Standard geltende Datenbankformat ist das xBASE-
  1390. Format.    Dies   bedeutet,   da╤ü   praktisch   alle   g╨öngigen
  1391. Datenbanksysteme auf dem oben geschilderten Datensatzsystem zur
  1392. Datenverkn╨æpfung   und   den  daraus   folgenden   Konsequenzen
  1393. basieren.  Sie  unterscheiden sich lediglich  in  der  Art  der
  1394. Datensatzverwaltung   ╨æber  Indizes   und   programmtechnischen
  1395. Details  (beispielsweise  ist  dBASE  eine  Interpretersprache,
  1396. w╨öhrend Clipper compiliert wird).
  1397. KIM  unterst╨ætzt  ebenfalls  das  xBASE-Format.  Sie k╨ñnnen bei
  1398. der Installation von KIM w╨öhlen, welche Art von Indexverwaltung
  1399. Sie  ben╨ætzen  wollen. Es wird standardm╨ö╤üig  das  dBASE-System
  1400. mitgeliefert.  Optional  k╨ñnnen Sie  jedoch  auch  Foxpro- oder
  1401. Clipper-Indexsysteme erwerben.
  1402.  
  1403.  
  1404. Die Recordstruktur
  1405. Zu einem Datenbankprogramm geh╨ñren folgende Komponenten: a) die
  1406. Datenbank  selbst;  b)  die  Eingabefelder,  ╨æber  welche   die
  1407. Kommunikation zwischen Bediener und Datenbank erfolgt;  c)  die
  1408. Feldvariablen,  welche  die Verbindung zwischen  Datenfeld  und
  1409. Datenbank herstellen:
  1410.  
  1411. Diese  drei  Komponenten sind untrennbar miteinander verbunden.
  1412. Eingaben   in  die  Datenbank  k╨ñnnen  nur  ╨æber  Eingabefelder
  1413. get╨ötigt  werden. In das Programm gelangen diese Eingaben  dann
  1414. ╨æber  die den Feldern zugrunde liegenden Variablen, von wo  sie
  1415. in  die Datenbank ╨æbernommen werden k╨ñnnen. Andererseits werden
  1416. Datens╨ötze  aus der Datenbank ╨æber diese Feldvariablen  in  die
  1417. Eingabefelder geladen.
  1418. Die  Gesamtheit  aller  den Eingabefeldern  zugrunde  liegenden
  1419. Variablen,  ╨æber  die  Datens╨ötze in eine Datenbank  eingelesen
  1420. werden,  bezeichnet  man  als  RECORDSTRUKTUR.  Wie  man   eine
  1421. Recordstruktur  erstellt,  haben  wir  im  Prinzip  bereits  im
  1422. Kapitel ╨æber Eingabefelder erfahren.
  1423. Der  erste  Schritt  bei der Erzeugung von Datenbanken  besteht
  1424. also  in der Definition der erforderlichen Feldvariablen.  Dies
  1425. geschieht  unter  Verwendung  von Define-Variablen  bzw.  Memo-
  1426. Variablen,  wobei Sie unbedingt Gebrauch von der Option  machen
  1427. sollten,  den  Define-Variablen ╨æber AS eine  Zusatzbezeichnung
  1428. zuzuordnen. Dies erleichtert das Auffinden der einem bestimmten
  1429. Feld zugrunde liegenden Variablen im Quellcode bei weitem.
  1430. Aber Sie k╨ñnnen auch ein globales Array benutzen.
  1431. Anschlie╤üend  erstellen Sie die ben╨ñtigten  Eingabefelder.  Sie
  1432. k╨ñnnen  hierbei selbstverst╨öndlich vom Maskengenerator Gebrauch
  1433. machen.  Details hierzu sowie Informationen ╨æber  M╨ñglichkeiten
  1434. der  Formatierung von Eingaben in Eingabefeldern entnehmen  Sie
  1435. bitte dem Kapitel ╨æber Eingabefelder.
  1436. Damit  ist  das  Ger╨æst  des Datenbankprogramms  erstellt.  Nun
  1437. m╨æssen  wir  uns  der  Definition  der  eigentlichen  Datenbank
  1438. zuwenden.
  1439.  
  1440.  
  1441. Die Feldstruktur
  1442. KIM   orientiert sich  beim  Feldformat  von Datens╨ötzen an den
  1443. von xBASE vorgegebenen Richtlinien. Wir wollen an dieser Stelle
  1444. keine  Einf╨æhrung in das xBASE-Sprachsystem geben, sondern  uns
  1445. nur  auf  die  Erkl╨örung auch f╨ær KIM wichtiger  Ausdr╨æcke  und
  1446. Details beschr╨önken.
  1447. Auch  bei  der  Erstellung  der Datenbankfeldstruktur  gilt  es
  1448. zun╨öchst,   die  erforderlichen  Feldvariablen  zu  definieren.
  1449. Hierbei   k╨ñnnte  man  nat╨ærlich  auf  die  bereits   f╨ær   die
  1450. Recordstruktur verwendeten Define-Variablen zur╨æckgreifen.  Ihr
  1451. Programm wird aber flexibler, wenn Sie der Feldstruktur  andere
  1452. Variablen  zuordnen. Dann k╨ñnnten Sie die Datenbank  auch  ╨æber
  1453. andere  Recordstrukturen ansprechen (dies  w╨öre  beispielsweise
  1454. bei MDI-Systemen n╨ætzlich).
  1455. Au╤üerdem  ist  es  nicht  notwendig, Define-Variablen  f╨ær  die
  1456. Erzeugung  der  Datenbankfelder  zu   benutzen.   Im   von  KIM
  1457. unterst╨ætzten   xBASE-Format  wird  die  L╨önge  der   einzelnen
  1458. Datenbankfelder  intern  gesteuert  und  mu╤ü  nicht   bei   der
  1459. Definition  der Feldvariablen angegeben werden.  Darum  besteht
  1460. kein  Grund mehr, dieses Variablenfeld mit DEFINE zu  erzeugen,
  1461. zumal   dies   mit   dem  Befehl  DIM  weitaus   schneller   zu
  1462. bewerkstelligen ist. Nehmen wir an, wir wollen  eine  Datenbank
  1463. erstellen, die folgende Datensatzstruktur besitzen soll:  Feld1
  1464. zur Speicherung von Namen mit einer L╨önge von 20 Zeichen; Feld2
  1465. zur  Speicherung von Vornamen mit einer L╨önge von  20  Zeichen;
  1466. Feld3  zur  Speicherung der Adressen mit  einer  L╨önge  von  50
  1467. Zeichen; Feld4 zur Speicherung von Kommentaren mit einer  L╨önge
  1468. von  255  Zeichen.  Die Definition  der  Feldvariablen  erfolgt
  1469. ╨æber DIM, wobei zu beachten gilt, da╤ü in Datenbanken mit xBASE-
  1470. Format  das  letzte Feld als Datensatz-Endkennung leer  bleiben
  1471. mu╤ü. Es ist daher ein Feld mehr als notwendig zu definieren:
  1472.  
  1473.                          DIM feld 1, 5
  1474.  
  1475. Eine Datenbank darf maximal 255 Felder besitzen. Nun m╨æssen die
  1476. einzelnen  Felder des Datensatzes n╨öher definiert  werden.  Zur
  1477. Verdeutlichung   der   Vorgehensweise  haben   wir   dem   eine
  1478. Kommentarzeile   vorangestellt,  in  der  die   Bedeutung   der
  1479. einzelnen Eingaben erkl╨ört wird. Wir empfehlen ihnen, in  jedem
  1480. Programm       bei       der      Datenbankdefinition       aus
  1481. ╨¬bersichtlichkeitsgr╨ænden  diese Kommentarzeile  zu  verwenden.
  1482. Vergessen  Sie  aber  nicht, die Anweisung REM  voranzustellen,
  1483. damit KIM diese Zeile als Kommentar erkennt.
  1484.  
  1485. REM      Bezeichnung     Typ    L╨önge    Nachkommastellen
  1486. feld1="  Name,            C,      20,         0"
  1487. feld2="  Vorname,         C,      20,         0"
  1488. feld3="  Adresse,         C,      50,         0"
  1489. feld4="  Kommentar,       M,      10,         0"
  1490. feld5=" "
  1491.  
  1492. Sie  erkennen,  da╤ü  ein  Feld mehr als  zur  Beschreibung  des
  1493. Datensatzes  definiert  wird.  Diesem  wird  aber  kein  Inhalt
  1494. zugewiesen. Wie bereits erl╨öutert dient dieses Feld  dazu,  das
  1495. Ende  einer  Datensatzstruktur  anzuzeigen.  Es  ist  unbedingt
  1496. notwendig,   eine   Datensatzstruktur   mit   einem    Leerfeld
  1497. abzuschlie╤üen,  ansonsten  kann die  Datenbank  nicht  ge╨ñffnet
  1498. werden.
  1499. Noch    eine    weitere   Vorbemerkung:   Aus    Gr╨ænden    der
  1500. ╨¬bersichtlichkeit   wurden  die  einzelnen   Feldbeschreibungen
  1501. tabulatorisch  eingegeben. Es ist aber nicht erlaubt,  bei  der
  1502. Feldbeschreibung  im Quellcode Tabulatoren  zu  verwenden.  Die
  1503. Datenbank kann sonst nicht erstellt werden.
  1504. Die  einzelnen  Feldeintr╨öge m╨æssen  jeweils  durch  ein  Komma
  1505. voneinander  getrennt  werden. Der erste Feldeintrag  legt  die
  1506. Feldbezeichnung  fest,  also welcher Inhalt  in  der  Variablen
  1507. erwartet  wird.  Dies  hat  nicht nur ╨¬bersichtlichkeitsgr╨ænde,
  1508. sondern  ist wichtig f╨ær die Datenbankverwaltung ╨æber  Indizes.
  1509. Indizes orientieren sich n╨ömlich an den Feldbezeichnungen.
  1510. Der  zweite Eintrag legt den Variablentyp fest. Auch dies  wird
  1511. n╨ömlich  Datenbankintern gesteuert. Obwohl ╨æber DIM  eigentlich
  1512. nur  Arrays von Stringvariablen erstellt werden k╨ñnnen,  k╨ñnnen
  1513. die    so   erzeugten   Variablen   innerhalb   der   Datenbank
  1514. umfunktioniert  werden.  Folgende Variablentypen  stehen  Ihnen
  1515. innerhalb der Datenbank zur Verf╨ægung:
  1516.  
  1517.     C       Stringvariable (c=character)
  1518.     N       Zahlenvariable (n=numerisch)
  1519.     M       Memo-Variable (m=memo)
  1520.     D       Datums-Variable (d=Datum)
  1521.     L/F     Logischer  Operator  (Boolescher  Operator,  True
  1522.             /False)
  1523.  
  1524. Geben Sie das Zeichen f╨ær den gew╨ænschten Variablentyp an,  und
  1525. innerhalb    der   Datenbank   verh╨ölt   sich   die    Variable
  1526. dementsprechend. Au╤üerhalb der Datenbank handelt es  allerdings
  1527. immer um eine Stringvariable, da sie ja mit DIM erstellt wurde.
  1528. Neu  ist die in KIM nicht vorhandene Variable des L-Typs. Diese
  1529. Variablen  d╨ærfen  nur  einen der beiden  logischen  Operatoren
  1530. ".TRUE."  oder  ".FALSE." bzw. ".YES." oder ".NO."  als  Inhalt
  1531. besitzen. An Ihrer Statt k╨ñnnen die Abk╨ærzungen ".T." und ".F."
  1532. bzw. ".Y." oder ".N." verwendet werden.
  1533. Der   dritte   Eintrag  in  der  Feldvariablen  definiert   die
  1534. Feldl╨önge. Die letzte Angabe schlie╤ülich bezieht sich  auf  die
  1535. Anzahl  der  erlaubten Nachkommastellen in der Variablen.  Hier
  1536. etwas  anderes als eine Null einzugeben ist nur sinnvoll,  wenn
  1537. Sie Dezimalzahlen als Eingabe in dieses Feld erwarten.
  1538.  
  1539.  
  1540.  
  1541. Die Indexstruktur
  1542. Ohne   Indexverwaltung  ist  eine  Datenbank  nicht   besonders
  1543. funktionsf╨öhig,    da   es   dann   unm╨ñglich    w╨öre,    Daten
  1544. herauszusuchen.  Die Daten w╨ærden einfach  in  der  Reihenfolge
  1545. ihrer  Abspeicherung in die Datenbank eingeordnet. Der  n╨öchste
  1546. Schritt  nach  der  Definition der Datensatzstruktur  mu╤ü  also
  1547. darin   bestehen,   eine  Indexstruktur   f╨ær   die   Datenbank
  1548. aufzubauen.
  1549. F╨ær  jede  gew╨ænschte Verwaltungsoperation mu╤ü eine gesondertes
  1550. Indexfeld  definiert  werden. M╨ñchten Sie  beispielsweise  alle
  1551. Datens╨ötze  nach  dem  Namen ordnen,  m╨æssen  Sie  hierf╨ær  ein
  1552. Indexfeld  generieren.  M╨ñchten Sie sich  aber  zus╨ötzlich  die
  1553. Option  offenhalten, alle Daten gesondert nach der  Adresse  zu
  1554. sortieren,  m╨æssen  Sie daf╨ær ein zweites  Indexfeld  erzeugen.
  1555. Beachten   Sie   aber   bitte,  da╤ü   sich   der   Umfang   der
  1556. (physikalischen)   Indexdatei   mit   jedem   neuen   Indexfeld
  1557. vergr╨ñ╤üert  und  damit  die Laufgeschwindigkeit  des  Programms
  1558. herabsetzt.  Um  dies  zu  vermeiden,  sollten  Sie   bei   der
  1559. Verwendung  von  mehreren Indexfeldern diese  in  verschiedenen
  1560. Indexdateien erzeugen. Wie wir sp╨öter sehen, wird  beim  Γòôffnen
  1561. der  Datenbank  jeweils  nur eine Indexdatei  ge╨ñffnet.  Andere
  1562. Indexdateien  werden nur auf Bedarf ge╨ñffnet  und  verlangsamen
  1563. daher die Laufgeschwindigkeit des Programms nicht.
  1564. Jedes  Indexfeld  wird durch eine Feldvariable beschrieben.  Es
  1565. gilt  also zun╨öchst wieder die erforderlichen Feldvariablen  zu
  1566. definieren,  wobei wie bei der Datensatzstruktur eine  Variable
  1567. mehr  als  notwendig f╨ær die Endkennung der Indexdatei erstellt
  1568. werden mu╤ü:
  1569.  
  1570.                         DIM index, 1, 3
  1571.  
  1572. Eine Indexdatei darf maximal 255 Indexfelder beinhalten.
  1573. Dann erfolgt die n╨öhere Beschreibung der Indexfelder. Auch hier
  1574. wollen wir zur Verdeutlichung eine Kommentarzeile voranstellen:
  1575.  
  1576. REM      Indexname      Ausdruck       Filter   Unique    Absteigend
  1577.  
  1578. Index1=" name_tag   ,  Name     , Name='Meier',   0,         0"
  1579. Index2=" adresse_tag,  Adresse  ,             ,   0,         0"
  1580. Index3=" "
  1581.  
  1582. Der  erste Eintrag in der Variablen legt die ID-Kennung f╨ær den
  1583. entsprechenden  Index  fest. ╨¬ber diesen  Indexnamen  kann  der
  1584. Index angesprochen werden.
  1585. Der Eintrag in der Rubrik "Ausdruck" bestimmt, auf welches Feld
  1586. des Datensatzes der entsprechende Index zeigt. Ist dieser Index
  1587. aktiviert,  dann  werden  alle Daten in  der  Bank  anhand  der
  1588. Eintragungen  in  diesem Datensatzfeld geordnet.  Des  weiteren
  1589. kann nur nach Daten in diesem Feld gesucht werden.
  1590. Es  steht  Ihnen aber frei, den Index gleichzeitig auf  mehrere
  1591. Datensatzfelder zu setzen. M╨ñchten Sie beispielsweise, da╤ü  die
  1592. Daten sowohl nach Namen als auch nach Vornamen sortiert werden,
  1593. geben  Sie  in  dieser Spalte "Name+Vorname" an. Die  Priorit╨öt
  1594. besitzt jeweils der erste Eintrag, also hier Name. Es kann dann
  1595. auch  nach  Daten  in beiden Feldern gesucht werden.  Dies  ist
  1596. besonders   dann  w╨ænschenswert,  wenn  der  gesuchte   Begriff
  1597. mehrfach  in der Datenbank erscheint. Es kann dann  anhand  der
  1598. Daten   im   zweiten  selektierten  Feld  eine   Unterscheidung
  1599. getroffen werden.
  1600. Eine  zus╨ötzliche  Option bei Suchaktionen  stellt  die  Rubrik
  1601. "Filter"  dar. Hier k╨ñnnen Sie Voreinstellungen definieren,  an
  1602. denen  sich  die Suche orientiert. Als Beispiel ist  im  ersten
  1603. Feld  ein Filter auf den Namen "Meier" gesetzt. Bei einer Suche
  1604. werden  dann nur Datens╨ötze ber╨æcksichtigt, die im Feld  "Name"
  1605. den  Eintrag "Meier" besitzen. Filter werden ╨æber Ausdr╨æcke der
  1606. dBASE-Sprache  und  nicht  mit KIM-Befehlen  erzeugt.  Aufgrund
  1607. Ihrer    Bedeutung    und   Ihres   Umfanges    sollen    diese
  1608. Filteroperationen  im  anschlie╤üenden  Unterkapitel   behandelt
  1609. werden.
  1610. Der  vierte  Feldeintrag "Unique" legt fest, ob ein Feldeintrag
  1611. in  der Datenbank mehrmals vorkommen darf oder nicht. Dies kann
  1612. beispielsweise dann der Fall sein, wenn mehrere Datens╨ötze  mit
  1613. dem   Namen   "Meier"  eingef╨ægt  werden  sollen  oder   nicht.
  1614. Unabh╨öngig  davon, ob sich die ╨æbrigen Feldeintr╨öge voneinander
  1615. unterscheiden  oder  nicht, k╨ñnnen Sie eine  Mehrfacheintragung
  1616. ╨æber  Unique  generell unterbinden. Setzen Sie f╨ær Unique  eine
  1617. Null, so sind Mehrfacheintr╨öge in dem Feld erlaubt, auf welches
  1618. der  entsprechende Index zeigt. Der Wert 1 f╨ær Unique  hingegen
  1619. verbietet  jegliche  Mehrfacheintragung in  dem  entsprechenden
  1620. Feld.
  1621. Sinnvoll   ist   die   Unterbindung  von   Mehrfacheintragungen
  1622. sicherlich  in  Datenfeldern, in denen  jeder  Wert  immer  nur
  1623. einmal  vorkommen darf (z.B. Kundennummern). Unsinnig  hingegen
  1624. ist dieses Verbot bei Feldern wie z.B. einer Datumseingabe,  da
  1625. hier Mehrfacheintragungen praktisch unvermeidlich sind.
  1626. ╨¬ber    "Aufsteigend"    schlie╤ülich   regulieren    Sie    den
  1627. Sortiervorgang in der Datenbank. Geben Sie hier eine Null  ein,
  1628. so  werden  alle Daten aufsteigend, also von a nach z geordnet,
  1629. falls dieser Index aktiviert ist. Eine 1 in dieser Rubrik f╨æhrt
  1630. hingegen zum absteigenden Sortieren, also von z nach a.
  1631.  
  1632. Filter
  1633. Wie  bereits erw╨öhnt besitzen Sie die M╨ñglichkeit, Suchaktionen
  1634. innerhalb  einer Datenbank zu beeinflussen, indem Sie  f╨ær  den
  1635. entsprechenden Index einen Filter setzen.  Diese Filter  werden
  1636. nicht  ╨æber  KIM-Befehle gesteuert, sondern ╨æber Ausdr╨æcke  aus
  1637. der  diesen  Datenbanken zugrunde liegenden  dBASE-Sprache.  Es
  1638. soll  hier  nicht ein vollst╨öndiger Einblick in  dBASE  gegeben
  1639. werden,  sondern  lediglich  eine  ╨¬bersicht  ╨æber  die  dBASE-
  1640. Anweisungen, die Sie zur Filterdefinition von Indizes brauchen.
  1641. Beachten  Sie  bitte,  da╤ü dBASE-Ausdr╨æcke  nur  innerhalb  der
  1642. Datenbank  G╨æltigkeit  besitzen. Im  normalen  KIM-Programmcode
  1643. sind  Sie  unwirksam  und verursachen als  unbekannte  Eingaben
  1644. Fehlermeldungen.   Bei   der  Erstellung   von   KIM-Programmen
  1645. ben╨ñtigen  Sie deshalb dBASE-Anweisungen nur bei der Erstellung
  1646. von  Indexfiltern  und  interaktiven  Abfragen  bei  Relationen
  1647. (siehe  sp╨öter). Im Anhang finden Sie eine kurze Einf╨æhrung  in
  1648. die  dBASE-Sprache. Sehen Sie dort bitte nach, wenn  Sie  nicht
  1649. alles verstehen, was in diesem Kapitel verwendet wird.
  1650. Setzen des Filters auf einen bestimmten Datenwert:
  1651. Wenn  Sie  m╨ñchten,  da╤ü nur Datens╨ötze angezeigt  werden,  die
  1652. einen  bestimmten  Eintrag  im vom Index  ausgezeichneten  Feld
  1653. besitzen,  setzen  Sie  einen Filter mit  diesem  Wert  in  das
  1654. Indexfeld.  M╨ñchten  Sie beispielsweise,  da╤ü  stets  nur  alle
  1655. Datens╨ötze  angezeigt werden, die den Namen "Meier" beinhalten,
  1656. so  gehen  Sie in das auf "Name" zeigende Indexfeld und  setzen
  1657. dort  den  Filter Name="Meier" . Dieser Filter  hat  nur  einen
  1658. Sinn,  wenn  er  im richtigen Indexfeld steht. Setzen  Sie  den
  1659. Filter   beispielsweise   in   das   Indexfeld,   welches   als
  1660. Suchausdruck "Vorname" enth╨ölt, wird kein Datensatz  bei  einer
  1661. Suchoperation gefunden werden, da nat╨ærlich kein  Datensatz  im
  1662. Feld Vorname den Eintrag "Meier" enth╨ölt.
  1663. Sinnvoll  wird dieser Filter vor allem, wenn Sie beispielsweise
  1664. nach  allen  Datens╨ötzen suchen wollen, die an einem bestimmten
  1665. Tag   gespeichert   wurden.  Dies  gelingt   mit   dem   Filter
  1666. Datum=Date(), den Sie in das Indexfeld setzen, welches auf  das
  1667. Feld  "Datum"  zeigt.  In  die  runde  Klammer  geben  Sie  das
  1668. gew╨ænschte Datum ein. Geben Sie dort kein Datum vor,  wird  das
  1669. aktuelle  Systemdatum  f╨ær  diese Anweisung  herangezogen.  Sie
  1670. k╨ñnnen  auch  nach  Datens╨ötzen suchen  lassen,  die  an  einem
  1671. bestimmten  Tag, in einem bestimmten Monat oder  Jahr  erstellt
  1672. wurden.  Hierzu  dienen die Filter Datum=Day(),  Datum=month(),
  1673. Datum=year().  Geben Sie jeweils das gew╨ænschte  Datum  in  die
  1674. runden  Klammern ein. Der Ausdruck sucht sich selbst╨öndig  Tag,
  1675. Monat  oder  Jahr heraus und wandelt dies in einen  numerischen
  1676. Zahlenwert  um.  Es ist auch m╨ñglich, hierbei  das  Systemdatum
  1677. vorzugeben. Setzen Sie dann einfach den Ausdruck date() in  die
  1678. runden Klammern, also z.B. Datum=Day(date()).
  1679. Beachten  Sie  bitte,  da╤ü  diese Filter  Priorit╨öt  vor  allen
  1680. anderen    KIM-Befehlen    besitzen.    Gleichg╨æltig     welche
  1681. Suchkriterien  Sie auf der Programmoberfl╨öche eingeben,  werden
  1682. nur  die  Datens╨ötze  ber╨æcksichtigt,  die  dem  Filterausdruck
  1683. entsprechen.
  1684.  
  1685.  
  1686. Vergleichsfilter
  1687. Selbstverst╨öndlich  ist  es  m╨ñglich.  Filter  nicht  nur   auf
  1688. bestimmte   Werte   zu  setzen,  sondern  beispielsweise   alle
  1689. Datens╨ötze  herauszufiltern, die nach  einem  bestimmten  Datum
  1690. eingegeben   wurden.  Sie  gehen  dabei  genauso   wie   gerade
  1691. beschrieben    vor,    nur    verwenden    Sie    statt     des
  1692. Gleichheitszeichens einen der folgenden Operatoren:
  1693.  
  1694.             <> (oder #) Ungleich
  1695.             <           Kleiner als
  1696.             >           Gr╨ñ╤üer als
  1697.             <=          Kleiner oder gleich
  1698.             >=          Gr╨ñ╤üer oder gleich
  1699.             $           enth╨ölt das folgende Zeichen
  1700.  
  1701. Mit  Hilfe  dieser dBASE-Vergleichsoperatoren ist  es  m╨ñglich,
  1702. Filter  zu erstellen, die bestimmte Datens╨ötze bei Suchaktionen
  1703. nicht ber╨æcksichtigen.
  1704. Sie  k╨ñnnen  auch  mehrere Vergleiche  durch  logische  d-BASE-
  1705. Operatoren  miteinander verkn╨æpfen. M╨ñchten Sie z.B.,  da╤ü  nur
  1706. Datens╨ötze ber╨æcksichtigt werden sollen, die zwischen  dem  12.
  1707. Tag  und  25.Tag eines Monats eingegeben wurden, so setzen  Sie
  1708. den  Filter  "Datum<=25  .AND.  Datum<=12".  dBASE  kennt  drei
  1709. logische Operatoren:
  1710.  
  1711.                 .NOT.        Nicht
  1712.                 .AND.        Und
  1713.                 .OR.         Oder
  1714.  
  1715. Beachten Sie bitte, da╤ü diese logischen Operatoren in dBASE von
  1716. Punkten eingerahmt sein m╨æssen.
  1717.  
  1718.  
  1719.  
  1720. Neuerstellung und ╨⌐ffnen einer DB
  1721. Der  Definitionsteil bei der Erstellung der Datenbank ist damit
  1722. abgeschlossen.  Wir k╨ñnnen nun daran gehen, die neue  Datenbank
  1723. aufzurufen. Dies geschieht mit
  1724.  
  1725.           ICREATE id_string, def_felder$, def_index$
  1726.  
  1727. F╨ær  id_string geben Sie die Bezeichnung der Datenbank an. ╨¬ber
  1728. die  Variable  def_felder$ legen Sie fest,  welches  Array  die
  1729. Definition  der Datensatzstruktur (Feldstruktur) der  Datenbank
  1730. enth╨ölt.  Letztendlich bestimmt def_index$, welches  Array  die
  1731. Definition der Indexstruktur enth╨ölt.
  1732. Durch  diesen  Befehl  werden die Dateien  "id_string.dbf"  und
  1733. id_string.mdx (cdx/ndx)" erstellt, wobei f╨ær id_string jeweils
  1734. die Bezeichnung der gerade erstellten Datenbank eingesetzt wird.
  1735. In diesen Dateien werden alle  Datens╨ötze  im  dBASE-Format und
  1736. eine Informationsdatei, welche die Indexstruktur der  Datenbank
  1737. enth╨ölt, gespeichert.
  1738. Deshalb mu╤ü der Inhalt dieser Dateien unbedingt mit dem  Aufbau
  1739. der  erstellten  Datenbank im Einklang  stehen.  Um  Fehler  zu
  1740. vermeiden  (wenn  beispielsweise zuf╨öllig bereits  gleichnamige
  1741. Dateien  vorhanden  sind), m╨æssen Sie alle Dateien  mit  diesen
  1742. Namen  vor der Erstellung der Datenbank l╨ñschen. Dies erreichen
  1743. Sie mit
  1744.  
  1745.                 KILL "id_string.dbf"
  1746.                 KILL "id_string.mdx"
  1747.  
  1748. Der  Befehl KILL l╨ñscht eine nachstehend angegebene Datei. Auch
  1749. hier   geben   Sie  f╨ær  id_string  die  Bezeichnung   der   zu
  1750. erstellenden Datenbank an.
  1751. Beachten  Sie  unbedingt, da╤ü die L╨ñschung dieser  Dateien  nur
  1752. dann  erfolgen  darf,  wenn Sie eine Datenbank  neu  erstellen.
  1753. W╨ærden   Sie  diese  Prozedur  vor  dem  ╨⌐ffnen  einer  bereits
  1754. bestehenden  Datenbank  durchf╨æhren,  w╨ærden  Sie   damit   den
  1755. gesamten Inhalt der Datenbank l╨ñschen!
  1756. Der  letzte Schritt besteht nun darin, die erstellte  Datenbank
  1757. zu  ╨ñffnen.  Gleichzeitig m╨æssen Sie die zugeh╨ñrige  Indexdatei
  1758. ╨ñffnen (Indexdateien werden nicht automatisch mit der Datenbank
  1759. ge╨ñffnet!!)  und  eines der darin enthaltenen  Indexfelder  zum
  1760. aktiven Index machen. Dazu ben╨ñtigen Sie drei Befehle:
  1761.  
  1762.                 IOPEN nr, id_string
  1763.                 IOPEN_INDEX nr, id_string
  1764.                 ISET nr, index$, expr$
  1765.  
  1766. Beim ╨⌐ffnen mit IOPEN erh╨ölt die Datenbank eine Kennummer (╨æber
  1767. nr),  ╨æber  die  sie mit allen folgenden Befehlen  angesprochen
  1768. werden  kann.  F╨ær  id_string geben  Sie  die  Bezeichnung  der
  1769. Datenbank ein. Dieselbe Bedeutung besitzen diese Variablen beim
  1770. Γòôffnungsbefehl IOPEN_INDEX f╨ær die Indexdatei. Es ist  ╨æbrigens
  1771. erlaubt, mehrere Indexdateien gleichzeitig zu ╨ñffnen, die  sich
  1772. auf  eine Datenbank beziehen. ISET legt schlie╤ülich den aktiven
  1773. Index  fest.  Geben Sie hier zun╨öchst die Nummer der  Datenbank
  1774. an,  auf die sich der Index beziehen soll. F╨ær index$ geben Sie
  1775. die  Bezeichnung des Indexfeldes in der Indexdatei an,  welches
  1776. aktiv sein soll. Expr$ ist eine R╨æckgabevariable. Hier wird  an
  1777. das  Programm zur╨æckgegeben, auf welches Feld im Datensatz  der
  1778. aktive Index zeigt.
  1779. Wir  wollen  als Zusammenfassung eine neue Datenbank erstellen,
  1780. bzw.  falls es diese bereits geben sollte, einfach nur  ╨ñffnen.
  1781. Im  letzteren  Fall  ist es nicht n╨ñtig, Datensatzstruktur  und
  1782. Indexstruktur neu zu definieren und sogar verboten, die Dateien
  1783. "id_string.dbf"     und     "id_string.mdx"     zu     l╨ñschen.
  1784. Programmtechnisch stellt dieses Problem eine  Verzweigung  dar.
  1785. Wir  fragen zu Beginn, ob es die Datenbankdatei "id_string.dbf"
  1786. schon  gibt.  Dies  erreichen wir mit dem Befehl  EXIST  (siehe
  1787. Referenzteil).  Ist die Datei bereits vorhanden,  springen  wir
  1788. gleich zur Γòôffnungsanweisung f╨ær die Datenbank. Andernfalls mu╤ü
  1789. zun╨öchst der Definitionsteil durchgef╨æhrt werden:
  1790.  
  1791. REM Zun╨öchst werden die ben╨ñtigten lokalen Variablen definiert
  1792. DEFSTRING expr
  1793. DEFFLOAT a
  1794. REM Jetzt die Abfrage, ob die Datenbank schon existiert
  1795. EXIST "test.dbf", a
  1796. IF a<>1 THEN
  1797.     REM Falls nein, dann mu╤ü Sie neu definiert werden
  1798.     dim feld,1,5
  1799.     dim index, 1, 3
  1800.  
  1801.     REM Zun╨öchst wird die Datensatzfeldstruktur definiert
  1802.     REM     Bezeichnung   Typ L╨önge    Nachkommastellen
  1803.     feld1="  NAME,        C,  20,         0"
  1804.     feld2="  VORNAME,     C,  20,         0"
  1805.     feld3="  ADRESSE,     C,  50,         0"
  1806.     feld4="  KOMMENTAR,   M,  10,         0"
  1807.     feld5=" "
  1808.  
  1809.      REM  Die Definition der Indexstruktur
  1810.      REM     Bezeichnung   Ausdruck   Filter    Unique   Aufst.
  1811.     Index1=" NAME_TAG   ,  NAME   , DEL()<>"*" ,   0,      0"
  1812.     Index2=  ADRESSE_TAG,  ADRESSE,            ,   0,      0"
  1813.     Index3=" "
  1814.  
  1815.     REM  Eventuelle alte Datenbankdateien l╨ñschen
  1816.     KILL "test.dbf"
  1817.     KILL "test.cdx"
  1818.  
  1819.     ICREATE "test", feld, index
  1820.  
  1821. ENDIF
  1822.  
  1823. REM  Die  Datenbank wird mitsamt Indexdatei ge╨ñffnet, das  Feld
  1824. REM  Name_tag als aktiver Index ausgew╨öhlt.
  1825.  
  1826. IOPEN 1, "test"
  1827. IOPEN_INDEX 1, "test"
  1828. ISET 1, "NAME_TAG", expr
  1829.  
  1830. Diese  Codesequenz  k╨ñnnen Sie als Modul zur  Erstellung  einer
  1831. Datenbank  in  ein Programm einbauen. F╨ær sich alleine  ist  es
  1832. aber  selbstverst╨öndlich nicht lauff╨öhig, da das ganze Ambiente
  1833. wie Programmoberfl╨öche usw. noch fehlt.
  1834.  
  1835.  
  1836. Zus╨ötzliche Indexdatei und Reorg.
  1837. Wie bereits bemerkt wurde, mu╤ü f╨ær das Setzen eines neuen Index
  1838. ein   Indexfeld   in   der  Indexdatei  erstellt   werden.   Da
  1839. Indexdateien    physikalische   Dateien    sind,    wird    die
  1840. Laufgeschwindigkeit des Programms um so mehr  herabgesetzt,  je
  1841. gr╨ñ╤üer  die  zugeh╨ñrige Indexdatei ist. Falls Sie sich  mehrere
  1842. Indexoptionen offenhalten wollen, ist es daher ratsam, die dazu
  1843. erforderlichen  Indexfelder  in verschiedenen  Indexdateien  zu
  1844. definieren.   Es  ist  n╨ömlich  erlaubt,  mehrere  Indexdateien
  1845. gleichzeitig  zu  ╨ñffnen,  die  sich  auf  dieselbe   Datenbank
  1846. beziehen.   Ein  zus╨ötzliche  Indexdatei  l╨ö╤üt  sich  jederzeit
  1847. innerhalb  des  Programms erstellen. Gehen Sie  dabei  zun╨öchst
  1848. genauso  vor  wie bei der Basisindexdatei. Definieren  Sie  die
  1849. gew╨ænschten Indexfelder:
  1850.  
  1851. DIM ZINDEX 1,2
  1852. REM        Bezeichnung     Ausdruck   Filter      Unique  Aufst.
  1853. ZIndex1=   "VORNAME_TAG  ,  VORNAME   ,    ,        0 ,    0"
  1854. ZIndex2=""
  1855.  
  1856. Beachten  Sie  bitte,  da╤ü Sie f╨ær die neue  Indexdatei  andere
  1857. Feldbezeichnungen verwenden m╨æssen als f╨ær die Basisindexdatei.
  1858. Des  weiteren  mu╤ü  die  neue Indexdatei  einen  anderen  Namen
  1859. erhalten als die Basisindexdatei, die  ja denselben Namen tr╨ögt
  1860. wie die Datenbank. Damit wird aber bei der Erstellung der neuen
  1861. Indexdatei  eine zus╨ötzliche Datei "*.mdx" erzeugt  (wobei  f╨ær
  1862. den  Platzhalter  *  der  Name der neuen  Indexdatei  eingef╨ægt
  1863. wird).  Analog  zu  unserem Vorgehen bei der Neuerstellung  der
  1864. Datenbank  mu╤ü vor der Neuerstellung dieser Datei "*.mdx"  jede
  1865. Datei desselben Namens gel╨ñscht werden. Nehmen wir an, da╤ü  die
  1866. neue  Indexdatei den Namen "testx" erhalten soll,  dann  m╨æssen
  1867. Sie eingeben:
  1868.  
  1869.                        KILL "testx.mdx"
  1870.  
  1871. Nun k╨ñnnen wir die neue Indexdatei generieren:
  1872.  
  1873.               IMAKEINDEX nr, indexname, indexfeld
  1874.  
  1875. F╨ær  nr  geben  Sie die Kennung der zugeh╨ñrigen Datenbank  ein.
  1876. Anstelle der Variablen indexname geben Sie die Bezeichnung  der
  1877. neuen Indexdatei an, hier "testx". Wie gesagt darf dieser  Name
  1878. nicht   identisch  sein  mit  demjenigen  der  Basisindexdatei.
  1879. Keinesfalls darf eine  Endung (z.B. cdx/mdx) an den  Indexnamen
  1880. angef╨ægt werden! F╨ær indexfeld schlie╤ülich geben Sie den  Namen
  1881. der  Feldvariablen  an, ╨æber die die neuen Indexfelder  erzeugt
  1882. wurden, also in unserem Beispiel "zindex".
  1883. Diese  Indexdatei  kann  danach  wie  gewohnt  mit  IOPEN_INDEX
  1884. ge╨ñffnet  werden.  Mit ISET sind Sie dann in  der  Lage,  einen
  1885. Index  der  neuen  Datei zu aktivieren. Es  steht  Ihnen  frei,
  1886. innerhalb  eines  Programms  beliebig  viele  Indexdateien   zu
  1887. erzeugen.  Sollten  wider Erwarten w╨öhrend des  Programmablaufs
  1888. Fehler  in  einer  Indexdatei  auftreten,  so  haben  Sie   die
  1889. M╨ñglichkeit, eine Reorganisation der Indexdatei durchzuf╨æhren:
  1890.  
  1891.                           IREINDEX nr
  1892.  
  1893. Damit  werden  alle ge╨ñffneten Indexdateien reorganisiert,  die
  1894. zur entsprechenden Datenbank (╨æber nr angesprochen) geh╨ñren.
  1895.  
  1896.  
  1897. Schlie╤üen von Datenbanken und Indizes
  1898. Sie   k╨ñnnen   mit   Hilfe  eines  Befehles   alle   ge╨ñffneten
  1899. Indexdateien einer Datenbank schlie╤üen:
  1900.  
  1901.                         ICLOSE_INDEX nr
  1902.  
  1903. Es  werden  alle Indexdateien der Datenbank geschlossen,  deren
  1904. Kennummer  Sie  f╨ær nr eingegeben haben. Die  Datenbank  selbst
  1905. bleibt aber ge╨ñffnet!!
  1906. Am   Ende   eines   Programmes  mu╤ü  die  ge╨ñffnete   Datenbank
  1907. geschlossen werden, um alle Inhalt darin auf die Festplatte  in
  1908. der .dbf-Datei zu speichern. Dies geschieht mit
  1909.  
  1910.                            ICLOSE nr
  1911.  
  1912. Auch  hier  geben Sie f╨ær nr die Bezeichnung der entsprechenden
  1913. Datenbank  an.  Au╤üer  der  Datenbank werden  alle  zugeh╨ñrigen
  1914. Indexdateien mit dieser Anweisung geschlossen und die aktuellen
  1915. Inhalte der Datenbank- und Indexdateien gespeichert. F╨æhren Sie
  1916. diesen Befehl unbedingt am Programmende aus, sonst kann  es  zu
  1917. Datenverlusten kommen!
  1918. Haben  Sie mehrere Datenbanken ge╨ñffnet, k╨ñnnen Sie diese  alle
  1919. mit  ICLOSE  schlie╤üen,  wenn Sie  als  Kennummer  f╨ær  die  zu
  1920. schlie╤üende  Datenbank  99  eingeben.  Daraufhin  werden   alle
  1921. offenen Datenbanken und Indexdateien geschlossen.
  1922.  
  1923.  
  1924. Hinzuf╨ægen und Entfernen
  1925. Wir  wollen  uns  nun  der Bearbeitung  von  Datens╨ötzen  einer
  1926. Datenbank  zuwenden.  Daf╨ær mu╤ü eine  Datenbank  aber  zun╨öchst
  1927. Datens╨ötze  enthalten. Ein neuer Datensatz mu╤ü zun╨öchst  einmal
  1928. in  die  Eingabefelder  auf  der Programmoberfl╨öche  eingegeben
  1929. werden. Anschlie╤üend werden die Daten in die den Eingabefeldern
  1930. zugrunde liegenden Variablen, welche die Recordstruktur bilden,
  1931. ╨æbergeben.  Dies  ist uns alles bereits aus  dem  Kapitel  ╨æber
  1932. Eingabefelder   bekannt.  Jetzt  m╨æssen  die  Daten   aus   der
  1933. Recordstruktur der Datenbank angef╨ægt werden. Dies gelingt mit
  1934.  
  1935.                           IADD nr, s$
  1936.  
  1937. Zun╨öchst  mu╤ü wieder die Kennummer der entsprechenden Datenbank
  1938. aufgef╨æhrt  werden. Anschlie╤üend ist f╨ær s$  der  Feldname  der
  1939. Recordstruktur anzugeben, aus der ein Datensatz  der  Datenbank
  1940. angef╨ægt werden soll.
  1941. Der   neue   Datensatz  wird  automatisch  von  der  Indexdatei
  1942. entsprechend  des aktiven Index einsortiert. Gleichzeitig  wird
  1943. der  neue  Datensatz zum aktuellen Datensatz gemacht. In  einer
  1944. Datenbank  ist immer ein Datensatz der aktuelle Datensatz.  Nur
  1945. der aktuelle Datensatz kann mit Befehlen bearbeitet werden.
  1946. Man  mu╤ü  sich dabei vorstellen, da╤ü ein Datenbank  intern  mit
  1947. einer     Markierung    versehen    wird,    dem    sogenannten
  1948. Datenbanksatzzeiger.  Der  Datensatz,  auf  den  dieser  Zeiger
  1949. deutet, ist der aktuelle Datensatz:
  1950.  
  1951.  
  1952. Datenbankzeiger
  1953. Der  jeweils aktuelle Datensatz kann aus der Datenbank entfernt
  1954. werden. Dies geschieht bei Datenbanken im dBASE-Format in  zwei
  1955. Etappen.  Zun╨öchst  wird  der aktuelle Datensatz  als  gel╨ñscht
  1956. markiert. Dies erreicht man mit dem Befehl:
  1957.  
  1958.                             IDEL nr
  1959.  
  1960. F╨ær  nr  m╨æssen  Sie wie ╨æblich die Bezeichnung  der  Datenbank
  1961. angeben,  aus  der  ein  Datensatz entfernt  werden  soll.  Der
  1962. Datenbanksatzzeiger wird automatisch auf den n╨öchsten Datensatz
  1963. gestellt, der dadurch aktueller Satz wird.
  1964. Damit  ist  der  Datensatz aber noch nicht endg╨æltig  gel╨ñscht,
  1965. sondern  nur  als  zum  L╨ñschen markiert.  Die  Operation  kann
  1966. r╨æckg╨öngig gemacht werden mit
  1967.  
  1968.                            IUNDEL nr
  1969.  
  1970. Auch  hier steht nr f╨ær die Datenbankbezeichnung. Es  wird  die
  1971. L╨ñschmarkierung  vom  aktuellen Datensatz entfernt  und  dieser
  1972. damit zu einem ganz normalen Datensatz.
  1973. Wenn Sie genau aufgepa╤üt haben, ist Ihnen nicht entgangen,  da╤ü
  1974. mit IDEL der Datenbanksatzzeiger automatisch weiterbewegt wird.
  1975. IUNDEL  wirkt aber seinerseits nur auf den aktuellen Datensatz.
  1976. Bevor  die L╨ñschung mit IUNDEL wieder r╨æckg╨öngig gemacht werden
  1977. kann,  mu╤ü der Datenbanksatzzeiger auf den markierten Datensatz
  1978. bewegt  werden. Wie dies m╨ñglich ist, erfahren Sie im  n╨öchsten
  1979. Kapitel.   Wenn  Sie  die  L╨ñschung unmittelbar  danach  wieder
  1980. r╨æckg╨öngig  machen  wollen, ist dies relativ  einfach,  da  der
  1981. Datenbanksatzzeiger einfach wieder um einen Satz  zur╨æckgesetzt
  1982. werden  mu╤ü (mit IPREV). Viel schwieriger ist es, die  L╨ñschung
  1983. zu   einem   sp╨öteren  Zeitpunkt  r╨æckg╨öngig  zu  machen.   Der
  1984. Datenbanksatzzeiger  kann  nat╨ærlich  mittlerweile  sehr   weit
  1985. entfernt  vom  gel╨ñschten Datensatz sein.  Die  L╨ñsung  besteht
  1986. darin,  den Datenbanksatzzeiger Schritt f╨ær Schritt  durch  die
  1987. Datenbank  zu bewegen und bei jedem Datensatz nachzufragen,  ob
  1988. dieser als gel╨ñscht markiert ist. Diese Nachfrage f╨æhrt man mit
  1989. folgender Anweisung durch:
  1990.  
  1991.                        IDELCHECK nr, ok
  1992.  
  1993. Der  aktuelle Datensatz der ╨æber nr gekennzeichneten  Datenbank
  1994. wird daraufhin ╨æberpr╨æft, ob er zur L╨ñschung markiert ist. ╨¬ber
  1995. ok liefert der Befehl dem Programm das Resultat der ╨¬berpr╨æfung
  1996. zur╨æck.  Erh╨ölt ok den Wert 0, ist der Datensatz  als  gel╨ñscht
  1997. markiert.  Ansonsten  handelt es sich um  einen  ganz  normalen
  1998. Datensatz.
  1999. Zur   Verdeutlichung   wollen  wir  ein  kleines   Suchprogramm
  2000. vorstellen,   das  einen  als  gel╨ñscht  markierten   Datensatz
  2001. aufsp╨æren  soll.  Die  Befehle  ISTART  und  INEXT  wollen  wir
  2002. unkommentiert  verwenden,  sie  werden  im  n╨öchsten  Abschnitt
  2003. vorgestellt:
  2004.  
  2005. REM   Der   aktuelle  Datensatz  wird   ╨æberpr╨æft
  2006. IDELCHECK nr, ok
  2007. WHILE ok<>0
  2008.   REM  Ist dieser nicht markiert, wird der n╨öchste Satz kontrolliert
  2009.   INEXT nr, pos, s$
  2010.   IDELCHECK nr, ok
  2011.   REM   Ist   das  Datenbankende  erreicht,kehrt man
  2012.   REM   zum Datenbankanfang zur╨æck
  2013.   IF pos=3 AND ok<>0 THEN
  2014.      ISTART nr, s$
  2015.   ENDIF
  2016. WEND
  2017.  
  2018. Selbstverst╨öndlich ist dieses Beispielprogramm f╨ær sich alleine
  2019. nicht lauff╨öhig. Es mu╤ü in ein vollst╨öndiges Programm eingebaut
  2020. werden. Zum Abschlu╤ü sei noch eine M╨ñglichkeit erw╨öhnt, wie ein
  2021. als gel╨ñscht markierter Datensatz in einer ge╨ñffneten Datenbank
  2022. unwiederbringlich entfernt werden kann. Geben Sie hierzu ein:
  2023.  
  2024.                            IPACK nr
  2025.  
  2026. Es   werden   dann   alle   markierten   Datens╨ötze   aus   der
  2027. entsprechenden  Datenbank  irreversibel  gel╨ñscht.  Die  Anzahl
  2028. aller in einer Datenbank vorhandenen Datens╨ötze l╨ö╤üt sich mit
  2029.  
  2030.                         ILEN nr, laenge
  2031.  
  2032. ermitteln.  Mit nr legen Sie entsprechende Datenbank  ╨æber  ihr
  2033. Handle   fest.  ╨¬ber  die  Variable  laenge  wird  Ihnen   dann
  2034. mitgeteilt, wieviele Datens╨ötze dort enthalten sind.
  2035.  
  2036.  
  2037. Bewegen des Datenbankzeigers
  2038. Im   vorhergehenden   Abschnitt  haben   wir   bereits   einige
  2039. M╨ñglichkeiten kennengelernt, den Datenbanksatzzeiger  innerhalb
  2040. der  Datenbank von einem Datensatz zu einem anderen zu bewegen.
  2041. Hier  sollen  alle diesbez╨æglichen Anweisungen zusammengestellt
  2042. werden.
  2043. Will  man den Datenbanksatzzeiger um einen Datensatz gem╨ö╤ü  des
  2044. aktuellen Index weiter bewegen, verwendet man INEXT:
  2045.  
  2046.                        INEXT nr, pos, s$
  2047.  
  2048. In  der mit nr angesprochenen Datenbank wird der Zeiger um eine
  2049. Position weiter bewegt. Die Variable pos dient zur R╨æckgabe der
  2050. Information,  ob  der  Datenbankanfang oder  das  Datenbankende
  2051. erreicht  worden  sind. Im ersteren Fall erh╨ölt  pos  den  Wert
  2052. pos=4,  im  andern  Fall  den Wert  pos=3.  Ist  das  Dateiende
  2053. erreicht,  wird der Datenbanksatzzeiger nicht weiter verstellt,
  2054. der letzte Satz bleibt aktiviert.
  2055. Mit  s$  geben  Sie  die Recordstruktur an,  in  die  der  neue
  2056. aktuelle  Datensatz geladen werden soll. Von dort aus  kann  er
  2057. den Eingabefeldern zur Bildschirmausgabe ╨æbergeben werden.
  2058. Der Zeiger wird mit IPREV um einen Datensatz zur╨æckgesetzt:
  2059.  
  2060.                        IPREV nr, pos, s$
  2061.  
  2062. Die  Variablen haben dieselbe Bedeutung wie bei INEXT. Ist  der
  2063. Datenbankanfang erreicht, wird der Zeiger nicht mehr verstellt.
  2064. Der erste Datensatz bleibt aktuell.
  2065. Diese  beiden Befehle eignen sich hervorragend zum Bl╨öttern  in
  2066. einer  Datenbank.  Wir werden sp╨öter in den  Beispielprogrammen
  2067. viel von diesen Befehlen Gebrauch machen.
  2068. Sie haben auch die M╨ñglichkeit, den Zeiger zum Anfang oder Ende
  2069. der Datenbank zu bewegen. Ersteres gelingt mit ISTART, letzeres
  2070. mit IENDE:
  2071.  
  2072.                     ISTART nr, s$
  2073.                     IENDE nr, s$
  2074.  
  2075. ╨¬ber   nr   sprechen  Sie  die  Datenbank  an,  s$   legt   die
  2076. Recordstruktur  fest, der der neue Datensatz zugewiesen  werden
  2077. soll.
  2078. Eine zus╨ötzliche Bewegung n╨ætzt die Nummern aus, die Datens╨ötze
  2079. bei  ihrer  Aufnahme  in  eine Datenbank automatisch  erhalten.
  2080. Diese  Nummern sind unver╨önderlich und unabh╨öngig  davon,  nach
  2081. welchem Kriterium die Datenbank sortiert wird.
  2082. Die Nummer des aktuellen Datensatzes erfahren sie mit
  2083.  
  2084.                         IGET_NR nr, pos
  2085.  
  2086. ╨¬ber   die   Variable   pos  wird  die   entsprechende   Nummer
  2087. zur╨æckgegeben.  Sie k╨ñnnen diese vermerken  und  den  Datensatz
  2088. dann wie folgt ansprechen:
  2089.  
  2090.                         IGO_NR nr, pos
  2091.  
  2092. Der  Datensatzzeiger wird nun auf den Datensatz mit der in  pos
  2093. vermerkten Nummer gesetzt und damit zum aktuellen Datensatz.
  2094. Wenden Sie die Befehle zum Bewegen des Datenbanksatzzeigers  in
  2095. einer  Datenbank an, die keine Datens╨ötze enth╨ölt, so  bekommen
  2096. Sie  als  Quittung eine Fehlermeldung, da╤ü keine Daten  in  der
  2097. Datenbank gespeichert sind.
  2098.  
  2099.  
  2100. Suchen und Laden
  2101. Wir  wollen nun versuchen, einen bestimmten Datensatz  aus  der
  2102. Datenbank  herauszusuchen und auf dem  Bildschirm  anzeigen  zu
  2103. lassen.  Der  erste Schritt mu╤ü nat╨ærlich darin  bestehen,  dem
  2104. Anwender die Eingabe einer Suchvorgabe zu erm╨ñglichen. Wie dies
  2105. programmtechnisch  realisiert  wird,  werden  wir   sp╨öter   in
  2106. Beispielprogrammen   kennenlernen.   Uns    soll    hier    nur
  2107. interessieren,  da╤ü der zu suchende Begriff (der Schl╨æsselwert)
  2108. letztendlich in einem Eingabefeld erscheinen mu╤ü, von wo er  in
  2109. die entsprechende Variable der Recordstruktur eingelesen werden
  2110. kann.
  2111. Aus   der  Recordstruktur  kann  die  Suchvorgabe  leicht   der
  2112. Datenbank ╨æbergeben werden, n╨ömlich mit
  2113.  
  2114.                  IREAD nr, ok, suchstring$, s$
  2115.  
  2116. Aus  der  Variable suchstring$ der Recordstruktur s$  wird  der
  2117. entsprechende  Begriff in die Datenbank mit bei nr  angegebenen
  2118. Bezeichnung eingelesen. Es beginnt automatisch die  Suche  nach
  2119. diesem  Begriff.  Das  Ergebnis  wird  ╨æber  die  Variable   ok
  2120. mitgeteilt.  Kann der Begriff gefunden werden,  erh╨ölt  ok  den
  2121. Wert 0, ansonsten wird ein Wert ungleich Null ╨æbergeben.
  2122. Der  Datenbanksatzzeiger wird nun auf den  Datensatz  gestellt,
  2123. der  den Suchbegriff enth╨ölt. Beachten Sie aber bitte, da╤ü  das
  2124. Suchkriterium  mit  dem aktiven Index ╨æbereinstimmen  mu╤ü.  Sie
  2125. k╨ñnnen beispielsweise nicht nach einer Adresse suchen, wenn der
  2126. Index auf das Feld "Name" gesetzt ist.
  2127. Um  den aktuellen Datensatz in die Variablen der Recordstruktur
  2128. einzulesen, bedienen Sie sich der Anweisung IGETREC:
  2129.  
  2130.                         IGETREC nr, s$
  2131.  
  2132. F╨ær  nr geben Sie wie ╨æblich die Bezeichnung der Datenbank  an,
  2133. aus der der aktuelle Datensatz herausgeholt werden soll. Mit s$
  2134. legen  Sie  die Recordstruktur fest, in welche die Inhalte  der
  2135. Datenbank ╨æbergeben werden sollen.
  2136. Um  den  herausgesuchten Datensatz auf dem Monitor  anzuzeigen,
  2137. mu╤ü  nur  noch  der Inhalt der Recordstruktur in Eingabefeldern
  2138. angezeigt  werden.  Wie  dies mit SET_ITEM_ARRAY  funktioniert,
  2139. haben wir bereits im Kapitel ╨æber Eingabefelder kennengelernt.
  2140. Es  ist  auch m╨ñglich, mehrere Datens╨ötze gleichzeitig  in  ein
  2141. Array  einzulesen.  Dies ist besonders bei der  Erstellung  von
  2142. Listen vorteilhaft. Eine Liste sollte ja nach M╨ñglichkeit  alle
  2143. Datens╨ötze  einer Datenbank anzeigen k╨ñnnen. Damit  dazu  nicht
  2144. viele  Male  nacheinander IGETREC eingesetzt werden mu╤ü,  steht
  2145. Ihnen folgendes zur Verf╨ægung:
  2146.  
  2147. IGETREC_ARRAY nr, flag, trenn$, dbstruct$, array$, start, ende,
  2148.                        feld1, feld2, ..
  2149.  
  2150. Der  etwas  ausf╨æhrlichere Parameterblock  l╨ö╤üt  Ihnen  einigen
  2151. Spielraum  bei der Listenerstellung. Zun╨öchst mu╤ü die Kennummer
  2152. der  Datenbank  (nr) angegeben werden. Anschlie╤üend  legen  Sie
  2153. ╨æber  flag fest, welche Datens╨ötze au╤üer dem aktuellen  in  die
  2154. Liste  hineingenommen werden sollen. Mit flag=0 erreichen  Sie,
  2155. da╤ü  vom  aktuellen  Datensatz  aus  die  folgenden  Datens╨ötze
  2156. angesprochen  werden,  w╨öhrend flag=1 die  Datens╨ötze  vor  dem
  2157. aktuellen aktiviert.
  2158.  
  2159. In einer Liste wird der Inhalt einer Datenbank normalerweise so
  2160. angezeigt, da╤ü die Eintr╨öge in den einzelnen Variablen feld1  ,
  2161. feld2 usw. untereinander angeordnet werden.
  2162.  
  2163. Um  dies  zu  erreichen,  m╨æssen die Felder  eines  Datensatzes
  2164. wieder     voneinander     getrennt    werden.    Dies     wird
  2165. programmtechnisch  dadurch  erreicht,  da╤ü   ein   Trennzeichen
  2166. zwischen  die einzelnen Datensatzfelder eingef╨ægt wird.  Dieses
  2167. Trennzeichen k╨ñnnen Sie ╨æber trenn$ selektieren.
  2168. Als  n╨öchstes  gilt  es, die Feldvariablen anzugeben,  die  die
  2169. Datenbankstruktur aufbauen. In unserem obigen Beispiel handelte
  2170. es  sich um die Variablen feld1 bis feld4. ╨¬ber array$ wird das
  2171. Array bestimmt, in das die entsprechenden Inhalte der Datenbank
  2172. eingelesen werden sollen. Hierbei legen Sie mit start und  ende
  2173. die erste und die letzte zu benutzende Variable in diesem Array
  2174. fest.
  2175. Letztendlich  geben  Sie diejenigen Datenbankfeldvariablen  an,
  2176. deren  Inhalte in die Liste ╨æbergeben werden sollen. Sie  haben
  2177. also   die  M╨ñglichkeit,  gezielt  nur  Teile  von  Datens╨ötzen
  2178. anzeigen  zu  lassen. M╨ñchten Sie in unserem obigen graphischen
  2179. Beispiel  nur jeweils den Namen und den Vornamen in  der  Liste
  2180. auff╨æhren, so geben Sie nur feld1 und feld2 an und lassen feld3
  2181. unberБcksichtigt.
  2182.  
  2183.  
  2184. Оndern
  2185. Nat╨ærlich  mu╤ü  es  eine M╨ñglichkeit geben,  in  der  Datenbank
  2186. bereits  vorhandene Datens╨ötze nachtr╨öglich wieder  zu  ╨öndern.
  2187. Hierzu  sucht  man zun╨öchst den gew╨ænschten Datensatz  aus  der
  2188. Datenbank  heraus,  damit er zum aktuellen Datensatz  wird  und
  2189. l╨ö╤üt sich diesen am Bildschirm anzeigen.
  2190. Nun  f╨æhren  Sie  in  den  Datenfeldern  der  Eingabemaske  die
  2191. gew╨ænschten  ΓöÇnderungen  durch. Der  neue  Inhalt  mu╤ü  in  die
  2192. Variablen  der  Recordstruktur ╨æbergeben  werden.  Anschlie╤üend
  2193. wird die folgende Anweisung aufgerufen:
  2194.  
  2195.                         IMODREC nr, s$
  2196.  
  2197. Der  aktuelle  Datensatz  in der mit nr bezeichneten  Datenbank
  2198. wird mit dem Inhalt der Recordstruktur s$ ╨æberschrieben.
  2199. Wir  wollen zur Verdeutlichung ein kleines Modul erstellen, da╤ü
  2200. eine   Speicherung   der  am  Monitor   in   den   Datenfeldern
  2201. vorgenommenen  ΓöÇnderungen erm╨ñglicht. F╨ær sich alleine  ist  es
  2202. nat╨ærlich  nicht  lauff╨öhig.  Wir wollen  davon  ausgehen,  da╤ü
  2203. bereits  der  aktuelle Datensatz in der Recordstruktur  geladen
  2204. und  am  Monitor angezeigt ist. Es existieren drei  Datenfelder
  2205. "Name",   "Vorname"   und  "Adresse".  Analog   sind   in   der
  2206. Recordstruktur   drei  Variablen  s1  bis  s3  enthalten.   Die
  2207. ΓöÇnderungen werden jetzt am Bildschirm vorgenommen, anschlie╤üend
  2208. mit Aktivierung eines Men╨æbefehls folgendes Modul aufgerufen:
  2209.  
  2210.  
  2211.             MODUL Daten_speichern ()
  2212.             GET_ITEM "Name", s1
  2213.             GET_ITEM "Vorname", s2
  2214.             GET_ITEM "Adresse", s3
  2215.             IMODREC 1, s
  2216.  
  2217. Mehr  ist nicht notwendig, da der aktuelle Datensatz je bereits
  2218. am  Monitor angezeigt ist. Es erfolgt lediglich ein Umschreiben
  2219. der  Daten  in der Datenbank. Die Anweisung GET_ITEM  wurde  im
  2220. Kapitel  ╨æber  Datenfelder erl╨öutert. Hiermit wird  der  Inhalt
  2221. eines Datenfeldes in eine Variable ╨æbergeben.
  2222.  
  2223.  
  2224. Ermitteln der Feldstruktur
  2225. Sollte  aus irgendeinem Grund der Fall eintreten, da╤ü  Sie  mit
  2226. einer  Datenbank  arbeiten  m╨æssen, deren  Aufbau  Ihnen  nicht
  2227. bekannt ist, brauchen Sie nicht zu verzweifeln. KIM h╨ölt  einen
  2228. Befehl  bereit,  der die Feldstruktur einer Datenbank  und  der
  2229. zugeh╨ñrigen  Indexdatei selbst╨öndig ermittelt. Es handelt  sich
  2230. dabei um
  2231.  
  2232.           IGETSTRUCT nr, def_felder, def_index, zahl
  2233.  
  2234. Sie  m╨æssen  lediglich die Kennummer der gew╨ænschten  Datenbank
  2235. vorgeben.  Zur╨æckgegeben wird Ihnen dann  ╨æber  def_felder  die
  2236. Feldstruktur der Datenbank, ╨æber def_index die Feldstruktur der
  2237. Indexdatei und ╨æber zahl die Gesamtanzahl der Feldnamen in  der
  2238. Datenbank.
  2239. Somit  entspricht der Aufbau der R╨æckgabewerte denen im  Befehl
  2240. ICREATE. Zur Verdeutlichung wollen wir ein kleines Programmodul
  2241. entwickeln,  welches  den  Aufbau  einer  Datenbank  ermittelt.
  2242. Zun╨öchst  m╨æssen  die  ben╨ñtigten Variablen  definiert  werden,
  2243. wobei   sinnvollerweise  bei  def_felder  und   def_index   die
  2244. Maximalzahl  an  m╨ñglichen  Feldvariablen  in  Datenbank-   und
  2245. Indexdatei, n╨ömlich 255, angegeben werden sollten. Anschlie╤üend
  2246. wird die Datenbank ge╨ñffnet und die Struktur ermittelt:
  2247.  
  2248.         REM Ermittlung der Feldstruktur einer Datenbank
  2249.         deffloat zahl, i
  2250.         dim felder, 1, 255
  2251.         dim index, 1, 255
  2252.         dim def_felder, 1, 255
  2253.         dim def_index, 1, 255
  2254.         iopen 1, datei
  2255.         istart 1, felder
  2256.         igetstruct 1, def_felder, def_index, zahl
  2257.  
  2258.  
  2259. ΓòÉΓòÉΓòÉ 10. Eingabefelder ΓòÉΓòÉΓòÉ
  2260.  
  2261. Eingabefelder
  2262.  
  2263. Ъbersicht
  2264. In diesem Kapitel werden Sie alles ╨æber Eingabefelder erfahren.
  2265. Eingabefelder  besitzen  eine  essentielle  Bedeutung  bei  der
  2266. Kommunikation zwischen Anwender und Datenbankprogramm. ╨¬ber sie
  2267. verl╨öuft Dateiein- und ausgabe.
  2268. KIM  h╨ölt vier unterschiedliche Typen von Eingabefelder f╨ær Sie
  2269. bereit, die der Reihe nach behandelt werden. Es soll aufgezeigt
  2270. werden,  wie  die  Felder  ╨æber  bestimmte  Variablen  mit  dem
  2271. eigentlichen Programm verkn╨æpft sind.
  2272. Den  Abschlu╤ü  des  ersten  Teils dieses  Kapitels  bilden  die
  2273. verschiedenen  Optionen, mit denen der  eingegebene  Feldinhalt
  2274. nachtr╨öglich formatiert, bearbeitet und ver╨öndert werden kann.
  2275. Im  zweiten Abschnitt werden Sie eine M╨ñglichkeit kennenlernen,
  2276. wie   Eingabefelder  und  sogar  ganze  Feldmasken   auf   viel
  2277. einfachere  Art  und Weise als ╨æber die Definition  "per  Hand"
  2278. erzeugt  werden  k╨ñnnen. Hierzu dient der  Maskengenerator.  Es
  2279. wird die Handhabung dieses Utility-Programmes erkl╨ört, wie  man
  2280. neue  Feldobjekte erstellt und diese nachtr╨öglich  modifizieren
  2281. kann.
  2282. Zum   Schlu╤ü  folgt  ein  Ausblick  f╨ær  professionellere  KIM-
  2283. Anwender.  Es  wird erl╨öutert, wie einige Voreinstellungen  des
  2284. Maskengenerators  ╨æber den Quellcode bzw.  die  Betriebssysteme
  2285. modifiziert   werden  k╨ñnnen.  Dazu  wird  der  Quellcode   des
  2286. Maskengenerators absichtlich unverschl╨æsselt mitgeliefert.  Von
  2287. dieser  M╨ñglichkeit  sollten aber nur ge╨æbte  KIM-Programmierer
  2288. Gebrauch  machen,  da  Manipulationen im  Quellcode  leicht  zu
  2289. Programmabst╨ærzen f╨æhren k╨ñnnen.
  2290.  
  2291. Erstellen von Eingabefeldern
  2292. Eingabefelder   stellen  das  Verbindungsglied   zwischen   dem
  2293. Programm  und der Oberfl╨öche dar. ╨¬ber diese Felder k╨ñnnen  Sie
  2294. Eingaben  t╨ötigen,  die das Programm speichern  und  bearbeiten
  2295. kann. Andererseits ist das Programm aber auch in der Lage, ╨æber
  2296. solche Eingabefelder Datenbankeintr╨öge oder Werte von Variablen
  2297. an den Benutzer auszugeben.
  2298. Eingabefelder  erscheinen im Normalfall als rechteckige  Kasten
  2299. auf  Ihrer  Programmoberfl╨öche. Wenn  Eingaben  in  die  Felder
  2300. get╨ötigt werden k╨ñnnen, befindet sich ein blinkender Cursor  im
  2301. Feld.  Im  Normalfall ist in KIM-Programmen  jedem  Eingabefeld
  2302. eine  Variable  (meist eine ╨æber DEFINE erstellte Feldvariable)
  2303. zugeordnet. Eingabefelder unterscheiden sich daher oft  in  der
  2304. Art  der  Eingabe,  die sie akzeptieren, und  sind  nur  selten
  2305. identisch.
  2306. Sie  besitzen zwei M╨ñglichkeiten, um Eingabefelder zu erzeugen.
  2307. Zum  einen k╨ñnnen Sie den daf╨ær erforderlichen Programmcode per
  2308. Hand  erstellen,  was  wir  in den  ersten  Abschnitten  dieses
  2309. Kapitels aus didaktischen Gr╨ænden vorf╨æhren werden. Die andere,
  2310. weitaus  effizientere  Methode besteht in  der  Verwendung  des
  2311. Maskengenerators.  Im zweiten Teil dieses Kapitels  werden  wir
  2312. dieses  m╨öchtige Utensil des KIM-Editors im Detail kennenlernen
  2313. und mit ihm Eingabefelder erstellen.
  2314.  
  2315. Im   Prinzip   kann   man  vier  unterschiedliche   Arten   von
  2316. Eingabefeldern  unterscheiden.  Die  wichtigsten  Felder   sind
  2317. sicherlich  diejenigen, die eindeutige Texteingaben wie  Namen,
  2318. Vornamen,   Adressen   usw.   erwarten   und   diese   in   die
  2319. entsprechenden Feldvariablen ╨æbergeben. Wir wollen diese Felder
  2320. als   allgemeine  Eingabefelder  bezeichnen.  Oft  enth╨ölt  ein
  2321. Datenbankprogramm  mindestens ein Feld, in dem  irgendein  Text
  2322. ohne Einschr╨önkung eingegeben werden kann. Da diese Felder  oft
  2323. zur  Angabe  von Kommentaren verwendet werden, wollen  wir  sie
  2324. Kommentarfelder nennen.
  2325. Die  letzten beiden Feldarten dienen speziell zur Eingabe  bzw.
  2326. Ausgabe von Datum und Uhrzeit. Sie sollen daher als Datums- und
  2327. Zeitfelder bezeichnet werden.
  2328.  
  2329. Allgemeine Eingabefelder
  2330. Die wichtigsten Felder eines Datenbankprogramms sind sicherlich
  2331. die   allgemeinen   Eingabefelder.  Hier   werden   die   Daten
  2332. eingegeben,  die eigentlich als Informationen in der  Datenbank
  2333. gespeichert  werden  sollen.  Gleichzeitig  werden  ╨æber  diese
  2334. Felder  die  Daten aus der Datenbank wieder auf dem  Bildschirm
  2335. ausgegeben.
  2336. Ein  kennzeichnendes Merkmal allgemeiner Eingabefelder ist Ihre
  2337. definierte L╨önge und Ihre Bedeutung f╨ær die Eingabe und Anzeige
  2338. Datenbankrelevanter  Informationen.  Hinter  jedem  allgemeinen
  2339. Eingabefeld steht eine Feldvariable, der der Inhalt des  Feldes
  2340. zugewiesen  wird  und  anschlie╤üend in die Datenbank  ╨æbergeben
  2341. werden kann.
  2342. F╨ær die Aufgabe einer Feldvariable eignen sich am besten DEFINE-
  2343. Variablen. Diese k╨ñnnen bekanntlich mit einer Zusatzbezeichnung
  2344. vordefiniert werden, was f╨ær dieses Programmierungsproblem  das
  2345. beste   ist.  Durch  die  Zusatzbezeichnung  erkennen  Sie   im
  2346. Quellcode Ihres Programmes sofort, welche Variable welchem Feld
  2347. zugeordnet  ist. Unerheblich ist hingegen die Festlegung  einer
  2348. bestimmten Variablenl╨önge. Wie wir sp╨öter kennenlernen  werden,
  2349. wird  die  Feldgr╨ñ╤üe  in  Datens╨ötzen innerhalb  der  Datenbank
  2350. festgelegt.  Darum  ist  es  unerheblich,  wie  gro╤ü  die  hier
  2351. definierten Feldvariablen sind.
  2352. Der  erste Schritt bei der Erstellung allgemeiner Eingabefelder
  2353. besteht    also    in   der   Definition   der   entsprechenden
  2354. Feldvariablen.  Beispielsweise sollte  eine  Variable  mit  der
  2355. L╨önge  von  10  Zeichen, die dem Eingabefeld "Name"  zugewiesen
  2356. ist, so erzeugt werden:
  2357.  
  2358. DEFINE feld1, 10 AS Name
  2359.  
  2360. Nun  k╨ñnnen  wir  daran gehen, das eigentliche  Eingabefeld  zu
  2361. definieren. Diese geschieht mit der Anweisung:
  2362.  
  2363. DEF_STRING id_string, x, y, len, text$, wert
  2364.  
  2365. Anstelle  der  Variablen id_string geben  Sie  wie  ╨æblich  die
  2366. Kennung  des Objekts an, ╨æber die es angesprochen werden  kann.
  2367. ╨¬ber x und y legen Sie die Position des linken oberen Ecks  des
  2368. Feldes  in  dem Fenster fest, dem es zugewiesen wird  (wie  wir
  2369. bereits   im  Kapitel  ╨æber  Programmoberfl╨öchen  kennengelernt
  2370. haben,  m╨æssen alle Oberfl╨öchenobjekte einem Fenster zugewiesen
  2371. werden).  Mit  len legen Sie die L╨önge des Eingabefeldes  fest.
  2372. Aus  logischen Erw╨ögungen sollte das Eingabefeld  genauso  lang
  2373. sein  wie  die  zugeh╨ñrige Feldvariable, dies  ist  aber  nicht
  2374. zwingend notwendig.
  2375. Weiterhin  besitzen Sie die M╨ñglichkeit, einen  Vorgabetext  zu
  2376. definieren,  der  im  Eingabefeld jedesmal  beim  Programmstart
  2377. erscheinen  soll.  Hierzu weisen Sie der  Variablen  text$  den
  2378. entsprechenden  Vorgabetext zu. Normalerweise sollten  Sie  als
  2379. Vorgabetext  den  aktuellen Feldinhalt  der  Variable  aus  der
  2380. Datenbank  im  Feld  anzeigen lassen.  Wie  wir  noch  erfahren
  2381. werden,  wird  beim  ╨⌐ffnen einer Datenbank ein  Datensatz  zum
  2382. aktuellen Datensatz erhoben. ╨¬ber wert legen Sie fest, wie lang
  2383. das  Objekt auf dem Monitor erscheint. Ist len gr╨ñ╤üer als wert,
  2384. k╨ñnnen  mehr Zeichen ╨æbergeben als angezeigt werden. Der Inhalt
  2385. wird dann durch das Objekt gescrollt.
  2386. Dieses  Eingabefeld  erscheint  aber  praktisch  unsichtbar  im
  2387. entsprechenden Fenster, da keine Umrandung vorhanden ist.  Wenn
  2388. Sie  ein Eingabefeld im Fenster sichtbar machen wollen,  m╨æssen
  2389. Sie  das  FLAG  "BORDER" der Definitionsanweisung hintanstellen
  2390. (bez╨æglich  zu  FLAGS  siehe  den entsprechenden  Abschnitt  im
  2391. Kapitel "Fenster und Programmoberfl╨öchen"). Des weiteren k╨ñnnen
  2392. Sie  ein speziell f╨ær diesen Befehl vorhandenes FLAG einsetzen.
  2393. Setzen  Sie  das  FLAG "PASS", so wird dieses  Eingabefeld  als
  2394. Eingabefeld   f╨ær   ein  Passwort  umfunktioniert.   Der   hier
  2395. eingegebene Text erscheint dann unsichtbar im Feld.
  2396. In  das so erstellte Eingabefeld k╨ñnnen Sie jetzt neue Eingaben
  2397. t╨ötigen.  Der  letzte  Schritt besteht dann  darin,  den  neuen
  2398. Inhalt  des Eingabefeldes in die entsprechende Feldvariable  zu
  2399. ╨æbergeben. Dies gelingt durch den Befehl:
  2400.  
  2401. GET_ITEM id_string, feld1
  2402.  
  2403. F╨ær id_string geben Sie die Kennung des Eingabefeldes an, feld1
  2404. bezeichnet  die  Feldvariable, der der neue  Inhalt  zugewiesen
  2405. werden soll.
  2406. Das  eigentliche  Eingabefeld mitsamt Verbindung  zum  Programm
  2407. w╨öre    damit    erstellt.   Das   Programm   wird    nat╨ærlich
  2408. anwenderfreundlicher,  wenn Sie auf der Programmoberfl╨öche  vor
  2409. jedem  Eingabefeld eine Bezeichnung anf╨æhren, die dem  Benutzer
  2410. erkl╨ört,  welcher  Inhalt  in dem Eingabefeld  plaziert  werden
  2411. soll. Diese Erkl╨örung erstellen mittels des Befehls:
  2412.  
  2413. DEF_PROMPT id_string, x, y, "Text"
  2414.  
  2415. Auch dieses neue Textobjekt erh╨ölt eine Kennung ╨æber id_string.
  2416. Die  Werte  in  den  Variablen x und y legen fest,  an  welcher
  2417. Position  der  Text  im zugewiesenem Fenster  erscheinen  soll.
  2418. Berechnen  Sie diese Werte genau, damit der Text auch  bei  dem
  2419. Eingabefeld steht, zu dem er geh╨ñrt. Anstelle von "Text"  geben
  2420. Sie die gew╨ænschte Bezeichnung ein.
  2421. Ein  in  ein allgemeines Eingabefeld eingegebener Inhalt  kann,
  2422. wie sp╨öter in diesem Kapitel erl╨öutert, nachtr╨öglich bearbeitet
  2423. und  formatiert werden. Sie k╨ñnnen dies in gewissem Umfang aber
  2424. bereits bei der Definition des Eingabefeldes tun. Hierzu  dient
  2425. die  Anweisung  DEF_INPUT (im Gegensatz zur oben  vorgestellten
  2426. allgemeineren Form DEF _STRING):
  2427.  
  2428. DEF_INPUT id_string, x, y, len, text$, maske, schablone
  2429.  
  2430. Die  ersten  f╨ænf  Variablen id_string, x,  y,  len  und  text$
  2431. entsprechen  in Ihrer Bedeutung dem Parameterblock des  bereits
  2432. bekannten  Befehls  DEF_STRING. Neu sind die  Formatieroptionen
  2433. ╨æber  die  Variablen  maske  und  schablone.  Hier  k╨ñnnen  Sie
  2434. vorgeben,  welche  Zeichen  ╨æberhaupt  als  Eingabe  zugelassen
  2435. werden  und  diese  sofort in Gro╤übuchstaben  verwandeln.  Eine
  2436. Liste an Vorgaben in der Variable maske soll Ihre M╨ñglichkeiten
  2437. verdeutlichen:
  2438.  
  2439. maske=c    Alle   alphanumerische  Zeichen  k╨ñnnen   eingegeben
  2440.            werden.
  2441.  
  2442. maske=C    Alle   alphanumerische  Zeichen  k╨ñnnen   eingegeben
  2443.            werden,es erfolgt   aber   sofort   Umwandlung    in
  2444.            Gro╤übuchstaben.
  2445.  
  2446. maske=a    Nur die Buchstaben von a-z ohne Zahlen und
  2447.            Sonderzeichen k╨ñnnen eingegeben werden.
  2448.  
  2449. maske=A    Analog  wie  bei maske=a, aber  alle  Zeichen  werden
  2450.            sofort in Gro╤übuchstaben umgewandelt.
  2451.  
  2452. maske=N    Nur Zahlen k╨ñnnen eingegeben werden.
  2453.  
  2454. maske=x    Es k╨ñnnen nur druckbare Zeichen eingegeben werden.
  2455.  
  2456. maske=X    Analog  wie  bei maske=x, aber  alle  Zeichen  werden
  2457.            sofort in Gro╤übuchstaben umgewandelt.
  2458.  
  2459. maske=L    Es k╨ñnnen alle Zeichen eingegeben werden, die  in  der
  2460.            Variablenschablone  vorgegeben  werden.  Nur  bei
  2461.            dieser Option ist es notwendig, der Variablenschablone
  2462.            einen  Inhalt  zuzuweisen. Bis zu 255 beliebige Zeichen
  2463.            sind so als Eingabe vorgebbar.
  2464.  
  2465.  
  2466.  
  2467. Kommentarfelder
  2468. Neben den allgemeinen Eingabefeldern, ╨æber die die eigentlichen
  2469. Datens╨ötze definierter L╨önge ╨æbergeben werden, findet  man  oft
  2470. in   Datenbankprogrammen  ein  zus╨ötzliches,   meist   gr╨ñ╤üeres
  2471. Eingabefeld,  welches eine beliebige Texteingabe  erlaubt.  Ein
  2472. solches  Eingabefeld  erm╨ñglicht dem Anwender  die  Angabe  von
  2473. Kommentaren  beliebige L╨önge, um seinen Datens╨ötzen zus╨ötzliche
  2474. Informationen mitzugeben. Ein solches Kommentarfeld  ist  daher
  2475. extrem benutzerfreundlich und sollte nach M╨ñglichkeit in  jedem
  2476. Programm vorhanden sein.
  2477. Damit  die  Kommentare den entsprechenden  Datens╨ötzen  in  der
  2478. Datenbank   angef╨ægt  werden  k╨ñnnen,  mu╤ü  das   Kommentarfeld
  2479. ebenfalls  ╨æber  eine Feldvariable mit dem  Programm  verkn╨æpft
  2480. werden. Hierf╨ær sind DEFINE-Variablen nat╨ærlich geeignet,  aber
  2481. auf   255   Zeichen   L╨önge  beschr╨önkt.   Wenn   man   l╨öngere
  2482. Kommentareintragungen  zulassen m╨ñchte,  mu╤ü  als  Variable  im
  2483. Hintergrund  eine MEMO-Variable eingesetzt werden. Wie  bereits
  2484. besprochen  k╨ñnnen MEMO-Variablen bis zu 64000  Zeichen  Inhalt
  2485. aufnehmen.
  2486. Das  eigentliche Kommentarfeld sollte dann ebenfalls unabh╨öngig
  2487. von   irgendwelchen   Zeichenbeschr╨önkungen   sein.   Ein   mit
  2488. DEF_STRING  erstelltes Eingabefeld kann aber nur  maximal  eine
  2489. Zeile lang sein. Deshalb gibt es den anderen Befehl:
  2490.  
  2491. DEF_TEXT id_string, x, y, breite, hoehe, anzahl, array
  2492.  
  2493. ╨¬ber id_string vergeben Sie wie ╨æblich die Objektkennung. x und
  2494. y  legen die Position der linken oberen Ecke des Feldes in  dem
  2495. Fenster  fest,  dem das Feld zugewiesen wird. ╨¬ber  breite  und
  2496. hoehe  wird  bestimmt,  wie breit und  hoch  das  Kommentarfeld
  2497. werden soll.
  2498. Nat╨ærlich   k╨ñnnen  Sie  auch  diesem  Feld  einen  Vorgabetext
  2499. zuweisen,  der  jedesmal  beim Programmstart  darin  erscheint.
  2500. Hierzu  ╨æbergeben  Sie der Variablen array  den  entsprechenden
  2501. Vorgabetext,  wobei  es  sich dabei nat╨ærlich  wieder  um  eine
  2502. Variable mit Datenbankinhalt handeln kann.
  2503. Letztendlich legen Sie mit der Variablen anzahl fest, wie viele
  2504. Zeichen  in  das Eingabefeld eingef╨ægt werden d╨ærfen.  Beachten
  2505. Sie  dabei, da╤ü der Maximalinhalt durch die Natur der  zugrunde
  2506. liegenden Feldvariablen determiniert ist. Im g╨ænstigsten Falle,
  2507. wenn  es  sich um eine MEMO-Variable handelt, sind  dies  64000
  2508. Zeichen.
  2509. Das  so erzeugte Kommentarfeld geht aber ╨æber den Status  einer
  2510. einfachen  Eingabebox  hinaus. Sie  k╨ñnnen  hier  auf  einfache
  2511. Editierfunktionen  zur╨æckgreifen, die denen der  Zwischenablage
  2512. unter  Windows  bzw. dem Systemeditor unter  OS/2  entsprechen.
  2513. N╨öheres erfahren Sie in den Handb╨æchern Ihrer Betriebssysteme.
  2514.  
  2515. Zeitfelder
  2516. KIM   erlaubt  Ihnen  auch,  Eingabefelder  zu  erstellen,  die
  2517. speziell  f╨ær  die  Eingabe  einer Uhrzeit  gedacht  sind.  Das
  2518. Zeitfeld wird dann wie folgt definiert:
  2519.  
  2520. DEF_INPUT_TIME id_string, x, y, len, vorgabe$, intervall$
  2521.  
  2522. Wie ╨æblich wird eine Objektkennung ╨æber id_string zugewiesen, x
  2523. und  y legen die Position der linken oberen Ecke des Feldes  in
  2524. dem Fenster fest, dem es zugewiesen wird. Mit len bestimmen Sie
  2525. die  L╨önge des Eingabefeldes, wobei Sie wie immer an die  L╨önge
  2526. der Feldvariablen gebunden sind.
  2527. Auch  in  diesem  Feld  k╨ñnnen Sie eine Vorgabe  erzeugen,  die
  2528. jedesmal  beim Programmstart darin erscheint. Geben Sie  hierzu
  2529. ╨æber  die  Variable vorgabe$ den gew╨ænschten Eintrag ein.  Wenn
  2530. Sie keine Vorgabe festlegen, sucht sich der Rechner automatisch
  2531. aus  dem ROM-BIOS die aktuelle Uhrzeit und schreibt sie in  das
  2532. Eingabefeld.  Das  hierf╨ær verwendete Format  ist  das  ╨æbliche
  2533. deutsche, also z.B. 19
  2534. Letztendlich  k╨ñnnen  Sie  festlegen,  da╤ü  nur  eine   Uhrzeit
  2535. eingetragen  werden  kann,  die in einem  bestimmten  Intervall
  2536. liegt.  Dieses  Zeitintervall bestimmen  Sie  ╨æber  intervall$.
  2537. M╨ñchten Sie beispielsweise, da╤ü nur eine Uhrzeit zwischen 12.00
  2538. Uhr und 14.00 Uhr in das Eingabefeld eingegeben werden darf, so
  2539. geben  Sie  in  die  Variable  folgendes  ein:  "12.00..14.00".
  2540. Beachten Sie bitte, da╤ü auch hier das deutsche Format  f╨ær  die
  2541. Zeitangabe    vorgeschrieben    ist.    M╨ñchten    Sie     kein
  2542. Vorgabeintervall   festlegen,  ╨æbergeben  Sie   einfach   einen
  2543. Leerstring " ".
  2544. Es  stehen Ihnen zahlreiche FLAGS zur Verf╨ægung, um das  Format
  2545. dieses   Eingabefeldes  zu  beeinflussen
  2546. (siehe Objekteigenschaften).
  2547. Um  die Eingaben in die Datenbank zu ╨æbergeben, verkn╨æpfen  Sie
  2548. das  Eingabefeld wie bereits besprochen ╨æber GET_ITEM  mit  der
  2549. Feldvariablen.  Eine Feldbezeichnung auf der Programmoberfl╨öche
  2550. erstellen Sie auf bekannte Weise ╨æber DEF_PROMPT.
  2551.  
  2552. Datumsfelder
  2553. Zuletzt  k╨ñnnen Sie auch Eingabefelder definieren, die speziell
  2554. zur  Eingabe von Datumsangaben konzipiert sind. Diesen  Feldern
  2555. liegt   ebenfalls  eine  zuvor  zu  erzeugende  DEFINE-Variable
  2556. zugrunde. Die eigentliche Definition erfolgt dann ╨æber
  2557.  
  2558. DEF_INPUT_DATE id_string, x, y, len, vorgabe$, range
  2559.  
  2560. Die Variablen id_string, x, y, len und vorgabe$ entsprechen  in
  2561. Ihrer Bedeutung exakt den Variablen aus dem Parameterblock  des
  2562. Befehls DEF_INPUT_TIME.
  2563. Geben  Sie  keinen  Vorgabetext ╨æber vorgabe$  ein,  sucht  der
  2564. Computer  aus dem ROM-BIOS das aktuelle Tagesdatum und schreibt
  2565. dieses in die Variable. Das hierbei verwendete Format sieht  so
  2566. aus: TT/MM/YY, also z.B. 12/06/1993. ╨¬ber range k╨ñnnen Sie auch
  2567. hier   ein   Vorgabeintervall   festlegen,   in   welchem   das
  2568. einzutragende  Datum liegen mu╤ü, z.B. "01/01/1988..01/10/1988".
  2569. Das  als Eingabe akzeptierte Datum mu╤ü dann in diesem Intervall
  2570. liegen.  Wird  keine  Vorgabe  gew╨ænscht,  ╨æbergeben  Sie   den
  2571. Leerstring  "  ".  Beachten Sie bitte, da╤ü  bei  Eingabe  eines
  2572. Datums  immer  das Jahrhundert bei der Jahreszahl  stehen  mu╤ü,
  2573. also 1991 und nicht 91.
  2574.  
  2575. Bearbeiten von Dateneingaben
  2576.  
  2577. Hinzuf╨ægen und Entfernen von Leerzeichen
  2578.  
  2579. Oft  werden  die in die Felder eingegebenen Inhalte  nicht  den
  2580. vollen  Platz der zugeh╨ñrigen Feldvariablen beanspruchen.  Wenn
  2581. beispielsweise ein aus f╨ænf Buchstaben bestehendes Wort in eine
  2582. Feld  von  zehn  Zeichen  Gr╨ñ╤üe  eingegeben  wird,  h╨öngt   KIM
  2583. zus╨ötzlich  f╨ænf  Leerzeichen an das  Wort  an.  Dies  kann  im
  2584. Einzelfall   unerw╨ænscht  sein,  da  dadurch  die   Gr╨ñ╤üe   der
  2585. Datens╨ötze steigt. Abhilfe schafft hier der Befehl:
  2586.  
  2587. COMPRESS string$
  2588.  
  2589. Geben    Sie   einfach   den   Namen   der   zu   bearbeitenden
  2590. Stringvariablen  an.  Es  werden  aus  dieser  Variablen   alle
  2591. Leerzeichen nach dem eigentlichen Inhalt entfernt.
  2592. Es   w╨öre  allerdings  m╨æhselig,  auf  diese  Art  ein   ganzes
  2593. Variablenarray  zu bearbeiten. Deshalb steht Ihnen  ein  kleine
  2594. Abart  von  COMPRESS  zur Verf╨ægung, der  speziell  auf  Arrays
  2595. zugeschnitten ist. Nehmen wir an, Sie m╨ñchten die  Variablen  1
  2596. bis  3 des Arrays Feld von ╨æbersch╨æssigen Leerzeichen befreien,
  2597. so geben Sie ein:
  2598.  
  2599. COMPRESS2 feld,1,3
  2600.  
  2601. Bereits kennengelernt haben wir ja die Anweisung CLEAR, die den
  2602. gesamten Inhalt von Variablen eines Arrays l╨ñscht.
  2603. Es  kann aber auch vorkommen, da╤ü links vor dem Inhalt in einer
  2604. Stringvariablen Leerzeichen vorhanden sind (z.B. wenn  bei  der
  2605. Eingabe  in  ein  Feld  nicht beim ersten  Zeichen  ganz  links
  2606. begonnen wurde). Diese Leerzeichen lassen sich mit LTRIM wieder
  2607. entfernen:
  2608.  
  2609. LTRIM string$
  2610.  
  2611. Damit   werden   alle  Leerzeichen  links  vom  Variableninhalt
  2612. gelФscht.
  2613. Manchmal  kann es aber geradezu erw╨ænscht sein, an  den  Inhalt
  2614. einer  Stringvariablen Leerzeichen anzuf╨ægen, um  z.B.  mehrere
  2615. Variablen   auf   eine  bestimmte  L╨önge  zu  formatieren.   Um
  2616. Leerzeichen links vom Inhalt einzuf╨ægen, bedienen Sie sich  der
  2617. Anweisung RSET:
  2618.  
  2619. RSET laenge, string$
  2620.  
  2621. F╨ær  die  Variable laenge geben Sie die Anzahl der Zeichen  an,
  2622. die  die  zu  bearbeitende Variable string$ nach der  Operation
  2623. besitzen soll. Wenn Sie z.B. die Variable text="Hallo" mit f╨ænf
  2624. Leerzeichen links vom Inhalt f╨ællen m╨ñchten, geben Sie ein:
  2625.  
  2626. RSET 10, text
  2627.  
  2628. Das Ergebnis sieht dann so aus: text="     Hallo".
  2629. Analog  k╨ñnnen  Sie mit SET Leerzeichen nach dem  Inhalt  einer
  2630. Variablen anf╨ægen, wobei Sie bei RSET verfahren:
  2631.  
  2632. SET laenge, string$
  2633.  
  2634. Die  Gr╨ñ╤üe des Inhalts einer Stringvariablen ermitteln Sie  mit
  2635. dem Befehl LEN:
  2636.  
  2637. LEN string$, zahl
  2638.  
  2639. Es  wird  dann ermittelt, wieviel Zeichen sich in der Variablen
  2640. string$   befinden,  wobei  Leer-  und  Satzzeichen  mitgez╨öhlt
  2641. werden. Das Ergebnis wird in die Zahlenvariable zahl ╨æbergeben,
  2642. aus der es abgerufen werden kann.
  2643. Beachten  Sie,  da╤ü all diese Operationen nur mit  String-(bzw.
  2644. Define-  oder  Memo-)-  variablen durchgef╨æhrt  werden  k╨ñnnen,
  2645. nicht aber mit Zahlenvariablen.
  2646.  
  2647.  
  2648. Umwandlung von Gro╤ü- und Kleinbuchstaben
  2649.  
  2650. KIM  erlaubt  Ihnen, den Inhalt von Stringvariablen  gesamt  in
  2651. Gro╤ü- oder Kleinbuchstaben zu verwandeln. Um Gro╤übuchstaben  in
  2652. Kleinbuchstaben  umzuwandeln, bedienen  Sie  sich  des  Befehls
  2653. LCASE:
  2654.  
  2655. LCASE string$
  2656.  
  2657. Analog   lassen   sich   mit  UCASE  alle  Kleinbuchstaben   in
  2658. Gro╤übuchstaben  modifizieren:
  2659.  
  2660. UCASE string$
  2661.  
  2662. Selbstverst╨öndlich ergeben diese Anweisungen nur einen Sinn bei
  2663. Stringvariablen, nicht aber bei Zahlenvariablen.
  2664.  
  2665. Suchen
  2666. KIM  erm╨ñglicht Ihnen auch, in Variablen nach einem  bestimmten
  2667. Inhalt zu suchen. Wenn Sie beispielsweise wissen m╨ñchten, ob in
  2668. der  Variablen name der Begriff "Meier" zu finden ist, so geben
  2669. Sie den Suchbegriff in eine Variable suchen ein:
  2670.  
  2671. IN name, suchen, gefunden
  2672.  
  2673. Das  Programm sucht nun in der Variablen name nach dem  in  der
  2674. Variablen  suchen vorgegebenen Inhalt. Das Resultat  des  Suche
  2675. wird  in  der  Variablen gefunden gespeichert. War  die  Aktion
  2676. erfolgreich,  so wird die Position des Begriffs im  String  als
  2677. Zahl ╨æbergeben. War die Suche negativ, erh╨ölt gefunden den Wert
  2678. -1.  Selbstverst╨öndlich k╨ñnnen Sie auch nur nach einem einzigen
  2679. Zeichen suchen.
  2680. Speziell  f╨ær  die Suche in Arrays vorgesehen  ist  der  Befehl
  2681. FIND:
  2682.  
  2683. FIND array$, start, ende, suchen, gefunden
  2684.  
  2685. Geben  Sie  das  zu  durchsuchende Array und  anschlie╤üend  die
  2686. Kennummern  der Feldvariablen an, bei denen die Suche  begonnen
  2687. bzw.  beendet werden soll. Der zu suchende Begriff wird in  der
  2688. Variablen suchen vorgegeben, das Ergebnis analog zu IN  in  der
  2689. Variablen gefunden gespeichert.
  2690.  
  2691. VerДndern
  2692. Selbstverst╨öndlich sollten Sie in der Lage sein, den Inhalt von
  2693. Variablen  nach der Eingabe zu manipulieren. KIM  stellt  Ihnen
  2694. hierf╨ær mehrere M╨ñglichkeiten zur Auswahl.
  2695. Ein  bestimmtes Zeichen einf╨ægen k╨ñnnen Sie mit  FILLSTR.  Wenn
  2696. Sie  beispielsweise  f╨ænfmal das Zeichen "A"  in  die  Variable
  2697. Zeichen eingeben m╨ñchten, gehen Sie so vor:
  2698.  
  2699. FILLSTR 5, Zeichen, "A"
  2700.  
  2701. Beachten  Sie  bitte,  da╤ü damit nur  ein  Zeichen  auf  einmal
  2702. (allerdings  in  beliebiger Anzahl) in eine Variable  eingef╨ægt
  2703. werden kann.
  2704. Ganze Textst╨æcke bzw. der Inhalt anderer Variablen lassen  sich
  2705. mittels STRADD einf╨ægen:
  2706.  
  2707. STRADD string$, "Text"
  2708.  
  2709. Der  Variablen  string$ wird so ein Text zugef╨ægt.  Setzen  Sie
  2710. anstelle von text den Namen einer Variablen ein, so wird  deren
  2711. Inhalt in string$ eingef╨ægt.
  2712. Im  Gegensatz dazu k╨ñnnen Sie mit STRDEL wieder St╨æcke aus  dem
  2713. Inhalt einer Variablen entfernen. Nehmen wir an, Sie haben eine
  2714. Variable Name mit dem Inhalt "Meisinger", m╨ñchten diesen Inhalt
  2715. aber in "Meier" ╨öndern. Sie geben ein:
  2716.  
  2717. STRDEL Name, 4,4
  2718.  
  2719. Die  erste  Zahl nach dem Variablennamen gibt die  Position  im
  2720. Inhalt  an,  ab der Zeichen gel╨ñscht werden sollen. Die  zweite
  2721. Zahl  legt  fest, wieviele Zeichen ab dieser Position  entfernt
  2722. werden. In unserem Falle waren das vier Zeichen ab der Position
  2723. vier, also die Zeichen "sing".
  2724. Es  ist  Ihnen  auch  m╨ñglich,  nur  Teile  des  Inhalts  einer
  2725. Stringvariablen  in  eine andere Variable zu  kopieren.  Hierzu
  2726. dient die Anweisung MID:
  2727.  
  2728. MID string$, neu$, anfang, anzahl
  2729.  
  2730. Hiermit  werden Teile aus der Variablen string$ in die Variable
  2731. neu$ eingef╨ægt. Mit anfang legen Sie die Position im Inhalt der
  2732. Variablen  string$ fest, ab der Zeichen kopiert werden  sollen.
  2733. Anzahl  bestimmt  die  Zahl  der Zeichen  ab  der  selektierten
  2734. Position, welche in neu$ eingef╨ægt werden.
  2735. Der  Inhalt  einer Stringvariablen l╨ö╤üt sich zerlegen  und  auf
  2736. mehrere   andere  Variablen  eines  Arrays  verteilen.  Hierbei
  2737. orientiert   sich   KIM   an  ein  von   Ihnen   festzulegendes
  2738. Trennzeichen:
  2739.  
  2740. SELECT string$, ord, s$, m, n
  2741.  
  2742. Der  Inhalt  der  Variablen string$ wird  geteilt  und  in  die
  2743. Variablen m bis n des Arrays s$ ╨æbergeben. Die Teilung  erfolgt
  2744. an  dem  Trennzeichen, dessen ASCII-Codewert (vgl.  Tabelle  im
  2745. Anhang dieses Buches) Sie in die Variable ord schreiben m╨æssen.
  2746. Sie  k╨ñnnen  auch  den Inhalt einer Stringvariablen  ganz  oder
  2747. teilweise austauschen. Rufen Sie hierzu auf:
  2748.  
  2749. REPLACE text$, alt$, neu$
  2750.  
  2751. In  der  Variablen  text$  wird dann die  in  alt$  aufgef╨æhrte
  2752. Zeichenkette gegen den Inhalt von neu$ ausgetauscht.
  2753. Eine  Besonderheit  stellen letztendlich  Stringvariablen  dar,
  2754. deren  Inhalt aus einem mathematischen Ausdruck wie z.B.  "2+3"
  2755. besteht.  Ist  dies der Fall, haben Sie die M╨ñglichkeit,  diese
  2756. Berechnung durchf╨æhren zu lassen:
  2757.  
  2758. EVAL string$, erg
  2759.  
  2760. Die  mathematische  Rechnung  in  der  Variablen  string$  wird
  2761. durchgef╨æhrt, das Ergebnis in der Variablen erg gespeichert.
  2762. Alle bisherigen Befehle haben sich auf Stringvariablen bezogen.
  2763. Zuletzt   wollen   wir  noch  eine  Anweisung   Zahlenvariablen
  2764. betreffend   kennenlernen.   Will   man   den   Inhalt    einer
  2765. Zahlenvariablen  teilen, so kann das eigentlich  nur  an  einer
  2766. logischen  Position  geschehen,  n╨ömlich  am  Komma  in   einer
  2767. Dezimalzahl. Der Befehl FRAC erledigt dies:
  2768.  
  2769. FRAC zahl, vor nach
  2770.  
  2771. Der  Inhalt  der  Variable zahl (bei dem es sich  nur  um  eine
  2772. einzige  Zahl  handeln kann) wird geteilt. Die  Vorkommastellen
  2773. werden  der  Variablen vor ╨æbergeben, die Nachkommastellen  der
  2774. Variablen  nach.  Somit  entspricht FRAC  der  String-Anweisung
  2775. SELECT,  ist aber naturgem╨ö╤ü weniger flexibel in Bezug auf  die
  2776. Teilungsposition.
  2777.  
  2778.  
  2779. ΓòÉΓòÉΓòÉ 11. Programmieren mit KIM ΓòÉΓòÉΓòÉ
  2780.  
  2781. Programmieren mit KIM
  2782.  
  2783. EinfБhrung
  2784. In diesem Kapitel wollen wir das bisherige theoretische Wissen
  2785. anwenden und funktionst╨æchtige Programme mit KIM erstellen.
  2786. Dazu ben╨ñtigen wir aber noch einige weitere Informationen.
  2787. So wurde zwar bisher vorgestellt, wie Programmoberfl╨öchen,
  2788. Fenster, Eingabemasken oder Datenbanken erzeugt werden k╨ñnnen,
  2789. aber gewisserma╤üen blieben all diese Programmelemente ohne "Leben",
  2790. da bisher nicht darauf eingegangen wurde, wie sie angesprochen und
  2791. aktiviert werden k╨ñnnen. In diesem Abschnitt wollen wir den bereits
  2792. bekannten Rohbau zu lauff╨öhigen Programmen verkn╨æpfen.
  2793.  
  2794. Events
  2795. Programme, welche unter graphischen Benutzeroberfl╨öchen wie Windows
  2796. oder OS/2 laufen, benutzen praktisch immer einen eventorientierten
  2797. Programmablauf. Darunter versteht man, da╤ü ein solches Programm
  2798. solange "unt╨ötig" wartet, bis der Anwender ein Ereignis (ein Event)
  2799. ausl╨ñst, auf welches das Programm dann reagiert.
  2800. Ein solches Event kann ein Mausklick auf einen Funktionsbutton
  2801. oder einen Men╨æpunkt sein, aber auch das Ausl╨ñsen eines Hotkeys.
  2802. Alle auftretenden Ereignisse werden von einem sogenannten
  2803. Event-Manager gesteuert. Dieser ist kein KIM-spezifisches Element,
  2804. sondern ist Bestandteil des Betriebssystems. Das ist nat╨ærlich
  2805. auch notwendig, damit beispielsweise die Befehle des Systemmen╨æs,
  2806. welche nicht auf KIM bezogene Aktionen ausl╨ñsen, ordnungsgem╨ö╤ü
  2807. durchgef╨æhrt werden k╨ñnnen. Des weiteren kann nur so das
  2808. Multitasking, also das gleichzeitige Bearbeiten mehrerer Programme
  2809. zur gleichen Zeit, vom Betriebssystem gew╨öhrleistet werden.
  2810. Der Event-Manager des Betriebssystems (egal, um welches es sich dabei
  2811. handelt)wird von KIM aus durch folgenden Befehl angesprochen:
  2812.  
  2813. WIN_EV i
  2814.  
  2815. Hierdurch wird die Kontrolle ╨æber alle Computeraktionen an den
  2816. Event-Manager ╨æbergeben. Dieser ╨æberpr╨æft nun alle vom Anwender
  2817. ausgel╨ñsten Ereignisse und gibt entsprechend einen numerischen Wert
  2818. ╨æber die Variable i an das Programm zur╨æck. Es ist f╨ær Sie nicht
  2819. relevant, welche Werte bei bestimmten Ereignissen genau ╨æbergeben
  2820. werden. Wichtig ist lediglich, da╤ü beim Beenden des Programmes
  2821. (wenn also alle Fenster geschlossen werden) vom Event-Manager
  2822. der Wert 1000 an das KIM-Programm zur╨æckgegeben wird.
  2823. Wie l╨ö╤üt sich nun die Event-orientierte Steuerung programmtechnisch
  2824. durchf╨æhren? Es ist einsichtig, da╤ü die L╨ñsung dieser Aufgabe im
  2825. Erstellen einer Schleife besteht.
  2826. Innerhalb dieser Schleife wird der Event-Manager mittels WIN_EV
  2827. aufgerufen. Sobald der Benutzer ein Ereignis ausl╨ñst, teilt der
  2828. Event-Manager dies dem Programm mit und gibt die Kontrolle an
  2829. das KIM-Programm zur╨æck, damit dieses geeignet auf das Event
  2830. reagieren kann. Ist dies geschehen, kehrt das Programm zum
  2831. Schleifenbeginn zur╨æck, um auf ein neues Ereignis zu warten.
  2832. Diese Schleife wird erst dann beendet, wenn der Event-Manager
  2833. den Wert 1000 zur╨æckgibt. Dann ist das Programm vom Benutzer
  2834. f╨ær beendet erkl╨ört worden. Nach der Schleife wird
  2835. dementsprechend auch das KIM-Programm abgeschlossen.
  2836. Ge╨ñffnete Datenbanken m╨æssen hierzu mit ICLOSE geschlossen werden,
  2837. ehe der Befehl END den Programmcode abschlie╤üt. Denken Sie unbedingt
  2838. daran, mit END das Programm zu beenden, da sonst Fehlfunktionen
  2839. auftreten k╨ñnnen.
  2840. Wie erreicht man, da╤ü ein KIM-Programm entsprechend der vom Anwender
  2841. ausgel╨ñsten Ereignisse reagiert? Im Normalfall werden bei graphischen
  2842. Benutzeroberfl╨öchen alle Events mit Hilfe einer Maus aktiviert.
  2843. Der Event-Manager registriert, welches Oberfl╨öchenobjekt selektiert
  2844. (auf welches Objekt der Mauscursor zeigt) und
  2845. welche Maustaste gedr╨æckt wurde. Im Normalfall steht dabei die
  2846. linke Maustaste f╨ær die Enter-Taste, also die Best╨ötigung der Auswahl.
  2847. Diese Informationen k╨ñnnen Sie mit folgender Anweisung in Ihr
  2848. KIM-Programm einlesen:
  2849.  
  2850. GET_ITEM_POS id_string, taste
  2851.  
  2852. ╨¬ber die Variable id_string wird die Kennung des ausgew╨öhlten
  2853. Objekts zur╨æckgegeben. In der Variablen <taste> wird der
  2854. ASCII-Codewert der zuletzt gedr╨æckten Taste gespeichert.
  2855. Handelt es sich dabei um die linke Maustaste, wird der Wert 13
  2856. Бbergeben.
  2857. Nun mu╤ü nat╨ærlich eine Programmverzweigung folgen, da
  2858. unterschiedliche Events verschiedene Aktionen ausl╨ñsen sollen.
  2859. Wir wollen dabei beachten, da╤ü der Quellcode eines Programmes so
  2860. ╨æbersichtlich wie m╨ñglich aufgebaut sein sollte.
  2861. Deshalb sollten die einzelnen IF-Anweisungen nicht in der
  2862. gerade beschriebenen Event-Schleife (die Schleife, in welcher
  2863. der Event-Manager angesprochen wird) aufgef╨æhrt sein, sondern
  2864. m╨ñglichst in einem gesonderten Modul angef╨ægt werden. Dieses Modul
  2865. wird aus der Event-Schleife heraus bei entsprechenden Ereignissen
  2866. aktiviert, arbeitet die entsprechenden Aktionen ab und f╨æhrt danach
  2867. das Programm in die Event-Schleife zur╨æck.
  2868. Wir wollen als Beispiel eine typische Event-Schleife erstellen.
  2869. Am geeignetsten ist hierf╨ær eine WHILE-WEND-Schleife, die dann
  2870. abgebrochen wird, wenn die Variable _i vom Event-Manager den
  2871. Wert 1000 zugewiesen bekommt.
  2872. Innerhalb der Schleife wird der Event-Manager aktiviert.
  2873. Die von diesem zur╨æckgegebenen Resultate eines ausgel╨ñsten
  2874. Ereignisses werden mit GET_ITEM_POS in das Programm eingelesen.
  2875. Daraufhin wird ein Modul namens <auswerten> aktiviert, da╤ü die
  2876. Auswertung der entsprechenden Events ╨æbernimmt. In unserem Beispiel
  2877. wird dieses Modul aufgerufen, wenn die linke Maustaste
  2878. (oder Enter-Taste) gedr╨æckt wurde. Mit WEND kehrt man anschlie╤üend
  2879. zum Schleifenbeginn zur╨æck. Nach Schleifenabbruch (bei _i=1000)
  2880. werden Datenbanken geschlossen und das Programm beendet.
  2881.  
  2882.         REM Event-Schleife f╨ær ein beliebiges Programm
  2883.         DEFFLOAT _i, taste
  2884.         DEFSTRING objekt
  2885.         WHILE _i<>1000
  2886.                 WIN_EV i
  2887.                 GET_ITEM_POS objekt, taste
  2888.                 IF taste=13 THEN
  2889.                         CALL auswerten (objekt, i)
  2890.                 ENDIF
  2891.         WEND
  2892.         ICLOSE
  2893.         END
  2894.  
  2895.  
  2896. Diese Event-Schleife ist nat╨ærlich f╨ær sich allein kein vollst╨öndiges
  2897. Programm und somit nicht lauff╨öhig.
  2898.  
  2899. Um auf ein Event zu reagieren, bietet KIM noch eine weitere elegante
  2900. M╨ñglichkeit : die Eventfunktionen.
  2901. Wir haben gelernt, da╤ü jedes Objekt eine ID-Kennung besitzt.
  2902. F╨ær eine ID-Kennung sollte ein sprechender Name genommen werden.
  2903. (z.B die ID-Kennung "BUTTON1" f╨ær ein Buttonobjekt )
  2904. Eine Eventfunktion ist ein Modul mit einem zusammengesetzten
  2905. Modulnamen. Der erste Teil des Modulnamens entspricht der
  2906. ID-Kennung und der zweite Teil der Eventidentifizierung.
  2907.  
  2908. MODUL BUTTON1_SELECT()
  2909. ENDMOD
  2910.  
  2911. Sobald ein Event erzeugt wird, pr╨æft KIM ob ein entsprechendes Modul
  2912. definiert ist. Ist dies der Fall, wird das Modul ausgef╨æhrt.
  2913. Die Nutzung von Eventfunktionen f╨æhrt zu geringf╨ægig mehr Code,
  2914. aber ist in den meisten F╨öllen die ╨æbersichtlichere Variante.
  2915.  
  2916.       REM Event-Schleife f╨ær ein beliebiges Programm
  2917.         DEFFLOAT _i
  2918.         WHILE _i<>1000
  2919.                 WIN_EV i
  2920.         WEND
  2921.         ICLOSE
  2922.         END
  2923.  
  2924.         REM **** Programm beenden wenn Button gedr╨æckt ****
  2925.         MODUL BUTTON1_SELECT()
  2926.                 _i=1000
  2927.         ENDMOD
  2928.  
  2929. Eine Kombination aus der ersten und zweitern Version ist erlaubt.
  2930.  
  2931. Aufbau eines KIM-Programmes
  2932. Wir haben nunmehr alle notwendigen Bestandteile eines KIM-Programmes
  2933. kennengelernt. Diese sollen hier rekapituliert und in der richtigen
  2934. Reihenfolge angeordnet werden.
  2935. Am Anfang eines Programmcodes hat immer die Definition der
  2936. Programmoberfl╨öche zu stehen. Definieren Sie also zun╨öchst ein
  2937. Hauptfenster. Anschlie╤üend erzeugen Sie alle weiteren Oberfl╨öchenobjekte
  2938. und weisen diese dem Hauptfenster mittels ADD_ITEM oder
  2939. ADD_ITEM_ARRAY zu. Beachten Sie dabei, da╤ü das Hauptfenster als
  2940. erstes Fenster ge╨ñffnet wird.
  2941. Der n╨öchste Schritt besteht im Definieren und ╨⌐ffnen einer
  2942. zugeh╨ñrigen Datenbank.
  2943. Halten Sie sich dabei an die im Kapitel Programmieren von
  2944. Datenbanken beschriebene Vorgehensweise. Danach kann das
  2945. Hauptfenster und damit die Programmoberfl╨öche aufgerufen werden.
  2946. Dies geschieht bekanntlicherweise mit WIN_PAINT.
  2947. Das eigentliche Programm folgt im Anschlu╤ü daran.
  2948. Programmieren Sie eine Eventschleife, in welcher die
  2949. Programmsteuerung an den Event-Manager des Betriebssystems
  2950. ╨æbergeben wird.
  2951. Bei entsprechenden Ereignissen mu╤ü eine Verzweigung
  2952. aktiviert werden, in der die Events ausgewertet werden.
  2953. Wird der Wert 1000 zur╨æckgegeben, ist das Programm als beendet
  2954. anzusehen.
  2955. Alle ge╨ñffneten Datenbanken m╨æssen dann geschlossen und der
  2956. Quellcode mit END terminiert werden.
  2957. Im Einzelfall kann nat╨ærlich der eine oder andere Teil im Programm
  2958. nicht vorhanden sein. Bei unseren Beispielprogrammen wird dies
  2959. manchmal auftreten. So ist es m╨ñglich, ein Programm auch ohne
  2960. Eventschleife funktionsf╨öhig zu machen. Hierzu mu╤ü der Befehl
  2961.  
  2962. DUMMY_EVENT
  2963.  
  2964. eingebaut werden. Auch dadurch wird der Event-Manager aktiviert.
  2965. Es erfolgt aber keine R╨æckgabe von Events an das Programm.
  2966. Folgerichtig k╨ñnnen keine Aktionen in einem solchen Programm
  2967. ausgef╨æhrt werden. Vielmehr dienen solche Werke lediglich zum
  2968. Erzeugen von Programmoberfl╨öchen. Mit dem Schlie╤üen des letzten
  2969. Fensters beendet der Event-Manager automatisch das Programm.
  2970. Aus Gr╨ænden der ╨¬bersichtlichkeit sollten m╨ñglichst viele
  2971. Programmteile aus dem Hauptprogramm ausgelagert werden.
  2972. Dies erreicht man durch die Erzeugung von Modulen, in denen
  2973. alle wichtigen Teile enthalten sind und welche vom Hauptprogramm
  2974. aus aktiviert werden. Des weiteren haben Module den Vorteil, da╤ü sie nicht
  2975. nur in einem einzigen Programm benutzt werden k╨ñnnen,
  2976. sondern beliebig oft verwendbar sind.
  2977. Ein typischer Programmablauf unter KIM k╨ñnnte dann schematisch
  2978. wie folgt aussehen:
  2979.  
  2980. - Variablendefinition
  2981. - Definition des Hauptfensters und Objekte (Oberfl╨öche)
  2982. - Definition und ╨⌐ffnung einer Datenbank
  2983. - Darstellen der Oberfl╨öche mit WIN_PAINT
  2984. - Eventschleife (Aufruf verschiedener Eventfunktionen)
  2985. - Schlie╤üen der Datenbanken
  2986. - Programmende (END)
  2987.  
  2988.  
  2989. Beispiele
  2990.  
  2991. ProgrammoberflДchen
  2992. In diesem Abschnitt wollen wir beispielhaft einige verschiedene
  2993. Programmoberfl╨öchen erstellen. Dabei soll die Komplexit╨öt derselben
  2994. schrittweise gesteigert werden.
  2995. Zun╨öchst wird ein Hauptfenster mit dem notwendigsten Inhalt erzeugt.
  2996. Im Anschlu╤ü daran werden zus╨ötzliche Objekte definiert und dem
  2997. Hauptfenster hinzugef╨ægt.
  2998.  
  2999. Einfaches Hauptfenster
  3000. Grundlage jeder noch so komplexen Programmoberfl╨öche ist ein
  3001. Hauptfenster. Wie bereits im entsprechenden Kapitel erl╨öutert
  3002. sollte ein Hauptfenster zumindest folgende Objekte besitzen:
  3003.  
  3004. - Eine Begrenzung ist unbedingt notwendig, da sonst beim Hinzuf╨ægen
  3005.   weiterer Objekte Fehler auftreten.
  3006. - Einen Systembutton zur Kommunikation mit dem Betriebssystem (wahlweise)
  3007. - Maximierungs- und Minimierungsbuttons (wahlweise)
  3008.  
  3009. Wie hat das Programm auszusehen, welches dieses Fenster erzeugt?
  3010. Halten wir uns an den typischen Programmablauf. Zun╨öchst wird der
  3011. Befehl das Modul zur Erzeugung des Fensters aufgerufen, anschlie╤üend
  3012. wird das Fenster mit WIN_PAINT auf dem Monitor angezeigt.
  3013. Da noch keine Datenbank bzw. weitere Objekte definiert werden sollen,
  3014. kommen wir gleich zur Eventschleife. Es geht uns jetzt nur um die
  3015. Oberfl╨öche, nicht um irgendwelche Programmfunktionen.
  3016. Deshalb werden wir statt einer Eventschleife den Befehl DUMMY_EVENT
  3017. verwenden (siehe vorhergehenden Abschnitt).
  3018. Damit ist das Programm auch schon fertig:
  3019.  
  3020.         REM Programm zur Erzeugung eines einfachen Hauptfensters
  3021.  
  3022.         REM Zun╨öchst das Hauptprogramm
  3023.         CALL fenster()
  3024.         WIN_PAINT "window"
  3025.         DUMMY_EVENT
  3026.         END
  3027.  
  3028.         REM Nun das Modul mit der Definition des Fensters
  3029.         MODUL fenster()
  3030.  
  3031.              def_window_st "window",1,1,20,10,"Testfenster"
  3032.  
  3033.         ENDMOD
  3034.  
  3035. Wichtig !
  3036. Objekt-IDs k╨ñnnen global angesprochen werden.
  3037.  
  3038. Beenden l╨ö╤üt sich das Programm, indem sie mit der linken
  3039. Maustaste den Systembutton (links oben) anklicken.
  3040. Es ╨ñffnet sich dann das Systemmen╨æ. W╨öhlen Sie dort die Option
  3041. "Schlie╤üen" (bzw. "Close") aus. Das Hauptfenster wird geschlossen,
  3042. woraufhin der Event-Manger sofort das Programm f╨ær beendet erkl╨ört.
  3043. Sie kehren zu Ihrem Betriebssystem zur╨æck.
  3044.  
  3045. Hauptfenster mit Toolbar
  3046. Als n╨öchste wollen wir unsere Programmoberfl╨öche um eine Toolbar
  3047. erweitern. Diese soll aus f╨ænf Buttons mit den Aufschriften "Neu",
  3048. "Speichern", "L╨ñschen", "Finde" und "Beenden" bestehen.
  3049. Es geht uns hier wohlgemerkt nur um den Aufbau der Oberfl╨öche.
  3050. Die entsprechenden Aktionen sollen und k╨ñnnen noch nicht ausgef╨æhrt
  3051. werden, da weder Eingabefelder noch Datenbanken im Programm
  3052. vorhanden sind.
  3053.  
  3054. Vom Programmablauf her gibt es kaum Neuerungen. Wir bleiben unserer
  3055. Linie treu.Beachten Sie bitte, da╤ü hier die Positionierung der Toolbar
  3056. ╨æber das FLAG "REGION OFF" erfolgt, wodurch das Objekt so weit wie
  3057. m╨ñglich an den oberen Fensterrand gesetzt wird.
  3058. M╨ñchten Sie Ihre Toolbar anders plazieren, m╨æssen Sie die
  3059. entsprechenden Positionswerte angeben und das FLAG weglassen.
  3060. Der Programmcode lautet dann:
  3061.  
  3062.         REM Programm zur Erzeugung eines Hauptfensters mit Toolbar
  3063.         REM Zun╨öchst das Hauptprogramm
  3064.         CALL fenster()
  3065.         WIN_PAINT "window"
  3066.         DUMMY_EVENT
  3067.         END
  3068.  
  3069.         REM Nun das Modul mit der Definition des Fensters
  3070.         MODUL fenster()
  3071.  
  3072.                 def_window_st "window",1,1,50,10,"Testfenster"
  3073.  
  3074.                 def_toolbar "toolbar", 0, 0, 60, 5,;"region off"
  3075.                 def_button "b0", 0, 0, 10, " ", "Neu"
  3076.                 def_button "b1", 0, 0, 10, " ", "Speichern"
  3077.                 def_button "b2", 0, 0, 10, " ", "Loeschen"
  3078.                 def_button "b3", 0, 0, 10, " ", "Finde"
  3079.                 def_button "b4", 0, 0, 10, " ", "Beenden"
  3080.  
  3081.                 add_item "toolbar",..
  3082.                 "b0",..
  3083.                 "b1",..
  3084.                 "b2",..
  3085.                 "b3",..
  3086.                 "b4"
  3087.  
  3088.                 add_item  "window", "toolbar"
  3089.         ENDMOD
  3090.  
  3091. Die Arbeitsweise von KIM ist einfach. Es werden Objekte mit bestimmten
  3092. ID-Kennungen (z.B b0,b1,...) definiert. Nun mu╤ü man die Einzelobjekte
  3093. (childobjects)einem ╨æbergeordneten Objekt (parentobject) zuordnen.
  3094. Dies geschieht ╨æber den Befehl IADD. Also, die Buttons addiert man
  3095. (zuweisen) an das Toolbar-Objekt, und anschlie╤üend addiert man das
  3096. Toolbarobjekt an das Fenster.
  3097.  
  3098. Wichtig !
  3099. Ein Objekt kann nur an ein ╨æbergeordnetes Objekt addiert werden.
  3100. Bei der Benutzung von Objekt-IDs wird Klein- und Gro╤üschrift
  3101. unterschieden. ( "bu" <> "Bu" )
  3102.  
  3103. Hauptfenster mit Toolbar und Meldungsfenster
  3104. Nun soll eine Verfeinerung der eben erstellten Programmoberfl╨öche
  3105. realisiert werden. Einem der Buttons der Toolbar, n╨ömlich demjenigen
  3106. zum Beenden des Programms, soll Leben eingehaucht werden.
  3107. Wir wollen auf Klick mit der linken Maustaste auf diesen Button
  3108. erreichen, da╤ü sich ein Meldefenster mit der Frage
  3109. "Programm beenden ?" ╨ñffnet. Ein Klick auf den OK-Button soll
  3110. das Programm dann tats╨öchlich abbrechen.
  3111.  
  3112. Es reicht dann nat╨ærlich nicht mehr aus, dem Event-Manager lediglich
  3113. ╨æber DUMMY_EVENT die Kontrolle zu ╨æbergeben, da jetzt auf eine Aktion
  3114. des Anwenders reagiert werden mu╤ü. Der Aufbau der Event-Schleife
  3115. wurde bereits in der Einleitung besprochen. Sie wird so lange vom
  3116. Programm durchlaufen, bis die Laufvariable i den Wert 1000 erh╨ölt.
  3117. Der Code sieht dementsprechend so aus:
  3118.  
  3119.         DEFFLOAT _i
  3120.         CALL fenster()
  3121.         WIN_PAINT "window"
  3122.         WHILE _i<>1000
  3123.                 WIN_EV _i
  3124.         WEND
  3125.         END
  3126.  
  3127.         REM Nun das Modul mit der Definition des Fensters
  3128.         MODUL fenster()
  3129.  
  3130.                 def_window_st "window",1,1,50,10,"Testfenster"
  3131.  
  3132.                 def_toolbar "toolbar", 0, 0, 60, 5,;"region off"
  3133.                 def_button "b0", 0, 0, 10, " ", "Neu"
  3134.                 def_button "b1", 0, 0, 10, " ", "Speichern"
  3135.                 def_button "b2", 0, 0, 10, " ", "Loeschen"
  3136.                 def_button "b3", 0, 0, 10, " ", "Finde"
  3137.                 def_button "b4", 0, 0, 10, " ", "Beenden"
  3138.  
  3139.                 add_item "toolbar",..
  3140.                 "b0",..
  3141.                 "b1",..
  3142.                 "b2",..
  3143.                 "b3",..
  3144.                 "b4"
  3145.  
  3146.                 add_item  "window", "toolbar"
  3147.         ENDMOD
  3148.  
  3149.         rem Eventfunktion wird aufgerufen wenn BUTTON gedr╨æckt
  3150.  
  3151.         MODUL b4_select()
  3152.                 DEFFLOAT flag
  3153.                 MSGBOX "Programm beenden ?", 1, flag, " "
  3154.                 IF flag=1 THEN
  3155.                     _i=1000
  3156.                 ENDIF
  3157.         ENDMOD
  3158.  
  3159. Die Variable _I ist global.( siehe Variablendefinitionen mit
  3160. angehenden Unterstrich "_").
  3161.  
  3162. Wichtig !
  3163. Eventfuktionen besitzen keine ╨¬bergabeparameter. ╨¬bergaben
  3164. m╨æssen ╨æber globale Variablen erfolgen.
  3165.  
  3166. Damit sind wir bereits ╨æber den Status einer einfachen
  3167. Programmoberfl╨öche hinausgegangen. Das Programm ist in der Lage,
  3168. dem Wunsch des Anwenders auf Abbruch zu entsprechen und das Programm
  3169. zu beenden. Wir wollen weitere Programmaktionen nun aber noch eine
  3170. Weile zur╨æckstellen und uns zun╨öchst der Erstellung weiterer
  3171. Oberfl╨öchenobjekte zuwenden.
  3172.  
  3173. Hauptfenster mit Pulldown-Men╨æ
  3174. Als n╨öchstes Element einer Programmoberfl╨öche wollen wir ein
  3175. funktionsf╨öhiges Pulldown-Men╨æ erzeugen. Um den Programmcode kurz
  3176. zu halten, wollen bei diesem Beispiel keine Toolbar einbauen.
  3177. Prinzipiell k╨ñnnen aber beide Elemente gleichzeitig in einem
  3178. Hauptfenster definiert werden.
  3179. Ein Pulldown-Men╨æ wird automatisch immer so weit oben wie m╨ñglich
  3180. im Hauptfenster erzeugt. Dies hat Priorit╨öt vor dem FLAG "Region off",
  3181. das wir bei der Toolbar gesetzt haben.
  3182. Ein Pulldown-Men╨æ w╨ærde deshalb immer oberhalb einer Toolbar im
  3183. Fenster erzeugt.
  3184.  
  3185. Wir wollen ein Pulldown-Men╨æ mit folgendem Aufbau erstellen:
  3186.  
  3187.         Datei           Bearbeiten      Hilfe           Info
  3188.  
  3189.         Neu             Loeschen        Index
  3190.         Speichern       Suchen             ... Grundbegriffe
  3191.         Beenden                            ... Allgemeines
  3192.                                         Tasten
  3193.  
  3194. Die Hauptmen╨æpunkte werden als Pulldown-Items definiert, die Unter-
  3195. punkte als Pop-Up-Items. Wir wollen die Abbruchsaktion beim
  3196. Selektieren von "Beenden" beibehalten (analog zum vorhergehenden
  3197. Beispiel), nur soll dies jetzt beim Ausw╨öhlen des
  3198. Pulldown-Men╨æpunktes geschehen.
  3199. Die einzelnen Men╨æpunkte sollen auch ╨æber Hot-Keys aktivierbar sein.
  3200. Deswegen setzen wir bei der Definition der Men╨æpunkte das
  3201. Zeichen "  vor den Buchstaben, der in Verbindung mit der ALT-Taste
  3202. den Befehl aktivieren soll. Der Hot-Key-Buchstabe erscheint
  3203. dann unterstrichen.
  3204.  
  3205.         DEFFLOAT _i
  3206.         CALL fenster()
  3207.         WIN_PAINT "window"
  3208.         WHILE _i<>1000
  3209.                 WIN_EV _i
  3210.         WEND
  3211.         END
  3212.  
  3213.         REM Nun das Modul mit der Definition des Fensters
  3214.         MODUL fenster()
  3215.  
  3216.                 def_window_st "window",1,1,50,10,"Testfenster"
  3217.                 DEF_PULLDOWN_ITEM "p1", "  1
  3218.                 DEF_PULLDOWN_ITEM "p2", "  1
  3219.                 DEF_PULLDOWN_ITEM "p3", "  1
  3220.                 DEF_PULLDOWN_ITEM "p4", "Info", 0
  3221.                 DEF_PULLDOWN_ITEM "p31","Index",1
  3222.  
  3223.                 DEF_POPUP_ITEM "a1","
  3224.                 DEF_POPUP_ITEM "a2","
  3225.                 DEF_POPUP_ITEM "a3","B  "
  3226.  
  3227.                 DEF_POPUP_ITEM "b1","
  3228.                 DEF_POPUP_ITEM "b2","Su  "
  3229.  
  3230.                 DEF_POPUP_ITEM "c1","
  3231.                 DEF_POPUP_ITEM "c2","
  3232.                 DEF_POPUP_ITEM "c3","
  3233.  
  3234.  
  3235.  
  3236.                 ADD_ITEM "p1",..
  3237.                 "a1",..
  3238.                 "a2",..
  3239.                 "a3"
  3240.  
  3241.                 ADD_ITEM "p2",..
  3242.                 "b1",..
  3243.                 "b2"
  3244.  
  3245.                 ADD_ITEM "p31",..
  3246.                 "c1",..
  3247.                 "c2"
  3248.  
  3249.                 ADD_ITEM "p3",..
  3250.                 "p31",..
  3251.                 "c3"
  3252.  
  3253.  
  3254.                 DEF_PULLDOWN_MENU "menu", 0; "border"
  3255.                 ADD_ITEM "menu",..
  3256.                 "p1",..
  3257.                 "p2",..
  3258.                 "p3",..
  3259.                 "p4"
  3260.  
  3261.                 ADD_ITEM "window", "menu"
  3262.  
  3263.         ENDMOD
  3264.  
  3265.         rem Eventfunktion wird aufgerufen wenn Men╨æpunkt selektiert wird
  3266.  
  3267.         MODUL a3_select()
  3268.                 DEFFLOAT flag
  3269.                 MSGBOX "Programm beenden ?", 1, flag, " "
  3270.                 IF flag=1 THEN
  3271.                     _i=1000
  3272.                 ENDIF
  3273.         ENDMOD
  3274.  
  3275. Wichtig !
  3276. Die Definition eines Pulldown-Men╨æs ist simpel, wenn man einmal
  3277. die Vorgehensweise verstanden hat. Wir haben 4 Hauptmen╨æpunkte.
  3278. Diese werden mit DEF_PULLDOWN_ITEM definiert. Besitzt ein
  3279. Hauptmen╨æpunkt weitere Unterpunkte, erh╨ölt es als Flag den Wert 1.
  3280. Gibt es keine weiteren Unterpunkte dann erh╨ölt der Men╨æpunkt den
  3281. Wert 0 (siehe Men╨æpunkt : Info ).
  3282. Untermen╨æpunkte werden mit DEF_POPUP_ITEM definiert, solange Sie
  3283. keine weiteren Untermen╨æpunkte haben. Ist dies nicht der Fall, gilt
  3284. die Regelung der Hauptmen╨æpunkte (siehe Men╨æpunkt : Index).
  3285.  
  3286.  
  3287.  
  3288. Hauptfenster mit Toolbar und Eingabemaske
  3289. Das letzte Beispielprogramm zu den Oberfl╨öchen soll zus╨ötzlich zu
  3290. einem Bedienungsmen╨æ eine Eingabemaske besitzen, ╨æber welche ein
  3291. Datentransfer zu einer (noch nicht vorhandenen) Datenbank m╨ñglich
  3292. w╨öre. Damit n╨öhern wir uns endg╨æltig vollst╨öndigen
  3293. Programmoberfl╨öchen an.
  3294. Es sollen drei allgemeine Datenfelder f╨ær die Angabe von Namen,
  3295. Vornamen und Wohnort sowie ein Memofeld f╨ær die Angabe l╨öngerer
  3296. Texte wie Kommentare erstellt werden. Der Programmcode daf╨ær l╨ö╤üt
  3297. sich nat╨ærlich mit Hilfe des Maskengenerators generieren.
  3298. Wir wollen aber aus didaktischen Gr╨ænden eine Programmierung
  3299. "zu Fu╤ü" durchf╨æhren.
  3300. Es soll hier auch auf die Erstellung einer den Datenfeldern
  3301. zugrundeliegenden Recordstruktur nicht verzichtet werden, obwohl
  3302. diese nur in Verbindung mit einer Datenbank sinnvoll w╨öre.
  3303.  
  3304. Will man eine Eingabemaske per Hand erzeugen, kommt man nicht
  3305. um das sorgf╨öltige Positionieren der Objekte im Hauptfenster herum.
  3306. Es bedarf gerade am Anfang einiger Anl╨öufe, bis man ein Gef╨æhl f╨ær
  3307. die Distanzen auf dem Monitor entwickelt hat.
  3308. Die in KIM g╨æltige Einheit sind Zeichen. Setzt man beispielsweise
  3309. die Feldbezeichnung "Name" auf die Position 1,0, so bedeutet dies,
  3310. da╤ü das Objekt ein Zeichen vom linken Fensterrand sowie ein Zeichen
  3311. unterhalb des oberen Fensterrands beginnt.
  3312. Hierbei wird der obere Fensterrand durch Toolbars oder
  3313. Pulldown-Men╨æs entsprechend zum unteren Ende dieser Objekte hin
  3314. verlagert.
  3315. Bedenken Sie bei der Positionierung mehrerer Objekte in einer
  3316. Zeile (gleicher x-Wert) immer die L╨önge der Objekte.
  3317. Lassen Sie das zweite Objekt zu fr╨æh in der Zeile beginnen,
  3318. kommt es  zu ╨¬berschneidungen.
  3319. Wir wollen alle Felder mit einer Begrenzung versehen
  3320. (FLAG "border" setzen) und im Kommentarfeld keinen Zeilenumbruch
  3321. erlauben (FLAG "wrap off" setzen).
  3322. Um obiges Programm zu realisieren, m╨æssen wir im Hauptprogramm
  3323. die Recordstruktur definieren und das Modul <fenster> um den Code
  3324. f╨ær die Eingabefelder und die Feldbezeichnungen erweitern.
  3325. Zus╨ötzlich soll das Kommentarfeld Scrollbars erhalten, die durch
  3326. Angabe von Nullen an den rechten und unteren Feldrand gesetzt
  3327. werden (vgl. Kapitel Fenster und Programmoberfl╨öchen).
  3328. Beibehalten wollen wir unseren Programmabbruch ╨æber Aktivierung
  3329. des "Beenden"-Buttons. Deshalb mu╤ü die Event-Schleife und das
  3330. Modul auswerten im Programm erhalten sein.
  3331. Unser Code besitzt dann folgendes Gesicht:
  3332.  
  3333.  
  3334.  
  3335.         DEFFLOAT _i
  3336.  
  3337.         DEFINE soft1, 40 AS Name
  3338.         DEFINE soft2, 40 AS Vorname
  3339.         DEFINE soft3, 40 AS Wohnort
  3340.         DIMMEMO soft4, 10000
  3341.  
  3342.         CALL fenster()
  3343.         WIN_PAINT "window"
  3344.         WHILE _i<>1000
  3345.                 WIN_EV _i
  3346.         WEND
  3347.         END
  3348.  
  3349.         REM Nun das Modul mit der Definition des Fensters
  3350.         MODUL fenster()
  3351.  
  3352.                 def_window_st "window",1,1,65,15,"Testfenster"
  3353.  
  3354.                 def_toolbar "toolbar", 0, 0, 60, 5;"region off"
  3355.                 def_button "b0", 0, 0, 10, " ", "Neu"
  3356.                 def_button "b1", 0, 0, 10, " ", "Speichern"
  3357.                 def_button "b2", 0, 0, 10, " ", "Loeschen"
  3358.                 def_button "b3", 0, 0, 10, " ", "Finde"
  3359.                 def_button "b4", 0, 0, 10, " ", "Beenden"
  3360.  
  3361.                 add_item "toolbar",..
  3362.                 "b0",..
  3363.                 "b1",..
  3364.                 "b2",..
  3365.                 "b3",..
  3366.                 "b4"
  3367.  
  3368.                 add_item  "window", "toolbar"
  3369.  
  3370.                 DEF_PROMPT "aus1", 1, 0, "Name"
  3371.                 DEF_PROMPT "aus2", 1, 1, "Vorname"
  3372.                 DEF_PROMPT "aus3", 1, 2, "Wohnort"
  3373.                 DEF_PROMPT "aus4", 1, 3, "Kommentar"
  3374.                 DEF_STRING "inp1", 10, 0, 40, soft1; "border"
  3375.                 DEF_STRING "inp2", 10, 1, 40, soft2; "border"
  3376.                 DEF_STRING "inp3", 10, 2, 40, soft3; "border"
  3377.                 DEF_TEXT   "inp4", 1, 4, 49, 5, 10000, soft4; "border", "wrap off"
  3378.  
  3379.                 DEF_SCROLLBAR "scroll1", 0, 0, 0, 0, 0
  3380.                 DEF_SCROLLBAR "scroll2", 1, 0, 0, 0, 0
  3381.  
  3382.                 ADD_ITEM "inp4",..
  3383.                 "scroll1",..
  3384.                 "scroll2"
  3385.  
  3386.                 ADD_ITEM_ARRAY "window", "aus",1,4
  3387.                 ADD_ITEM_ARRAY "window", "inp",1,4
  3388.  
  3389.  
  3390.         ENDMOD
  3391.  
  3392.         rem Eventfunktion wird aufgerufen wenn BUTTON gedr╨æckt
  3393.  
  3394.         MODUL b4_select()
  3395.                 DEFFLOAT flag
  3396.                 MSGBOX "Programm beenden ?", 1, flag, " "
  3397.                 IF flag=1 THEN
  3398.                     _i=1000
  3399.                 ENDIF
  3400.         ENDMOD
  3401.  
  3402. Wichtig !
  3403. Objekte mit einer fortlaufenden Kennung k╨ñnnen mit ADD_ITEM_ARRAY
  3404. an das Parentobjekt addiert werden.
  3405. Eine DEFINE-Variable ist eine globale Variable.
  3406.  
  3407.  
  3408. Eine einfache Terminverwaltung
  3409. Nachdem wir durch die Programmierung von Oberfl╨öchen bereits einen
  3410. Einblick in die Technik der Erstellung eines Programms mit KIM
  3411. gewonnen haben, wollen wir uns nun der hohen Schule der
  3412. Datenbankprogrammierung zuwenden.
  3413. Im Gegensatz zu den bisherigen Programmen m╨æssen wir ein Modul
  3414. hinzuf╨ægen, in welchem eine Datenbank definiert und erstellt wird.
  3415. Des weiteren m╨æssen entsprechende Datenbankbefehle im
  3416. Hauptprogramm aufgenommen werden.
  3417. Wir wollen aber gleich einen Schritt weitergehen. Da man eine
  3418. Datenbank auf dem Monitor nicht sehen kann, w╨öre es eine reine
  3419. Spielerei, lediglich eine Datenbank zu definieren, ohne mit
  3420. dieser zu arbeiten. Wir werden also unseren Funktionsbuttons
  3421. und Men╨æpunkten Leben einhauchen und entsprechende
  3422. Programmfunktionen erstellen. Nach diesem Abschnitt sollten
  3423. Sie in der Lage sein, mit jedem programmtechnischen Problem
  3424. unter KIM fertig zu werden.
  3425.  
  3426. Unser erstes vollst╨öndiges Programm soll ein elektronischer
  3427. Terminkalender sein. Es soll die Eingabe von Datum und Uhrzeit
  3428. eines Termins ebenso wie des Namen desjenigen, auf den sich der
  3429. Termin bezieht m╨ñglich sein. Zus╨ötzlich soll ein l╨öngeres Textfeld
  3430. erstellt werden, da╤ü die Angabe zus╨ötzlicher Informationen zu dem
  3431. betreffenden Termin erlaubt.
  3432. Nat╨ærlich m╨æssen dem Benutzer gewisse Bedienungsfunktionen zu dem
  3433. Programm angeboten werden. Deshalb soll eine Toolbar definiert
  3434. werden, die ╨æber Buttons die Neueingabe von Terminen sowie deren
  3435. Speicherung und L╨ñschung erm╨ñglicht. Au╤üerdem soll ein Vor- und
  3436. Zur╨æckbl╨öttern in der Datendatei analog zum Umbl╨öttern von
  3437. Buchseiten zur Verf╨ægung gestellt werden. Ein wichtiger Bestandteil
  3438. ist nat╨ærlich eine Suchfunktion zum Finden bestimmter Termine.
  3439. Schlie╤ülich darf eine Funktion zur Programmbeendigung nat╨ærlich
  3440. nicht fehlen.
  3441.  
  3442. a) Die Programmoberfl╨öche der Terminverwaltung
  3443.  
  3444. F╨ær die Oberfl╨öche k╨ñnnen wir praktisch unver╨öndert das Module <fenster>
  3445. des letzten Beispiels zu Programmoberfl╨öchen ╨æbernehmen.
  3446. Die graduellen Unterschiede sollten kein Problem darstellen.
  3447.  
  3448. b) Datenbank
  3449.  
  3450. Neu ist f╨ær uns die Erstellung der Datenbank. Wir werden ein neues
  3451. Modul <db_oeffnen> schreiben, in welchem die Datensatz- und
  3452. Indexstruktur der Datenbank sowie die Recordstruktur festgelegt sind. Die Recordstruktur besteht aus Define-
  3453. Variablen f╨ær die Zeit-, Datums- und Datenfelder sowie einer
  3454. Memo-Variablen f╨ær das Kommentarfeld. Erinnern Sie sich daran,
  3455. da╤ü die Verwendung von Define-Variablen nicht zwingend notwendig ist,
  3456. und ich an dieser Stelle ein normales Stringarray benutzen werde.
  3457. Die eigentlichen Datensatzfeldl╨öngen werden bekanntlich innerhalb
  3458. der Datenbank festgelegt. Falls Ihnen die Feldstruktur unklar ist,
  3459. sehen Sie bitte im Kapitel ╨æber Datenbankprogrammierung nach.
  3460.  
  3461. Die Neudefinition der Datenbank- und Indexstruktur soll nur
  3462. vorgenommen werden, wenn keine Datenbank vorhanden ist
  3463. (sonst w╨ærden alte Daten gel╨ñscht). Wir werden daher eine
  3464. Abfrage ╨æber EXIST einbauen, die ermittelt, ob die Datei
  3465. "termin.dbf" bereits vorhanden ist (diese Datei wird ja
  3466. bei Erstellung der Datenbank angelegt).
  3467. Ist dies der Fall, wird die bestehende Datenbank und die
  3468. Indexdatei sofort mit IOPEN bzw. IOPEN_INDEX ge╨ñffnet.
  3469. Ansonsten erfolgt die Definition der Feldstrukturen
  3470. und die vorsichtshalber eingebaute L╨ñschung eventuell
  3471. vorhandener .dbf- und .cdx-Dateien, bevor mit ICREATE
  3472. eine Datenbank neu erstellt wird.
  3473.  
  3474. c) Suchfunktion
  3475.  
  3476. Essentiell bei einer Terminverwaltung ist nat╨ærlich eine Suchfunktion.
  3477. Die Realisierung derselben erstreckt sich ╨æber mehrere Programmebenen.
  3478. Zuerst mu╤ü in der Indexstruktur festgelegt werden, nach welchen
  3479. Daten ╨æberhaupt gesucht werden darf.
  3480. Wir wollen hier m╨ñglichst einfach vorgehen und alle Datenfelder
  3481. mit Ausnahme des Kommentar- und des Zeitfeldes als Indexfelder
  3482. auszeichnen. In sp╨öteren Programmen werden Verfeinerungen
  3483. (z.B. ╨æber Filter) vornehmen. Damit ist die Grundlage gelegt.
  3484.  
  3485. d) Suchfenster
  3486.  
  3487. Die Definition f╨ær dieses Fenster befindet sich im Modul
  3488. <erstelle_suchfenster>. Beachten Sie, da╤ü nur die Zusatzobjekte
  3489. neu definiert werden. Das eigentliche Fenster wird analog zum
  3490. Hauptfenster erzeugt.
  3491. Der eigentliche Suchvorgang wird im Modul <fenster_suchen>
  3492. durchgef╨æhrt. Wie Sie erkennen k╨ñnnen, ist dort eine zweite
  3493. Event-Schleife programmiert, welche die Aktionen des Anwenders
  3494. im Suchfenster auswertet.
  3495.  
  3496. e) Weitere Operationen
  3497.  
  3498. Als letzte Funktion soll neben dem bereits bekannten Abbruch des
  3499. Programms eine Datenspeicherung erm╨ñglicht werden.
  3500. Hierzu wird der Inhalt aller Datenfelder in die Recordstruktur
  3501. eingelesen (dies ist aus ╨¬bersichtlichkeitsgr╨ænden in einem Modul
  3502. Daten_schreiben mit GET_ITEM realisiert) und anschlie╤üend mit
  3503. IMODREC der aktuelle Datensatz umgeschrieben und gleichzeitig
  3504. gespeichert.
  3505. Das L╨ñschen eines Datensatzes ist gar nicht so einfach,
  3506. da IDEL nur einen Datensatz als gel╨ñscht markiert, aber nicht
  3507. wirklich entfernt. Dies w╨ærde erst der Befehl IPACK bewirken,
  3508. dessen Ausf╨æhrung aber beim Vorhandensein vieler Daten einige
  3509. Zeit erfordert. Wir wollen deshalb einen anderen Weg w╨öhlen und
  3510. in der Indexstruktur einen Filter einbauen, welcher die Anzeige
  3511. aller als gel╨ñscht markierter Datens╨ötze unterdr╨æckt.
  3512. Diese sind wohlgemerkt noch vorhanden, aber nicht mehr
  3513. einsehbar. Der entsprechende dBASE-Ausdruck lautet DEL()<>"*".
  3514. Der Befehl DEL gibt ein * f╨ær alle als gel╨ñscht markierten Datens╨ötze
  3515. zur╨æck. Die folgende Anweisung filtert dann genau diese Datens╨ötze
  3516. heraus. Beachten Sie bitte, da╤ü Zeilen, in welchen
  3517. Anf╨æhrungszeichen zur ╨¬bergabe von dBASE-Ausdr╨æcken verwendet werden
  3518. (dies ist Vorschrift), zwischen Hochkommas ' gesetzt werden m╨æssen,
  3519. da es verboten ist, zweimal Anf╨æhrungszeichen zu verwenden.
  3520.  
  3521. Vergessen Sie nicht, zum Schlu╤ü des Programms die Datenbank mit
  3522. ICLOSE zu schlie╤üen.
  3523.  
  3524. Hier nun der vollst╨öndige Programmcode:
  3525.  
  3526.  
  3527. rem Datum               :    M╨örz 1995
  3528. rem Version             :    1.0
  3529. rem Programm            :    Terminverwaltung mit DBASE-Datenbank
  3530. rem Datei               :    TERMIN.KIM
  3531. rem Programmierer       :    EDV-Kohlenbach
  3532.  
  3533.  
  3534.         rem Zun╨öchst die Definition einiger Variablen und das Laden der Icondatei
  3535.         deffloat a,_i
  3536.  
  3537.         rem Definition der Felder 1-4 f╨ær die Datenbank
  3538.         dim _felder,1,3
  3539.         DIMMEMO _felder4, 10000
  3540.  
  3541.         rem Hilfetaste definieren
  3542.         SET_KEYMAP "F12",10001,1
  3543.  
  3544.         call db_oeffnen()
  3545.         call fenster()
  3546.         win_paint "window"
  3547.  
  3548.         while _i<>1000
  3549.            win_ev _i
  3550.         wend
  3551.         iclose 1
  3552.         end
  3553.  
  3554.  
  3555. rem ---------------------------------------------------------------------
  3556. rem U N T E R P R O G R A M M E
  3557. rem ---------------------------------------------------------------------
  3558.  
  3559. rem Modul zur Definition und Erstellung einer Datenbank mit Recordstruktur
  3560.         modul db_oeffnen()
  3561.  
  3562.         DEFFLOAT a
  3563.         DEFSTRING expr
  3564.  
  3565.         rem Nun eine Abfrage, ob die Datenbank schon existiert; falls nicht: Neuerstellung
  3566.         exist "termin.dbf",a
  3567.         IF a<>1 THEN
  3568.                 dim feld,1,10
  3569.                 dim index,1,10
  3570.                 feld1=" TIME   ,  C  ,   10  ,   0"
  3571.                 feld2=" DATUM  ,  D  ,   10  ,   0"
  3572.                 feld3=" NAME   ,  C  ,   40  ,   0"
  3573.                 feld4=" MEMO   ,  M  ,   10  ,   0"
  3574.                 feld5=""
  3575.  
  3576.                 rem In Variable <feld5> kein Leerzeichen !!!
  3577.  
  3578.                 index1=' NAME_TAG   ,  NAME  , DEL()<>"*",   0,  0'
  3579.                 index2=' DATUM_TAG  ,  DATUM , DEL()<>"*",   0,  0'
  3580.                 index3=""
  3581.  
  3582.                 rem Eventuell bereits existierende Dateien werden gel╨ñscht
  3583.                 kill "termin.dbf"
  3584.                 kill "termin.cdx"
  3585.                 kill "termin.fpt"
  3586.                 kill "termin.dpt"
  3587.  
  3588.                 rem Die Datenbank wird neu erstellt
  3589.                 icreate "termin",feld,index
  3590.  
  3591.                 rem Mindestens ein Leersatz, sonst funktionieren die
  3592.                 rem Datenbankbefehle nicht !
  3593.                 iopen 1,"termin"
  3594.                 iopen_index 1,"termin"
  3595.                 iadd 1,_felder
  3596.                 iclose 1
  3597.  
  3598.         ENDIF
  3599.  
  3600.         rem Die Datenbank und die Indexdatei werden ge╨ñffnet
  3601.         IOPEN  1,"termin"
  3602.         IOPEN_INDEX 1,"termin"
  3603.  
  3604.         rem Felder k╨ñnnen ╨æber Namen aus der DBASE-DB angesprochen werden
  3605.         rem z.B. _FELDER.NAME oder _FELDER.DATUM
  3606.         dbfields 1,_felder
  3607.  
  3608.         rem Der aktuelle Index wird ausgew╨öhlt und der erste Datensatz geladen
  3609.         iset 1,"DATUM_TAG",expr
  3610.         istart 1,_felder
  3611.  
  3612.         ENDMOD
  3613.  
  3614. rem Definition des Hauptfensters
  3615.         MODUL fenster()
  3616.  
  3617.                 def_window_st "window",1,1,62,15,"Testfenster"
  3618.  
  3619.                 def_toolbar "toolbar", 0, 0, 60, 5;"region off"
  3620.                 def_button "b0", 0, 0, 10, " ", "
  3621.                 def_button "b1", 0, 0, 10, " ", "
  3622.                 def_button "b2", 0, 0, 10, " ", ">>>"
  3623.                 def_button "b3", 0, 0, 10, " ", "<<<"
  3624.                 def_button "b4", 0, 0, 10, " ", "
  3625.                 def_button "b5", 0, 0, 10, " ", "
  3626.                 def_button "b6", 0, 0, 10, " ", "S
  3627.  
  3628.                 add_item "toolbar",..
  3629.                 "b0",..
  3630.                 "b1",..
  3631.                 "b2",..
  3632.                 "b3",..
  3633.                 "b4",..
  3634.                 "b5",..
  3635.                 "b6"
  3636.  
  3637.                 rem Alternative : ADD_ITEM_ARRAY
  3638.                 rem ADD_ITEM_ARRAY "toolbar","b",0,6
  3639.  
  3640.                 add_item  "window", "toolbar"
  3641.  
  3642.                 DEF_PROMPT "aus1", 1, 0, "Zeit  "
  3643.                 DEF_PROMPT "aus2", 1, 1, "Datum  "
  3644.                 DEF_PROMPT "aus3", 1, 2, "Name  "
  3645.                 DEF_PROMPT "aus4", 1, 3, "Kommentar  "
  3646.                 DEF_INPUT_TIME "inp1", 10, 0, 10, "",""; "border"
  3647.                 DEF_INPUT_DATE "inp2",10,1,14,"  .  .  ",""  ;"border"
  3648.                 DEF_STRING "inp3", 10, 2, 40, ""; "border"
  3649.                 DEF_TEXT   "inp4", 1, 4, 49, 5, 10000, ""; "border", "wrap off"
  3650.  
  3651.                 DEF_SCROLLBAR "scroll1", 0, 0, 0, 0, 0
  3652.                 DEF_SCROLLBAR "scroll2", 1, 0, 0, 0, 0
  3653.  
  3654.                 ADD_ITEM "inp4",..
  3655.                 "scroll1",..
  3656.                 "scroll2"
  3657.  
  3658.                 ADD_ITEM_ARRAY "window", "aus",1,4
  3659.                 ADD_ITEM_ARRAY "window", "inp",1,4
  3660.  
  3661.                 rem Statuszeile am unteren Fensterrand
  3662.  
  3663.                 DEF_STATUSBAR "status",1
  3664.                 DEF_PROMPT "statustext",1,0,"F12=Hilfe  ";"color on"
  3665.                 DEF_PALETTE 1,0,7
  3666.                 COLOR_ITEM "statustext",1
  3667.                 ADD_ITEM "status","statustext"
  3668.                 ADD_ITEM "window","status"
  3669.  
  3670.  
  3671.         ENDMOD
  3672.  
  3673. rem Daten aus den Eingabefeldern werden gespeichert
  3674.         modul b0_select()
  3675.           call daten_schreiben()
  3676.           imodrec 1,_felder
  3677.         endmod
  3678.  
  3679. rem Aktueller Datensatz wird gel╨ñscht
  3680.         modul b1_select()
  3681.           idel 1
  3682.           igetrec 1,_felder
  3683.           call daten_ausgeben()
  3684.         endmod
  3685.  
  3686.  
  3687. rem Der n╨öchste Datensatz wird herausgesucht und angezeigt
  3688.         modul b2_select()
  3689.           deffloat a
  3690.           inext 1,a,_felder
  3691.           call daten_ausgeben()
  3692.         endmod
  3693.  
  3694. rem Der vorhergehende Datensatz wird herausgesucht und angezeigt
  3695.         modul b3_select()
  3696.           deffloat a
  3697.           iprev 1,a,_felder
  3698.           call daten_ausgeben()
  3699.         endmod
  3700.  
  3701. rem Programm beenden
  3702.         MODUL b4_select()
  3703.           DEFFLOAT flag
  3704.           MSGBOX "Programm beenden ?", 1, flag, " "
  3705.           IF flag=1 THEN
  3706.             _i=1000
  3707.           ENDIF
  3708.         ENDMOD
  3709.  
  3710. rem Die Eingabefelder werden f╨ær eine Neueingabe geleert
  3711.        modul b5_select()
  3712.           clear _felder,1,4
  3713.           iadd 1,_felder
  3714.           call daten_ausgeben()
  3715.           setfocus "inp1"
  3716.         endmod
  3717.  
  3718. rem Die Suchfunktion wird aufgerufen
  3719.         modul b6_select()
  3720.           call fenster_suchen()
  3721.           igetrec 1,_felder
  3722.           call daten_ausgeben()
  3723.         endmod
  3724.  
  3725. rem Ausgabe von Daten auf dem Bildschirm
  3726.         modul daten_ausgeben()
  3727.           set_item_array "inp",_felder,1,4
  3728.         endmod
  3729.  
  3730. rem Einlesen von Daten aus den Eingabefeldern in die Recordstruktur
  3731.         modul daten_schreiben()
  3732.           get_item_array "inp",_felder,1,4
  3733.         endmod
  3734.  
  3735.  
  3736. rem Suchfunktion
  3737.         MODUL fenster_suchen()
  3738.  
  3739.         defstring obj
  3740.         deffloat ii,taste
  3741.  
  3742.         call erstelle_suchfenster()
  3743.         win_paint "suche"
  3744.         while ii<>1000
  3745.           win_ev ii
  3746.           get_item_pos obj,taste
  3747.           if taste=13 then
  3748.             if obj="bx1" then
  3749.                 call such_auswerten()
  3750.                 ii=1000
  3751.             endif
  3752.             if obj="bx2" then
  3753.                 ii=1000
  3754.             endif
  3755.           endif
  3756.         wend
  3757.         event_on_item "suche","end"
  3758.  
  3759.         endmod
  3760.  
  3761.  
  3762. rem Suchen von Datens╨ötzen
  3763.         MODUL such_auswerten()
  3764.  
  3765.         DEFSTRING expr
  3766.         deffloat ok
  3767.         DIM dat,1,3
  3768.  
  3769.         get_item "kr2",_felder.name
  3770.         compress _felder.name
  3771.         if _felder.name<>"" then
  3772.           iset 1, "Name_Tag", expr
  3773.           iread 1, ok, _felder.name, soft
  3774.           exitmod
  3775.         endif
  3776.         get_item "kr1", _felder.datum
  3777.         if _felder.datum<>"" then
  3778.           iset 1, "Datum_Tag",expr
  3779.           select _felder.datum,46,dat,1,3
  3780.           _felder.datum=dat3+dat2+dat1
  3781.           iread 1, ok, _felder.datum, _felder
  3782.         endif
  3783.         endmod
  3784.  
  3785.  
  3786. rem Definition des Suchfensters
  3787.         MODUL erstelle_suchfenster()
  3788.  
  3789.         def_window_st "suche", 3, 2, 50, 12, "Suchen";"modal","move off"
  3790.  
  3791.         rem Zus╨ötzliche Objekte werden definiert und dem Fenster angef╨ægt
  3792.         def_prompt "such1",10,0,"Geben Sie einen Suchbegriff"
  3793.         def_prompt "such2",10,1,"im entsprechenden Feld an"
  3794.         def_prompt "such3",1,3,"Name  "
  3795.         def_prompt "such4",1,4,"Datum  "
  3796.         def_input_date "kr1",10,4,14,"  .  .  ",""  ;"border"
  3797.         def_string "kr2",10,3,20,"";"border"
  3798.         def_button "bx1",3,8,20,"","  beginnen"
  3799.         def_button "bx2",25,8,20,"","
  3800.  
  3801.  
  3802.         add_item "suche",..
  3803.         "such1",..
  3804.         "such2",..
  3805.         "such3",..
  3806.         "such4",..
  3807.         "kr1",..
  3808.         "kr2",..
  3809.         "bx1",..
  3810.         "bx2"
  3811.  
  3812. endmod
  3813.  
  3814. rem Pr╨æfen ob Datumkorrekt eingegeben
  3815.         modul inp2_validate()
  3816.           deffloat flag
  3817.           msgbox "Datum mu╤ü in der Form TT.MM.YYYY eingegeben werden",0,flag,""
  3818.           setfocus "inp2"
  3819.         endmod
  3820.         modul inp2_lostfocus()
  3821.           defstring date
  3822.           deffloat flag
  3823.           get_item "inp2",date
  3824.           if date=""
  3825.            msgbox "Datum mu╤ü in der Form TT.MM.YYYY eingegeben werden",0,flag,""
  3826.            setfocus "inp2"
  3827.           endif
  3828.         endmod
  3829.  
  3830. rem Auf Taste F1 reagieren
  3831.  
  3832.         modul system_keypress()
  3833.  
  3834.           if system.keypress=10001 then
  3835.              call hilfe(system.object)
  3836.           endif
  3837.  
  3838.         endmod
  3839.  
  3840. rem Hilfefenster
  3841.         modul hilfe(char o)
  3842.           deffloat flag
  3843.           if o="inp1" then
  3844.             msgbox "Hilfe f╨ær Feld INP1",0,flag,""
  3845.           else
  3846.             msgbox "Hier k╨ñnnte eine allgemeine Hilfe stehen !",0,flag,""
  3847.           endif
  3848.         endmod
  3849.  
  3850. rem ************** Ende des Programms *******************
  3851.  
  3852.  
  3853. Zum Schlu╤ü
  3854. ╨¬ber das Programmieren wurden schon tonnenweise B╨æcher geschrieben.
  3855. Ich glaube eine Tonne liegt in meinen Keller!
  3856. Die vorgestellten Programme werden nicht alle ihre Fragen beantworten
  3857. k╨ñnnen. F╨ær das Umsetzen einer Idee zu einen Programm braucht es
  3858. Erfahrung. Wenn man die Befehle einer Sprache beherrscht, hei╤üt dies
  3859. noch nicht das man Programmieren kann !
  3860. Als Einsteiger empfehle ich kleine Programme zu entwickeln,
  3861. wie z.B. einen einfachen Taschenrechner oder eine W╨öhrungsumrechnung.
  3862. Steigern Sie den Schwierigkeitsgrad ihrer Programme.
  3863. Versuchen Sie Routinen allgemein zu halten, damit diese in anderen
  3864. Programmen genutzt werden k╨ñnnen.
  3865. Ich werde in Zukunft diese elektronische Hilfe erweitern, und
  3866. weitere Erfahrungswerte einbringen.
  3867.  
  3868. Kohle
  3869.  
  3870.  
  3871.  
  3872.  
  3873.  
  3874. ΓòÉΓòÉΓòÉ 12. Objekteigenschaften ΓòÉΓòÉΓòÉ
  3875.  
  3876. FLAGS
  3877.  
  3878. Objekteigenschaften
  3879. Ob ein Eingabefeld eine Umrandung besitzt oder nur Gro╤übuchstaben eingeben
  3880. werden d╨ærfen, bestimmen Sie ╨æber die Objekteigenschaften (OE).
  3881. OEs sind wie Schalter, die eine Eigenschaft aktivieren oder deaktivieren.
  3882. In den meisten F╨öllen werden die OEs schon bei der Definition eines Objekts
  3883. ╨æbergeben : DEF_STRING "id",x,y,len,text ; "oe1","oe2",...
  3884. Nach einem Strichpunkt erfolgt mit Komma getrennt, die ╨¬bergabe der OEs.
  3885. OEs werden im in Kleinbuchstaben angegeben.
  3886.  
  3887. Verf╨ægbare OEs :
  3888.  
  3889.  
  3890. Allgemein :
  3891.  
  3892. "color on"       Farbwerte eines Objekt k╨ñnnen ver╨öndert werden
  3893. "border"         Ein Rand wird um das Objekt gezeichnet
  3894. "current off"    Kann nicht das akt. Objekt werden
  3895. "select off"     Schaltet die M╨ñglichkeit einer Selektion des Objekts aus
  3896. "region off"     Das Objekt erh╨ölt die komplette Fensterfl╨öche
  3897. "view only"      Schaltet den Editiermodus aus
  3898. "bitmap"         Hiermit teilen Sie mit, da╤ü das Objekt ein Bitmap beinhaltet
  3899. "editmode"       Objekt l╨össt sich am Bildschrim bewegen und ╨öndern.
  3900. "redisplay"      Objekt wieder zeichnen
  3901. "minicell"       Koordinaten auf 1/10 Schritte setzen
  3902. "pixel"          Koordinaten Pixelorientiert
  3903. "no_status"      Kein Status
  3904. "current"        Objekt erh╨ölt den Status "aktuelles" Objekt
  3905. "changed"        Objekt erh╨ölt den Status "ge╨öndertes" Objekt
  3906. "invalid"        Objekt erh╨ölt den Status "falsche Eingabe"
  3907. "select"         Objekt erh╨ölt den Status "selektiertes" Objekt
  3908. "destroy off"    L╨ñschen und entfernen des Objekts nicht m╨ñglich
  3909. "normal hotkey"  Der Hotkey kann ohne die ALT-Taste angesprochen werden
  3910. "repeat"         Objekt reagiert auf gedr╨æckten Tastendruck
  3911.  
  3912.  
  3913.  
  3914. Eingabefelder :
  3915.  
  3916. "right"          Texteingabe wird rechtsb╨ændig gesetzt
  3917. "clear"          Feldinhalt wir bei Eingabe gel╨ñscht
  3918. "center"         Texteingabe erfolgt zentriert
  3919. "lcase"          Umwandlung in Kleinbuchstaben
  3920. "ucase"          Umwandlung in Gro╤übuchstaben
  3921. "wrap off"       Zeilenumbruch wird ausgeschaltet
  3922. "pass"           Passworteingabe bei DEF_STRING
  3923.  
  3924. Liste, Combobox :
  3925.  
  3926. "sort"           Elemente einer Liste werden sortiert
  3927. "multi"          Mehrfachauswahl aus einer Liste
  3928. "auto select"    Selektiert in einer Gruppe von Radiobuttons den ersten
  3929.                  Button, wenn die Gruppe selektiert wird
  3930.  
  3931. Fenster :
  3932.  
  3933. "lock"           Fenster kann nicht geschlossen werden
  3934. "mdi"            Fenster wird als MDI-Objekt behandelt
  3935. "dialog"         Fenster wird als Dialogbox behandelt
  3936. "modal"          Verhindert, da╤ü andere Fenster Events erhalten, bis das
  3937.                  Fenster geschlossen wird
  3938. "move off"       Verhindert die ╨₧nderung der Position
  3939. "size off"       Verhindert die ╨₧nderung der Gr╨ñ╤üe
  3940. "current off"    Das Objekt kann nicht selektiert werden
  3941. "temp"           Das Fenster wird geschlossen, wenn ein anderes Fenster
  3942.                  selektiert wird
  3943. "maximized"      Darstellung des Fensters mit max. Gr╨ñ╤üe
  3944. "minimized"      Symboldarstellung (DEF_WINDOW mit Iconangabe)
  3945.  
  3946.  
  3947.  
  3948. Men╨æs :
  3949.  
  3950. "checkmark"      Objekt erh╨ölt bei Auswahl einen Hacken
  3951. "sep"            Objekt dient als Trennstrich
  3952.  
  3953. Buttons :
  3954.  
  3955. "double_click"   Button kann ╨æber einen Doppelklick aktiviert werden
  3956. "down_click"     Button wird beim Herunterdr╨æcken aktiviert
  3957. "toggle off"     Klickbewegung wird ausgeschaltet
  3958. "auto size"      H╨ñhe und Breite werden automatisch berechnet
  3959. "checkbox"       Button wird als Checkbox dargestellt
  3960. "3d_off"         Darstellung ohne Schatten
  3961. "radio"          Darstellung als Radiobutton
  3962. "set"            Ein Radiobutton oder eine Checkbox als gesetzt setzen
  3963.  
  3964. Icons :
  3965.  
  3966. "icon minimize"      Definiert dieses Objekt als Symbol
  3967. "icon double_click"  Icon kann durch Doppelklick selektiert werden
  3968.  
  3969. Zeiteingabe :
  3970. "time : "            Trennzeichen ist der Doppelpunkt
  3971. "time 100"           Eingabe als Millisekunden
  3972. "time hours off"     Eingabe ohne Stunden
  3973. "time seconds on"    Sekunden k╨ñnnen eingegeben werden
  3974. "time minutes off"   Minuteneingabe deaktivieren
  3975. "time sep off"       Kein Trennzeichen
  3976. "time lcase"         Eingabe in Kleinbuchstaben
  3977. "time ucase"         Eingabe in Gro╤übuchstaben
  3978. "time system"        Vorbelegung mit Systemzeit
  3979. "time 12"            12 Stunden Uhrzeit
  3980. "time 24"            24 Stunden Uhrzeit
  3981. "time fill"          Zahlen kleiner als 10 werden auf zwei Stellen mit
  3982.                      einer f╨æhrenden Null aufgef╨ællt.
  3983.  
  3984. Numerische Eingabe ( DEF_NUMBER)
  3985.  
  3986. "scientific"         Wissenschaftliche Schreibweise aktiviert (z.B. 2E-2)
  3987. "decimal 0"          Keine Nachkommastelle
  3988. "decimal 1"          Eine Nachkommastelle
  3989. "decimal 2"          ...
  3990. "decimal 3"          ...
  3991. "decimal 4"          ...
  3992. "decimal 5"          ...
  3993. "decimal 6"          Sechs Nachkommastellen
  3994. "currency"           W╨öhrung
  3995. "commas"             Komma statt Punkt (Automatisch)
  3996. "percent"            Prozenteingabe (%)
  3997.  
  3998. Drag und Drop f╨ær Objekte in einer Liste oder Eingabefeld
  3999.  
  4000. "drag move"          Objekt kann verschoben werden
  4001. "drag copy"          Objekt kann kopiert werden
  4002. "drop accept         Objekt erlaubt Drag   Drop
  4003.  
  4004.  
  4005.  
  4006. Nachtr╨ögliches ╨₧ndern von Eigenschaften :
  4007.  
  4008. F╨ær diesen Zweck steht folgende Funktion zur Verf╨ægung :
  4009.  
  4010. SET_ITEM_STATUS "id",flag,"oe1",...
  4011.  
  4012. Ermitteln von Eigenschaften eines Objekts :
  4013.  
  4014. GET_ITEM_STATUS "id","status",ok
  4015.  
  4016.  
  4017.  
  4018. ΓòÉΓòÉΓòÉ 13. Datenbankfilter / Fehlercodes ΓòÉΓòÉΓòÉ
  4019.  
  4020.  
  4021. DBASE-AusdrБcke
  4022.  
  4023. Allgemeine Hinweise
  4024.  
  4025. dBASE-Ausdr╨æcke werden oft zur Definition von Schl╨æsseln und Filtern
  4026. einer Indexdatei gebraucht.
  4027. Sie k╨ñnnen aber aber auch f╨ær andere Zwecke, z.B. interaktiven
  4028. Abfragen bei Relationen, benutzt  werden.
  4029. Alle dBASE-Ausdr╨æcke geben den Wert eines bestimmten Typs zur╨æck.
  4030. Dieser Typ kann "Numerisch", "Zeichen", "Datum" oder "Logisch" sein.
  4031. Feldnamen, Konstanten und Funktionen k╨ñnnen als Teile von
  4032. dBASE-Ausdr╨æcken benutzt werden. Diese Teile lassen sich
  4033. mit anderen Funktionen oder mit Operatoren kombinieren.
  4034.  
  4035. Feldnamen
  4036.  
  4037. Es ist m╨ñglich, einen Feldnamen in einem dBASE-Ausdruck durch die
  4038. Angabe der Datendatei zu kennzeichnen. Beispiel f╨ær einen
  4039. dBASE-Ausdruck "DATENDATEI->FELD_NAME.
  4040. Der erste Teil, der Kennzeichner, bezeichnet eine Datendatei,
  4041. dem nach dem "->" der Feldname folgt.
  4042.  
  4043. dBASE-Ausdruckskonstanten
  4044.  
  4045. dBASE-Ausdr╨æcke k╨ñnnen aus einer numerischen, logischen oder
  4046. Zeichenkonstante bestehen. Konstanten werden gew╨ñhnlich in
  4047. komplizierten dBASE-Ausdr╨æcken benutzt.
  4048. Eine numerische Konstante ist eine Zahl. Zum Beispiel sind "5",
  4049. "7.3" und "18" dBASE-Ausdr╨æcke mit numerischen Konstanten.
  4050. Zeichenkonstanten sind in Anf╨æhrungszeichen eingeschlossene
  4051. Buchstaben. Die Konstanten ".TRUE." und ".FALSE." sind die einzigen
  4052. g╨æltigen logischen Konstanten. Die Konstanten ".T." und ".F."
  4053. sind die g╨æltige Abk╨ærzung daf╨ær.
  4054.  
  4055. Operatoren der dBASE-Ausdr╨æcke
  4056.  
  4057. Mit Operatoren wie "+","*" oder "<" werden Konstanten und Felder
  4058. bearbeitet. "3+2" ist ein Beispiel f╨ær einen dBASE-Ausdruck, bei
  4059. dem der Additionsoperator auf zwei numerischen Konstanten wirkt,
  4060. um den numerischen Wert "11" zur╨æckzugeben.
  4061. Als Regel gilt Punkt vor Strich.
  4062.  
  4063. Zeichenoperatoren
  4064.  
  4065. Es gibt zwei Zeichenoperatoren, die zwei Zeichenwerte verbinden.
  4066. "Hans "+"Schmidt"       wird zu "Hans Schmidt"
  4067. "AAA  "-"CCCC   "       wird zu "AAACCCC     "
  4068. Bei der zweiten Variante werden alle endst╨öndigen Leerzeichen
  4069. der ersten Zeichenkette an das Ende des Gesamtausdrucks angef╨ægt.
  4070.  
  4071. Vergleichsoperatoren
  4072.  
  4073. VOs geben ein logisches Ergebnis (entweder wahr oder falsch)
  4074. zur╨æck. Alle Operatoren mit der Ausnahme von "Beinhalten"
  4075. arbeiten mit numerischen, Zeichen- oder Datumswerten.
  4076. "Beinhalten" arbeitet mit Zeichenketten.
  4077.  
  4078. Gleich                          =
  4079. Ungleich                        <> oder #
  4080. Kleiner als                     <
  4081. Gr╨ñ╤üer als                      >
  4082. Kleiner oder gleich             <=
  4083. Gr╨ñ╤üer oder gleich              >=
  4084. Beinhalten                      $
  4085.  
  4086. Beispiel :      "AB"$"ABCD"     wahr
  4087.                 8<7             falsch
  4088.  
  4089. Logische Operatoren
  4090.  
  4091. Nicht                           .NOT.
  4092. Und                             .AND.
  4093. Oder                            .OR.
  4094.  
  4095. Beispiel :
  4096.  
  4097. Name="Meier" .AND. Ort="M╨ænchen"
  4098. DEL()="*" .AND. UPPER(Ort)="N╨¬RNBERG"
  4099.  
  4100.  
  4101. dBASE-Ausdruckskonstanten
  4102.  
  4103. Befehle f╨ær die Indexdefinition
  4104.  
  4105. CTOD()
  4106. Die Funktion Character TO Date wandelt einen Zeichenwert in einen
  4107. Datumswert um, wobei die Ausgabe im Format MM/DD/YY erfolgt
  4108. (M=Monat, D=Tag, Y=Jahr) Bsp: CTOD("110288") wird zu 11/02/88.
  4109.  
  4110. DATE()
  4111. Diese Funktion gibt das aktuelle Datum aus dem ROM-BIOS zur╨æck.
  4112.  
  4113. DAY()
  4114. Hier wird der Tag des in den Klammern anzugebenden Datums ausgew╨öhlt
  4115. und zur╨æckgegeben. Soll das vorgegebene Datum das aktuelle
  4116. Systemdatum sein, geben Sie an: DAY(DATE).
  4117.  
  4118. DEL()
  4119. ╨¬berpr╨æft, ob der aktuelle Datensatz als gel╨ñscht markiert ist.
  4120. Soll dies der Fall sein, wird "*" zur╨æckgegeben, ansonsten " ".
  4121.  
  4122. DELETED()
  4123. ╨¬berpr╨æft, ob der aktuelle Datensatz als gel╨ñscht markiert ist.
  4124. Ist dies der Fall, wird .TRUE. zur╨æckgegeben.
  4125.  
  4126. DESCEND()
  4127. Diese Funktion ist nur bei Systemen mit Clipper-Unterst╨ætzung
  4128. verf╨ægbar. Es wir die Komplementversion des in Klammern vorgegebenen
  4129. Ausdrucks zur╨æckgegeben.
  4130.  
  4131. DTOC()
  4132. Das in der Klammer vorgegebene Datum wird in eine Zeichenkonstante
  4133. konvertiert. Das resultierende Format ist MM/DD/YY (s.o.).
  4134.  
  4135. DTOS()
  4136. Das in der Klammer vorgegebene Datum wird in eine Zeichenkonstante
  4137. ╨æberf╨æhrt. Das resultierende Format ist CCYYMMDD (C=Jahrhundert).
  4138.  
  4139. IIF(Log_Wert, Wahr_Result, Falsch_Result)
  4140. Bei dieser Funktion m╨æssen Sie f╨ær Log_Wert einen Ausdruck angeben,
  4141. der dann von IIF ╨æberpr╨æft wird. Erweist sich der Ausdruck als wahr,
  4142. wird der in Wahr_Result vorgegebene Wert zur╨æckgegeben,
  4143. ansonsten wird der in Falsch_Result vorgegebene Wert ╨æbergeben.
  4144.  
  4145. TRIMM()
  4146. Mit dieser Funktion werden aus dem Ausdruck in der Klammer eventuelle
  4147. Leerzeichen links vom Inhalt entfernt.
  4148.  
  4149. MONTH()
  4150. Der Monat des in der Klammer angegebene Datum wird als numerische
  4151. Konstante zur╨æckgegeben.
  4152.  
  4153. RECCOUNT()
  4154. Die Funktion"Record Count" liefert die Zahl aller verf╨ægbaren
  4155. Datens╨ötze in der Datenbank.
  4156.  
  4157. RECNO()
  4158. Die Funktion "Record Number" ermittelt die Nummer des aktuellen
  4159. Datensatzes (analog zu IGET_NR).
  4160.  
  4161. STOD()
  4162. Diese Funktion wandelt den in der Klammer angegebenen Zeichenwert
  4163. in einen Datumswert um. Das resultierende Format ist CCYYMMDD.
  4164.  
  4165. STR (Zahl, L╨önge, Nachkomma)
  4166. Die in Zahl vorgegebene Zahl wird in eine Zeichenkonstante umgewandelt.
  4167. Diese besitzt die in L╨önge angegebene Zeichenzahl und die in
  4168. Nachkomma angegebene Zahl an Nachkommastellen.
  4169. Bsp.: STR(5.7, 4, 2) wird zu "5.70" (der Punkt z╨öhlt mit).
  4170.  
  4171. SUBSTR(Zeichen, Start, Anzahl)
  4172. Ein Teil der in Zeichen vorgegebene Zeichenkonstante wird
  4173. zur╨æckgegeben. Der selektierte Teilbereich beginnt ab dem in Start
  4174. ausgew╨öhlten Zeichen und enth╨ölt die in Anzahl angegebene Zeichenzahl.
  4175. Bsp: SUBSTR("ABCDE",2,3) ergibt "BCD".
  4176.  
  4177. TIME()
  4178. Es wird die Systemzeit aus dem ROM-BIOS als Zeichen zur╨æckgegeben.
  4179. Das resultierende Format ist HH
  4180.  
  4181. TRIM()
  4182. Dem in der Klammer angegebenem Ausdruck werden alle endst╨öndigen
  4183. Leerzeichen entfernt.
  4184.  
  4185. UPPER()
  4186. Alle Zeichen des in der Klammer angegebenen Ausdrucks werden in
  4187. Gro╤übuchstaben umgewandelt.
  4188.  
  4189. VAL()
  4190. Eine Zeichenkonstante wird in eine numerische konvertiert.
  4191.  
  4192. YEAR()
  4193. Das Jahr des in der Klammer vorgegebenen Datums wird als numerische
  4194. Konstante zur╨æckgegeben.
  4195.  
  4196.  
  4197.  
  4198. Fehlercodes
  4199.  
  4200. Bei den aufgef╨æhrten Datenbankbefehlen kann (mu╤ü nicht) ein weiterer numerischer
  4201. Parameter (Variable) mit angegeben werden.
  4202.  
  4203. Beispiel : IOPEN 1,"test" [,fehlercode]
  4204.  
  4205. Tritt ein Fehler auf, so kann der Fehlercode ermittelt werden.
  4206. KIM ╨ñffnet dann keine Fehlerbox.
  4207. Gehen Sie vorsichtig hiermit um !
  4208.  
  4209. Befehle :
  4210. ISTART, IENDE, IOPEN, INEXT, IPREV, IMAKEINDEX, IOPEN_INDEX,
  4211. ICLOSE_INDEX, IREINDEX, ICREATE, ILOCK, IULOCK, ISET, IREAD,
  4212. ICLOSE, IGO_NR
  4213.  
  4214. ---------------------------------------------------------------------------
  4215. F E H L E R C O D E S
  4216.  
  4217. Code Fehler
  4218. ---------------------------------------------------------------------------
  4219. Allgemein...
  4220. -10  Fehler beim Schlie╤üen einer Datei
  4221. -20  Fehler beim Erstellen einer Datei (Dateiname,Platte voll,..)
  4222. -30  Fehler beim bestimmen der Dateil╨önge
  4223. -40  Fehler beim Einstellen der Dateil╨önge
  4224. -50  Fehler beim Sperren einer Datei
  4225. -60  Fehler beim ╨⌐ffnen einer Datei (nicht vorh.,..)
  4226. -70  Fehler beim lesen in einer Datei
  4227. -80  Fehler beim L╨ñschen
  4228. -90  Fehler beim Umbenennen
  4229. -100 Fehler beim Positionieren des Dateizeigers
  4230. -110 Fehler beim Entsprerren einer Datei
  4231. -120 Platte voll beim schreiben in eine Datei
  4232. -200 Datei ist keine Datendatei
  4233. -210 Unbekannter Feldname
  4234. -220 Unbekannter Feldtyp
  4235. -230 Datensatzl╨önge zu gro╤ü
  4236.  
  4237. Index...
  4238. -300 Subindex fehlt (Datensatz hat keinen Eintrag im Index)
  4239. -310 Keine richtige Indexdatei
  4240. -330 Subindex nicht gefunden (Name nicht gefunden)
  4241. -340 Kein eindeutiger Schl╨æssel
  4242.  
  4243. AusdrБcke...
  4244. -400 Komma oder Klammer erwartet
  4245. -410 Ausdruck nicht vollst╨öndig
  4246. -420 Name der Datendatei nicht ermittelt
  4247. -422 IIF() erfordert Parameter von gleicher L╨önge
  4248. -425 SUBSTR() und STR() erfordert Konstanten als Parameter
  4249. -430 Anzahl der Parameter sind falsch
  4250. -440 ╨¬berlauf bei der Auswertung eines Ausdrucks
  4251. -450 Rechte Klammer fehlt
  4252. -460 Typ der Unterausdrucks ist falsch
  4253. -470 Unbekannte Funktion
  4254. -480 Unbekannter Operator
  4255. -490 Unbekannter Wert
  4256. -500 Unbeendeter String
  4257.  
  4258. Optimierungsfehler ...
  4259. -610 Allgemeiner Optimierungsfehler
  4260. -620 Fehler bei der Aufhebung der Opt.
  4261. -630 Fehler beim Herausschreiben der Datei
  4262.  
  4263. Relationen...
  4264. -710 Allgemeiner Relationsfehler
  4265. -720 ╨¬bereinstimmender Slave-Datensatz nicht gefunden
  4266.  
  4267. Schwere Fehler...
  4268. -910 Interner Fehler
  4269. -920 Nicht genug Speicher
  4270. -930 Unerwarteter Parameter
  4271. -950 Unerwartetes Ergebnis
  4272.  
  4273. R ╨¬ C K M E L D U N G E N
  4274. -------------------------
  4275.  
  4276. 0  Aufruf erfolgreich
  4277. 1  Suchschl╨æssel gefunden
  4278. 2  Suchaufruf nicht erfolgreich, Positionierung erfolgt
  4279.    hinter den abgefragten Suchschl╨æssel.
  4280. 3  Dateiende
  4281. 4  Dateianfang
  4282. 5  Datensatz oder Subindexschl╨æssel fehlt
  4283. 10 Index in absteigender Reihenfolge sortiert
  4284. 20 Subindex nur eindeutigen Schl╨æssel und es wurde
  4285.    versucht einen gleichen Key anzuf╨ægen.
  4286. 40 Datensatz wird ignoriert
  4287. 45 Datensatz wird beibehalten
  4288. 50 Teil der Datendatei gesperrt
  4289. 60 Datei konnte nicht angelegt werden
  4290. 70 Datei konnte nicht ge╨ñffnet werden
  4291. 80 Subindexname nicht gefunden
  4292. 90 Slave-Datensatz wurde nicht gefunden
  4293.  
  4294. ----------------------------------------------------------------------------
  4295.  
  4296.  
  4297.  
  4298. ΓòÉΓòÉΓòÉ 14. Relationen ΓòÉΓòÉΓòÉ
  4299.  
  4300. Relationen
  4301.  
  4302. EinfБhrung
  4303. Bisher  haben  wir  unsere  Betrachtungen  auf  lediglich  eine
  4304. Datenbank  beschr╨önkt.  Es  ist  aber  durchaus  m╨ñglich,  KIM-
  4305. Programme  mit  mehreren  Datenbanken  auszustatten.  Dies  ist
  4306. beispielsweise dann vorteilhaft, wenn Sie eine fr╨æher erstellte
  4307. Datenbank mitsamt ihren Daten zus╨ötzlich zur neuen Datenbank in
  4308. das  Programm  einf╨ægen  wollen.  Dabei  kann  die  zus╨ötzliche
  4309. Datenbank  auch  mit  anderen Programmen  wie  dBASE  generiert
  4310. worden sein.
  4311. Einfach  ist  nat╨ærlich  der Fall, da╤ü  Sie  jeweils  nur  eine
  4312. Datenbank zur gleichen Zeit benutzen wollen. Dann schlie╤üen Sie
  4313. jeweils  eine  Datenbank, wenn die andere  ge╨ñffnet  wird,  und
  4314. arbeiten ganz normal wie zuvor erl╨öutert mit einer Datenbank.
  4315. Viel interessanter ist aber nat╨ærlich die M╨ñglichkeit, mit zwei
  4316. Datenbanken zur selben Zeit zu arbeiten. Die Datens╨ötze  beider
  4317. Datenbanken k╨ñnnen dann miteinander verkn╨æpft und so  gemeinsam
  4318. verwertet  werden. Eine Verkn╨æpfung von Datenbanken  bezeichnet
  4319. man allgemein als Relation.
  4320. Wollen  wir  uns  an  einem  Beispiel verdeutlichen,  wie  eine
  4321. Relation zwischen Datenbanken aufgebaut ist. Nehmen wir an,  es
  4322. existiert eine Datenbank 1 mit Datens╨ötzen, in denen  der  Name
  4323. und  der Vorname eines Kunden gespeichert ist. In einer zweiten
  4324. Datenbank  sollen hingegen der Name und der Wohnort verzeichnet
  4325. sein:
  4326.  
  4327. Datenbank   1                         Datenbank2
  4328.  
  4329. Name         Vorname                  Name          Wohnort
  4330. ---------------------------------------------------------------
  4331. M╨æller       Karl-Heinz               M╨æller        N╨ærnberg
  4332. Schulz       Roland                   Schulz        M╨ænchen
  4333. Wei╤ü         Norbert                  Wei╤ü          Frankfurt
  4334.  
  4335. Wir  m╨ñchten  nun  die  beiden Datenbanken  verkn╨æpfen,  um  zu
  4336. erreichen,   da╤ü   uns   die  Datens╨ötze   beider   Datenbanken
  4337. gleichzeitig zur Verf╨ægung stehen. Wenn wir also beispielsweise
  4338. nach  allen  Informationen zum Kunden M╨æller suchen,  soll  uns
  4339. nicht  nur  der Vorname, sondern gleichzeitig auch der  Wohnort
  4340. angegeben werden.
  4341. Dies  kann man erreichen, indem man eine Relation zwischen  den
  4342. beiden Datenbanken aufbaut. Das ist aber nur dann m╨ñglich, wenn
  4343. mindestens ein Datensatzfeld in beiden Datenbanken gleichzeitig
  4344. vorhanden ist. Diese Einschr╨önkung wird sofort klar,  wenn  man
  4345. sich  vor  Augen  f╨æhrt,  welche  Aktionen  das  Programm  beim
  4346. Arbeiten   mit   einer   Datenbankrelation   durchf╨æhren   mu╤ü.
  4347. Aktivieren Sie in der Datenbank 1 den Datensatz mit  dem  Namen
  4348. "M╨æller",   dann  mu╤ü  in  diesem  Datensatz  mindestens   eine
  4349. Information  enthalten sein, die auch in der  Datenbank  2  vom
  4350. Programm  gefunden werden kann. Ansonsten ist es  dem  Computer
  4351. nicht    m╨ñglich,   eine   Verkn╨æpfung   zwischen   Datens╨ötzen
  4352. herzustellen, da er nicht wei╤ü, welcher Datensatz der Datenbank
  4353. 2 zu dem aktivierten Datensatz der Datenbank 1 geh╨ñrt.
  4354. Dieses  verkn╨æpfende Feld wird LOOKUP-Schl╨æssel genannt. Anhand
  4355. des Lookup-Schl╨æssels wird die Datenbank 2 nach passenden Daten
  4356. zu  einem  in der Datenbank 1 aktivierten Datensatz durchsucht.
  4357. Die  Datenbank 1 wird auch als MASTER-Datenbank bezeichnet, die
  4358. damit  verkn╨æpfte Datenbank 2 als SLAVE-Datenbank (engl. Master
  4359. and slave = Herr und Sklave).
  4360. Wichtig:  Der  Lookup-Schl╨æssel  mu╤ü  ein  Datensatzfeld  sein,
  4361. welches in der Slave-Datenbank als Indexfeld ausgezeichnet ist.
  4362. Nur  dann  ist  gew╨öhrleistet, da╤ü die  Relation  zwischen  den
  4363. Datenbanken  in  einer  vern╨ænftigen Zeit  durchgef╨æhrt  werden
  4364. kann. Immerhin mu╤ü ja die zweite Datenbank anhand eines aus der
  4365. Master-Datenbank      vorgegebenen     Suchkriteriums      (dem
  4366. Masterausdruck)  nach passenden Datens╨ötzen durchsucht  werden.
  4367. Dies  ist  nur dann m╨ñglich, wenn dieses Suchkriterium  in  der
  4368. Slave-Datenbank  als  Indexfeld  ausgew╨öhlt  ist,  die   Slave-
  4369. Datenbank also nach diesem Datensatzfeld geordnet ist.
  4370.  
  4371. Erstellen von Relationen
  4372. Der  erste Schritt beim Aufbau einer Relation besteht nat╨ærlich
  4373. in  der  Definition der ben╨ñtigten Datenbanken. Dabei geht  man
  4374. genauso  vor  wie  beim  Generieren einer einzelnen  Datenbank,
  4375. weshalb  der  folgende Programmcode kommentarlos  wiedergegeben
  4376. werden soll. Beachten Sie aber bitte, da╤ü die Variablen, welche
  4377. die  Datensatzfelder  bilden,  in Master-  und  Slave-Datenbank
  4378. unterschiedliche Bezeichnungen besitzen m╨æssen:
  4379.  
  4380.  
  4381.         REM Definition zweier Datenbanken
  4382.         DIM feld, 1, 3
  4383.         DIM index, 1, 3
  4384.         DIM feld_s, 1, 3
  4385.         DIM index_s, 1, 3
  4386.         DEFSTRING expr
  4387.         REM Feldaufbau der Masterdatenbank
  4388.         feld1=" Name  ,   C,  10, 0"
  4389.         feld2=" Vorname    ,   C,  20, 0"
  4390.         feld3=" "
  4391.         REM Indexaufbau der Masterdatenbank
  4392.         index1=" Name ,   Name,    ,   0,  0"
  4393.         index2=" "
  4394.         REM Feldaufbau der Slavedatenbank
  4395.         feld_s1=" Name,   C,  10, 0"
  4396.         feld_s2=" Wohnort  ,   C,  20, 0"
  4397.         feld_s3=" "
  4398.         REM Indexaufbau der Slavedatenbank
  4399.         index_s1=" Name_s, Name,    ,   0,  0"
  4400.         index_s2=" "
  4401.         REM L╨ñschen evtl. vorhandener Dateien
  4402.         KILL "master.dbf"
  4403.         KILL "master.cdx"
  4404.         KILL "slave.dbf"
  4405.         KILL "slave.cdx"
  4406.         REM Erstellen und Γòôffnen der neuen Datenbanken
  4407.         ICREATE "master", feld, index
  4408.         ICREATE "slave", feld_s, index_s
  4409.         IOPEN 1, "master"
  4410.         IOPEN 2, "slave"
  4411.  
  4412. Somit  wurden  zwei  Datenbanken mit den  Kennummern  1  und  2
  4413. erzeugt.  Beachten Sie bitte, da╤ü zwei wichtige  Grundkriterien
  4414. f╨ær  das  Zustandekommen einer Relation  erf╨ællt  worden  sind:
  4415. Beide  Datenbanken  besitzen  in  Ihrer  Datensatzstruktur  ein
  4416. gemeinsames Feld, welches als Lookup-Schl╨æssel verwendet werden
  4417. kann (n╨ömlich "Name", und dieses Feld ist in der Slavedatenbank
  4418. als  Indexfeld selektiert. Um die Datenbanken jetzt miteinander
  4419. zu verkn╨æpfen, rufen Sie folgenden Befehl auf:
  4420.  
  4421.              ISETREL relnr, dbnr_m, dbnr_s, lookup
  4422.  
  4423. Eine  Relation erh╨ölt analog zu einer Datenbank eine  Kennummer
  4424. (Handle) durch die Variable relnr, ╨æber welche sie angesprochen
  4425. werden kann. Das Handle einer Relation ist als Platzhalter  f╨ær
  4426. die Kennummern der verkn╨æpften Datenbanken aufzufassen, da beim
  4427. Aufruf   der   Relation   gleichzeitig   die   se   Datenbanken
  4428. angesprochen werden. Anstelle der Variablen dbnr_m  und  dbnr_s
  4429. geben  Sie die Kennummern der zu verkn╨æpfenden Datenbanken  an,
  4430. wobei  die  zuerst genannte Datenbank immer zur Masterdatenbank
  4431. wird.    Die    letzte    Variable   lookup    definiert    das
  4432. Verkn╨æpfungskriterium zwischen beiden Datenbanken, den  Lookup-
  4433. Schl╨æssel.  Geben Sie dort die Bezeichnung des  Datensatzfeldes
  4434. an, welches in beiden Datenbanken enthalten sein mu╤ü und anhand
  4435. dessen  die Relation aufgebaut werden soll. Erinnern  Sie  sich
  4436. bitte  daran,  da╤ü  dieses  Feld  in  der  Slavedatenbank   ein
  4437. Indexfeld sein mu╤ü.
  4438. Prinzipiell  lassen  sich beliebig viele  Relationen  aufbauen.
  4439. Eine  Masterdatenbank  kann unbegrenzt  viele  Slavedatenbanken
  4440. besitzen.  Diese  k╨ñnnen  wiederum  Masterdatenbanken  weiterer
  4441. Slavedatenbanken  sein.  F╨ær  jede  Verkn╨æpfung  zweier   neuer
  4442. Datenbanken  mu╤ü  dann  eine  Relation  mit  ISETREL  aufgebaut
  4443. werden.
  4444. Die   einzelnen  Lookup-Schl╨æssel  auf  diese  Art  verkn╨æpfter
  4445. Datenbanken  m╨æssen nicht identisch sein. Nehmen  wir  an,  wir
  4446. wollen   unserer  obigen  Relation  (mit  dem  Lookup-Schl╨æssel
  4447. "Name")  eine  weitere Datenbank mit den Feldern "Wohnort"  und
  4448. "Stra╤üe"  hinzuf╨ægen,  so  gelingt  dies  durch  Aufbau   einer
  4449. Relation  zwischen  der obigen Slavedatenbank  und  der  neuen,
  4450. wobei  diese  Relation den Lookup-Schl╨æssel "Wohnort"  besitzen
  4451. wird   (dieses  Feld  ist  in  den  entsprechenden  Datenbanken
  4452. gemeinsam  vorhanden).  Alle  drei  Datenbanken  sind  dann  in
  4453. Relation  zueinander.  Egal welche von beiden  Relationen  (die
  4454. zwischen Master und Slave oder die zwischen Slave und Neu)  Sie
  4455. aufrufen,  Sie  erhalten  jeweils die zueinander  in  Beziehung
  4456. stehenden Datens╨ötze aller drei Datenbanken.
  4457.  
  4458.  
  4459. Datensatzzeiger innerhalb einer Relation
  4460. Auch  innerhalb einer Relation gelten f╨ær die Organisation  und
  4461. Auswahl   von  Datens╨ötzen  dieselben  Regeln  wie  bei   einer
  4462. einzelnen  Datenbank. Die Datens╨ötze werden in jeder  Datenbank
  4463. separat  nach dem aktuellen Index geordnet (welcher f╨ær Master-
  4464. und Slavedatenbank nicht identisch sein mu╤ü).
  4465. Auch  in  einer Relation existiert ein Datensatzzeiger, welcher
  4466. den   aktuellen   Datensatz  festlegt.  Dieser  Datensatzzeiger
  4467. befindet  sich  in der Masterdatenbank und kann auch  nur  dort
  4468. bewegt werden. Bei jeder Bewegung des Datensatzzeigers wird die
  4469. Relation  zwischen  den beiden Datenbanken neu  aufgebaut,  wie
  4470. folgendes Schema verdeutlichen soll:
  4471.  
  4472. Datenbank   1                         Datenbank2
  4473.  
  4474. Name       Vorname                       Name    Wohnort
  4475. ---------------------------------------------------------------
  4476. M╨æller     Karl-Heinz                    M╨æller  N╨ærnberg
  4477. Schulz     Roland                        Schulz  M╨ænchen
  4478. Wei╤ü       Norbert                       Wei╤ü    Frankfurt
  4479.  
  4480. Der  Datensatzzeiger  befindet sich in der Masterdatenbank  auf
  4481. dem  Datensatz mit dem Namen "M╨æller". Das Feld "Name" ist  der
  4482. Lookup-Schl╨æssel der Relation. Der Inhalt des Felds  "Name"  im
  4483. aktuellen   Datensatz  der  Masterdatenbank  ist  demnach   der
  4484. Masterausdruck  (das Suchkriterium), mit dem die Slavedatenbank
  4485. nach  zugeh╨ñrigen Datens╨ötzen durchsucht wird. Sobald dort  ein
  4486. Datensatz  mit  Inhalt "M╨æller" im Feld "Name"  gefunden  wird,
  4487. erstellt  das Programm die Relation (gekennzeichnet  durch  den
  4488. Doppelpfeil). W╨ærde der Datensatzzeiger zum n╨öchsten  Datensatz
  4489. bewegt,  m╨æ╤üte die Slavedatenbank nach dem neuen Masterausdruck
  4490. (in  unserem Beispiel w╨öre das "Schulz") durchsucht werden. Ist
  4491. der  entsprechende Datensatz gefunden, wird die  neue  Relation
  4492. zwischen den zugeh╨ñrigen Datens╨ötzen aufgebaut.
  4493. Was  ist  nun,  wenn zu einem Datensatz in der  Masterdatenbank
  4494. mehrere  Datens╨ötze  in der Slavedatenbank existieren?  In  KIM
  4495. stellt   dies  kein  Problem  dar,  da  eine  sogenannte   1 Dies bedeutet, da╤ü das  Programm
  4496. selbst╨öndig   erkennt,  ob  mehrere  passende  Datens╨ötze   der
  4497. Slavedatenbank  dem  Masterausdruck  entsprechen.   Wird   dann
  4498. versucht,  den Datensatzzeiger in der Masterdatenbank  um  eine
  4499. Position  zu  verstellen,  reagiert das  Programm  zun╨öchst  so
  4500. darauf,   da╤ü   der   n╨öchste   passende   Datensatz   in   der
  4501. Slavedatenbank  ausgew╨öhlt wird. Erst wenn es keinen  Datensatz
  4502. in   der  Slavedatenbank  mehr  gibt,  der  dem  Masterausdruck
  4503. entspricht,  wird  der Datensatzzeiger in  der  Masterdatenbank
  4504. weiter bewegt.
  4505. Folgende  Anweisungen  stehen  Ihnen  zur  Verf╨ægung,  um   den
  4506. Datensatzzeiger  in  einer Relation  zu  bewegen.  Die  Befehle
  4507. entsprechen in ihrer Funktion den angegebenen auf eine einzelne
  4508. Datenbank bezogenen Anweisungen:
  4509.  
  4510. Relationsbefehl                            Funktion entspricht
  4511. ---------------------------------------------------------------
  4512. IENDEREL relnr, sm,ss       Bewegt den Datensatzzeiger
  4513. IENDE                       zum Ende der Masterdatenbank
  4514.  
  4515. INEXTREL relnr,ok,sm,ss     Bewegt den Datensatzzeiger zum
  4516. INEXT                       n╨öchsten Datensatz der Masterdatei
  4517.  
  4518. IPREVREL relnr,ok,sm,ss     Bewegt den Datensatzzeiger zum
  4519. IPREV                       vorherigen Datensatz der Masterdatei
  4520.  
  4521. ISTARTREL relnr, sm,ss      Bewegt den Datensatzzeiger zum
  4522. ISTART                      Anfang der Masterdatenbank
  4523.  
  4524. F╨ær  relnr  geben Sie jedesmal die entsprechende Kennummer  der
  4525. gew╨ænschten  Relation an. ╨¬ber sm legen Sie die  Recordstruktur
  4526. der  Masterdatenbank und ╨æber ss diejemige  der  Slavedatenbank
  4527. fest,  in  welche  die ╨æber die aktuelle Relation  selektierten
  4528. Datens╨ötze  beider  Datenbanken  geladen  werden  sollen.   Die
  4529. Variable  ok  bei INEXTREL und IPREVREL besitzt die  identische
  4530. Bedeutung wie bei INEXT und IPREV. Bei Erreichen des Endes  der
  4531. Masterdatenbank  wird  also  der  Wert  ok=3   ╨æbergeben,   bei
  4532. Erreichen des Beginns der Masterdatenbank der Wert ok=4.
  4533.  
  4534. Sortierung
  4535. Neben der Organisation von Datenbanken ╨æber den aktuellen Index
  4536. besteht   die   M╨ñglichkeit,  die  Sortieren  von   Datenbanken
  4537. innerhalb  einer  Relation  zur Laufzeit  des  Programms,  also
  4538. w╨öhrend des Programmablaufs, zu ╨öndern. Dazu dient der Befehl
  4539.  
  4540.               ISETRELSORT relnr, sort_expression
  4541.  
  4542. Nach   Angabe  der  Relationsnummer  mit  relnr  ist  das  neue
  4543. Sortierkriterium anzugeben. Dazu bedient man  sich  des  dBASE-
  4544. Ausdrucks "->". Mit diesem dBASE-Zeiger wird ein Feld in  einer
  4545. Datei   ausgew╨öhlt.  Links  vom  Zeiger  hat   der   Name   der
  4546. ausgew╨öhlten  Datei  zu  stehen,  rechts  davon  der  Name  des
  4547. ausgew╨öhlten Feldes. M╨ñchten Sie beispielsweise, da╤ü  die  oben
  4548. definierte  Slavedatenbank  nach  dem  Datensatzfeld  "Wohnort"
  4549. sortiert  wird,  so geben Sie f╨ær die Variable  sort_expression
  4550. folgendes an:
  4551. "slave->Wohnort".  Nach Aufruf der Anweisung  ISETRELSORT  wird
  4552. die  Slavedatenbank unabh╨öngig vom zuvor aktivierten Index  von
  4553. nun an nach dem Datensatzfeld "Wohnort" sortiert.
  4554. Eine ╨¬bersicht ╨æber die wichtigsten dBASE-Ausdr╨æcke finden  Sie
  4555. im Anhang dieses Buches.
  4556.  
  4557.  
  4558. Abfragen
  4559. Bei  der  Definition  von Indizes f╨ær eine  einzelne  Datenbank
  4560. haben  wir  kennengelernt, da╤ü es m╨ñglich ist, f╨ær einen  Index
  4561. einen  Filter  zu definieren, mit dessen Hilfe die  Suche  nach
  4562. Datens╨ötzen entsprechend eingeschr╨önkt und konzentriert  werden
  4563. kann. Diese Filter wurden ╨æber dBASE-Ausdr╨æcke festgelegt.
  4564. Sie  haben  die  M╨ñglichkeit, zur Laufzeit des Programms,  also
  4565. mitten  im Programmablauf, auch f╨ær Relationen ╨öhnliche  Filter
  4566. zu  setzen,  die dann Abfragen entsprechend vorbearbeiten.  Die
  4567. Anweisung lautet:
  4568.  
  4569.                 ISETRELQUERY relnr, expression
  4570.  
  4571. F╨ær   relnr   geben   Sie  wie  gewohnt   die   Kennummer   der
  4572. entsprechenden  Relation an. Anstelle von expression  hat  dann
  4573. der gew╨ænschte Abfragefilter  zu stehen.
  4574. Auch   diese  Filter  m╨æssen  mit  Hilfe  von  dBASE-Ausdr╨æcken
  4575. festgelegt  werden. Eine ╨¬bersicht ╨æber die wichtigsten  dBASE-
  4576. Ausdr╨æcke finden Sie Anhang dieses Buches. Wir wollen an dieser
  4577. Stelle nicht n╨öher darauf eingehen.
  4578. Die Vorgehensweise ist identisch zu der im vorherigen Abschnitt
  4579. bei  der Erstellung von Indexfiltern beschriebenen. Ein  kurzes
  4580. Beispiel soll dies noch einmal verdeutlichen. Wenn Sie m╨ñchten,
  4581. da╤ü  ab  einer bestimmten Position im Programm nur noch  solche
  4582. Datens╨ötze  aus der Relation herausgesucht werden  k╨ñnnen,  bei
  4583. denen  im  Feld "Name" ein Name aufgef╨æhrt ist, der  mit  einem
  4584. Buchstaben im Intervall von N bis Z beginnt, so geben  Sie  den
  4585. Abfragefilter ' Name>"M" ' f╨ær die Variable expression  an.  Ab
  4586. dem  Aufruf des Befehls ISETRELQUERY sind dann nur noch  solche
  4587. Datens╨ötze   in  der  Relation  erreichbar,  die  einen   Namen
  4588. beinhalten, dessen Anfangsbuchstabe im Alphabet nach M kommt.
  4589. Soll  dieser  Filter im Programm dann an einer  anderen  Stelle
  4590. wieder ge╨öndert werden, rufen Sie noch einmal ISETRELQUERY  auf
  4591. und geben einen neuen Abfragefilter an.
  4592.  
  4593.  
  4594. Beenden einer Relation
  4595. Eine  Relation  zwischen  zwei Datenbanken  kann  jederzeit  im
  4596. Programm wieder beendet werden. Rufen Sie dazu auf:
  4597.  
  4598.                         IEXITREL relnr
  4599.  
  4600. F╨ær  relnr geben Sie das Handle der Relation an. Welche beendet
  4601. werden soll. Die verkn╨æpften Datenbanken verhalten sich von  da
  4602. an  wieder  wie zwei einzelne Datenbanken. Beachten Sie  bitte,
  4603. da╤ü  die  Datenbanken durch die Beendigung der  Relation  nicht
  4604. geschlossen werden! Dies gelingt nur mit dem Befehl ICLOSE.
  4605.  
  4606.  
  4607. ΓòÉΓòÉΓòÉ 15. KIM im Netz ΓòÉΓòÉΓòÉ
  4608.  
  4609. Datenbanken im Netz
  4610.  
  4611. Selbstverst╨öndlich  kann KIM auch in einem  Netzwerk  betrieben
  4612. werden.   Mehrere  Anwender  besitzen  dann  die   M╨ñglichkeit,
  4613. gleichzeitig  mit  einer Datenbank zu arbeiten.  Dies  kann  so
  4614. aussehen, da╤ü z.B. mehrere Benutzer gleichzeitig Daten in  eine
  4615. ge╨ñffnete   Datei  schreiben.  Es  existiert  aber   auch   die
  4616. M╨ñglichkeit,  da╤ü  nur  ein  Benutzer  (ein  Super-User)  Daten
  4617. ver╨öndern  kann, w╨öhrend die anderen Netzwerkanwender lediglich
  4618. Einblick  in  die  Daten haben, diese aber  nicht  modifizieren
  4619. k╨ñnnen.  Ein Netzwerksystem sieht meist in der Praxis  so  aus,
  4620. da╤ü  an  einem  leistungsstarken Rechner (meistens  eine  UNIX-
  4621. Workstation  oder  ein  Gro╤ürechner)  eine  gr╨ñ╤üere  Anzahl  an
  4622. Terminals   angeschlossen  sind,  ╨æber   welche   der   Rechner
  4623. angesprochen  werden kann. Daraus ergeben sich viele  Vorteile,
  4624. aber  auch einige Schwierigkeiten, die bei der Erstellung eines
  4625. im  Netzwerk  betriebsf╨öhigen Programms  ber╨æcksichtigt  werden
  4626. mБssen.
  4627. Ein   Hauptproblem  einer  jeden  Netzwerkanwendung   ist   der
  4628. gleichzeitige  Zugriff  mehrerer  Anwender  auf  den   gleichen
  4629. Datensatz. Es kann dann beispielsweise vorkommen, da╤ü der  eine
  4630. Anwender einen Datensatz gerade bearbeiten will, den der andere
  4631. im  Moment  l╨ñscht.  Um solche Mi╤üverst╨öndnisse  zu  vermeiden,
  4632. besitzen KIM-Datenbanken gewisse Sperrvorrichtungen. Es  werden
  4633. die  Sperrprotokolle der Datenbanksysteme FoxPro 2.0, dBASE 5
  4634. sowie Clipper 5.1 unterst╨ætzt.
  4635.  
  4636.  
  4637. Das Sperren
  4638. KIM bietet die M╨ñglichkeit, einzelne Datens╨ötze innerhalb einer
  4639. Datenbank vor einem Zugriff zu sperren. Der Datensatz kann dann
  4640. lediglich gelesen, aber nicht ver╨öndert werden. Teilweise  wird
  4641. eine  Sperrung auch in Datenbanken vorgenommen,  die  nicht  in
  4642. einem  Netzwerk  betrieben werden. So  wird  eine  automatische
  4643. Datensatzsperre  von  allen  Befehlen  durchgef╨æhrt,  die  eine
  4644. Modifizierung  eines Datensatzes bewirken (z.B. IMODREC,  IADD,
  4645. IDEL).  Dies  soll eine m╨ñglichst reibungslose Funktion  dieser
  4646. Anweisungen gew╨öhrleisten. Eigentlich ist diese Datensatzsperre
  4647. nur  f╨ær  den  Zeitraum notwendig, in welcher die  obengenannte
  4648. Aktion  durchgef╨æhrt  wird. Da aber der  Sperr-  und  auch  der
  4649. Entsperrvorgang vergleichsweise zeitaufwendig sind,  verzichtet
  4650. KIM   darauf,  die  einmal  gesperrten  Datens╨ötze  wieder   zu
  4651. entsperren.  Die  Sperrung wird ohnehin  ebenfalls  automatisch
  4652. aufgehoben, wenn der Datensatzzeiger durch einen entsprechenden
  4653. Befehl  auf den gesperrten Datensatz gestellt wird.  Gerade  in
  4654. einem  Netzwerk kann es jedoch notwendig sein, einen  Datensatz
  4655. zu   sperren  bzw.  zu  entsperren,  ohne  da╤ü  obige  Aktionen
  4656. durchgef╨æhrt  werden.  Hierzu  sind  zwei  Befehle   vorgesehen
  4657. (welche  aber  nur im Netzwerk verwendet werden  k╨ñnnen).  Eine
  4658. Sperrung eines Datensatzes erreicht man mit
  4659.  
  4660.                          ILOCK nr, ok
  4661.  
  4662. Der  aktuelle  Datensatz  der  mit  ihrem  Handle  selektierten
  4663. Datenbank wird gesperrt. ╨¬ber ok wird der Erfolg dieser  Aktion
  4664. mitgeteilt. Konnte der Datensatz gesperrt werden, wird ein Wert
  4665. ok<>50  zur╨æckgegeben.  Gelang  die  Sperrung  aus  irgendeinem
  4666. Grunde nicht, liefert das Programm ok=50 und eine entsprechende
  4667. Meldung  zur╨æck.  Meist  ist der entsprechende  Datensatz  dann
  4668. bereits gesperrt.
  4669. Eine Entsperrung erreicht man mit der Anweisung
  4670.  
  4671.                         IUNLOCK nr, ok
  4672.  
  4673. Die Befehlssyntax entspricht der von ILOCK. Konnte der aktuelle
  4674. Datensatz  entsperrt werden, erh╨ölt ok einen Wert ungleich  50.
  4675. Bei negativem Erfolg wird ok=50 zur╨æckgegeben. Bei der Sperrung
  4676. eines Datensatzes handelt es sich um die niedrigste M╨ñglichkeit
  4677. einer  Sperre in KIM. Kleinere Informationseinheiten wie Felder
  4678. k╨ñnnen nicht gesperrt werden.
  4679.  
  4680.  
  4681. Sperren von Dateien
  4682. Selbstverst╨öndlich   k╨ñnnen  nicht  nur  einzelne   Datens╨ötze,
  4683. sondern  auch  gesamte Datendateien (also gesamte  Datenbanken)
  4684. gesperrt  werden.  Ist eine Datenbank gesperrt,  ist  es  nicht
  4685. m╨ñglich,  Datens╨ötze  zu ver╨öndern oder zus╨ötzliche  Datens╨ötze
  4686. neu anzuf╨ægen.
  4687. KIM  verf╨ægt  ╨æber  Aktionen, bei  denen  automatisch  f╨ær  den
  4688. Zeitraum  der Aktion Datenbanken gesperrt werden, gleichg╨æltig,
  4689. ob  diese  sich im Netzwerk befinden oder nicht. Es handelt  es
  4690. dabei um die Befehle IPACK, IMAKEINDEX und IREINDEX.
  4691. Im  Gegensatz zur automatischen Datensatzsperre erfolgt bei der
  4692. automatischen   Datenbanksperre   sofort   eine    selbstt╨ötige
  4693. Entsperrung,  um einen weiteren Zugriff auf die Datenbank  nach
  4694. Abarbeiten des obigen Befehls zu erm╨ñglichen.
  4695. In  einem Netzwerk wird die Sperrung von Datenbanken ╨æber FLAGS
  4696. gesteuert,  welche  im ╨æbern╨öchsten Abschnitt  n╨öher  erl╨öutert
  4697. werden.
  4698.  
  4699. Sperren von Indexdateien
  4700. Wird  eine  Aktualisierung einer Datenbank oder  eines  Indizes
  4701. vorgenommen, sperrt KIM automatisch die Index- und Memodateien,
  4702. die  an  diesem  Vorgang beteiligt sind, um einen reibungslosen
  4703. Ablauf  der  Aktion  zu  gew╨öhrleisten.  Nach  Beendigung   der
  4704. Aktualisierung  werden die entsprechenden  Dateien  automatisch
  4705. wieder  entsperrt,  da  sie  zum  Funktionieren  des  Programms
  4706. ben╨ñtigt  werden.  Ein Benutzer hat auf diesen Sperrmechanismus
  4707. keinen Einflu╤ü.
  4708.  
  4709.  
  4710. Flags
  4711.  
  4712. Sie  k╨ñnnen  die Sperrmechanismen Ihres Programms  durch  FLAGS
  4713. bestimmen.  Diese FLAGS besitzen dann f╨ær alle  Datenbanken  in
  4714. diesem Programm G╨æltigkeit. Beachten Sie bitte, da╤ü diese FLAGS
  4715. im  Gegensatz  zu den FLAGS, die sich auf Objekte beziehen,  zu
  4716. Beginn  des  Programms  als  Zahlenvariablen  definiert  werden
  4717. m╨æssen,  also z.B. DEFFLOAT _DB_EXCLUSIVE. Des weiteren  m╨æssen
  4718. diese  FLAGS unbedingt vor dem Γòôffnen der Datenbank,  also  vor
  4719. der  IOPEN-Anweisung gesetzt werden, da sie sonst keine Wirkung
  4720. zeigen.
  4721. Die   Sperrung   eines  Datensatzes  wird  ╨æber   _DB_READ_LOCK
  4722. geregelt:
  4723.  
  4724. _DB_READ_LOCK   = 1    Der Datensatz wird beim Lesen automatisch
  4725.                        gesperrt.
  4726. _DB_READ_LOCK   = 0    Der Datensatz wird nicht automatisch
  4727.                        gesperrt. (default)
  4728.  
  4729. Die Sperrung  einer  ganzen Datenbank wird ╨æber  _DB_READ_ONLY
  4730. gesteuert:
  4731.  
  4732. _DB_READ_ONLY=1        Die Datenbank wird im Lesemodus ge╨ñffnet,
  4733.                        ╨₧nderungen und Hinzuf╨ægen von Datens╨ötzen
  4734.                        wird nicht gestattet
  4735.  
  4736. _DB_READ_ONLY=0        Die Datenbank wird  normal  mit  allen
  4737.                        Bearbeitungsm╨ñglichkeiten ge╨ñffnet.
  4738.  
  4739. Sie  haben auch die M╨ñglichkeit zu entscheiden, ob nur ein oder
  4740. mehrere Benutzer auf die Datenbank zugreifen d╨ærfen. Dazu dient
  4741. _DB_EXCLUSIVE:
  4742.  
  4743. _DB_EXCLUSIVE=1        Die Datenbank kann nur von einem Benutzer
  4744.                        zur selben Zeit bearbeitet werden.
  4745.  
  4746. _DB_EXCLUSIVE=0        Die Datenbank wird f╨ær den Netzwerkbetrieb
  4747.                        ge╨ñffnet, es k╨ñnnen also mehrere Benutzer
  4748.                        damit gleichzeitig arbeiten. (default)
  4749.  
  4750. Setzen  Sie  das  FLAG nicht, wird als Vorgabe  _DB_EXCLUSIVE=0
  4751. aufgerufen.  Wir empfehlen, bei Aktionen wie IPACK,  IMAKEINDEX
  4752. oder  IREINDEX  die  Datenbank grunds╨ötzlich  als  Single-User-
  4753. System  zu  ╨ñffnen  (_DB_EXCLUSIVE=1),  um  Fehlfunktionen   zu
  4754. vermeiden.
  4755. KIM bietet zus╨ötzlich Optionen, die die Zugriffsgeschwindigkeit
  4756. auf eine Datenbank erh╨ñhen. Dies geschieht ╨æber eine sogenannte
  4757. Bit-Optimierung.   Sie  k╨ñnnen  entscheiden,   ob   Sie   diese
  4758. Optimierung  ╨æberhaupt  oder  nur im  Lese-  oder  Schreibmodus
  4759. verwenden wollen. Problematisch ist die Bitoptimierung in jedem
  4760. Fall  im  Netzwerkbetrieb, da hierbei  durch  falsche  Zugriffe
  4761. veraltete   Pufferdaten   herangezogen   werden   k╨ñnnen    und
  4762. Fehlinformationen  geliefert werden. Wir empfehlen  daher,  auf
  4763. die  Optimierung im Netzwerkbetrieb zu verzichten. Sie  steuern
  4764. die Optimierung mit:
  4765.  
  4766. _DB_OPTIMIZE=-1         Es wird  eine  Leseoptimierung  im
  4767.                         Single-User-Modus durchgef╨æhrt.(default)
  4768.  
  4769. _DB_OPTIMIZE=1          Es wird  eine Leseoptimierung im Multi-
  4770.                         User-Modus durchgef╨æhrt
  4771.                         (Netzwerkbetrieb, Vorsicht)
  4772.  
  4773. _DB_OPTIMIZE=0          Es wird keine Leseoptimierung
  4774.                         durchgef╨æhrt
  4775.  
  4776. _DB_OPTIMIZE_WRITE=-1   Es wird eine Schreiboptimierung im
  4777.                         Single-User-Modus durchgef╨æhrt.(default)
  4778.  
  4779. _DB_OPTIMIZE_WRITE=1    Es wird eine Schreiboptimierung im
  4780.                         Multi-User-Modus durchgef╨æhrt
  4781.  
  4782. _DB_OPTIMIZE_WRITE=0    Es wird keine Schreiboptimierung
  4783.                         durchgef╨æhrt
  4784.  
  4785. Das  letzte  FLAG  dient dazu, ein Abst╨ærzen des  Programms  im
  4786. Netzwerk  m╨ñglichst zu verhindern. Es kann vorkommen,  da╤ü  ein
  4787. Sperren von Daten dazu f╨æhrt, da╤ü ein Anwender keine Verbindung
  4788. zu  der gew╨ænschten Datenbank erh╨ölt. Das Programm versucht  in
  4789. diesem  Fall  unendlich lange, durch wiederholtes Abfragen  die
  4790. Verbindung  herzustellen. Das Programm  "h╨öngt"  sich  auf,  es
  4791. kommt zu einem DEADLOCK.
  4792. Um  dies zu vermeiden, k╨ñnnen Sie ein FLAG setzen, welches  die
  4793. Anzahl der Versuche zur Herstellung einer Verbindung in solchen
  4794. F╨ölllen begrenzt. Ist nach der vorgegebenen Anzahl an Versuchen
  4795. noch immer keine Verbindung zustandegekommen, wird das Programm
  4796. abgebrochen:
  4797.  
  4798. _DB_LOCK_ATTEMPTS=-1    Es wird unendlich lange versucht,
  4799.                         eine Verbindung herzustellen
  4800.                         (DEADLOCK-Gefahr) (default)
  4801.  
  4802. _DB_LOCK_ATTEMPTS>0     Geben Sie eine beliebige ganze Zahl
  4803.                         gr╨ñ╤üer 0 an. Es wird genauso oft wie
  4804.                         angegeben versucht, eine Verbindung
  4805.                         herzustellen, dann wird das Programm
  4806.                         abgebrochen.
  4807.  
  4808. Wir empfehlen folgende FLAG-Einstellung f╨ær den Betrieb von KIM
  4809. im Netzwerk:
  4810.  
  4811.             _DB_LOCK_ATTEMPTS = 3
  4812.             _DB_EXCLUSIVE = 0
  4813.             _DB_READ_ONLY = 0
  4814.             _DB_READ_LOCK = 0
  4815.  
  4816.  
  4817. ΓòÉΓòÉΓòÉ 16. Fragen und Antworten ΓòÉΓòÉΓòÉ
  4818.  
  4819.  
  4820. Fragen und Antworten
  4821.  
  4822. ---------------------------------------------------------------------------
  4823. Wie bekommt ein Objekt den Eingabefokus ?
  4824.  
  4825. Version 2.0
  4826. Addieren Sie das Objekt mit ADD_ITEM nochmals an das Fenster.
  4827. Version 2.1
  4828. Benutzen Sie den Befehl SETFOCUS.
  4829.  
  4830. ---------------------------------------------------------------------------
  4831. Wie bestimme ich die Eingabereihenfolge ?
  4832.  
  4833. Die Reihenfolge wird durch die Reihenfolge bestimmt, wie die Objekte
  4834. an ein Fenster mit ADD_ITEM oder ADD_ITEM_ARRAY addiert werden.
  4835.  
  4836. ---------------------------------------------------------------------------
  4837. Ich addiere weitere Objekte an eine Listbox oder Combobox nachdem
  4838. diese am Bildschirm ausgegeben wurde. Die Objekte werden
  4839. am Bildschirm nicht dargestellt. Was mu╤ü ich tun ?
  4840.  
  4841. Nachdem die Objekte addiert wurden, verwenden Sie den Befehl :
  4842. EVENT_ON_ITEM id$,"create" und EVENT_ON_ITEM id$,"redisplay"
  4843.  
  4844. ---------------------------------------------------------------------------
  4845. Wie ╨öndere ich die Hintergrundfarbe eines Fensters ?
  4846.  
  4847. Definiere mit DEF_PALETTE eine Farbe f╨ær den Hintergrund und
  4848. setzte bei DEF_WINDOW die Eigenschaft "color on".
  4849. Anschlie╤üend weise dem Fenster mit "COLOR_ITEM" die Farbpalette zu.
  4850.  
  4851. ---------------------------------------------------------------------------
  4852. Wie kann ich ein KIM Programm mit Kommandozeilenparameter starten ?
  4853.  
  4854. Siehe die Beschreibung f╨ær "COMMANDLINE"
  4855.  
  4856. ---------------------------------------------------------------------------
  4857. Was habe ich zu beachten bei Dateioperationen ?
  4858.  
  4859. 1. Textdatei neu erstellen und Daten hineinschreiben
  4860.  
  4861. KILL datei
  4862. OPEN 1,datei
  4863. PUTS 1,zeile
  4864. CLOSE 1
  4865.  
  4866. 2. An eine bestehende Datei etwas am Schlu╤ü anh╨öngen.
  4867.  
  4868. OPEN 1,datei
  4869. PUTS 1,zeile
  4870. CLOSE 1
  4871.  
  4872. 3. Aus einer bestehenden Datei etwas Lesen
  4873.  
  4874. OPEN 1,datei,"r"
  4875. GETS 1,zeile
  4876. CLOSE 1
  4877.  
  4878. oder
  4879.  
  4880. LOADARRAY datei,arr,1,max,anzahl
  4881.  
  4882. ---------------------------------------------------------------------------
  4883. Was mu╤ü ich beachten bei Fenster mit einem NOTEBOOK-Element ?
  4884.  
  4885. Das Fenster kann nicht auf Ganzbildschirm mit dem Befehl
  4886. EVENT_ON_ITEM id$,"maximized" vergr╨ñ╤üert werden.
  4887.  
  4888. ---------------------------------------------------------------------------
  4889. Was mu╤ü ich beachten wenn ich mehrere BUTTONS in einem Fenster habe ?
  4890.  
  4891. Es kann nur ein Button als aktives Objekt dargestellt werden, au╤üer
  4892. man fasst mehrere Buttons zu einer Gruppe zusammen.
  4893.  
  4894. ---------------------------------------------------------------------------
  4895. Wie kann ich mehrere Elemente in einer Gruppe als selektiert
  4896. kennzeichnen ?
  4897.  
  4898. Geben Sie der Gruppe die Eigenschaft "multi"
  4899.  
  4900. ---------------------------------------------------------------------------
  4901. Wie kann ich feststellen, ob ein Radiobutton oder Checkboxbutton
  4902. gesetzt ist ?
  4903.  
  4904. Benutzen Sie den Befehl GET_ITEM_STATUS mit "set".
  4905.  
  4906. ---------------------------------------------------------------------------
  4907. Ich versuche eine Datei mit OPEN 9,"test" zu ╨ñffnen und erhalte immer
  4908. die Fehlermeldung, da╤ü die Datei schon ge╨ñffnet ist.
  4909.  
  4910. Es besteht ein Subverzeichnis mit dem Namen "Test" im Verzeichnis.
  4911. ---------------------------------------------------------------------------
  4912.  
  4913. Ich habe einen Index auf ein Textfeld erstellt. Wenn ich
  4914. Datenbankfunktionen benutzte erhalte ich eine Fehlermeldung.
  4915.  
  4916. M╨ñgliche Ursache :
  4917. Das Textfeld ist zu lang f╨ær eine Indexbeschreibung.
  4918. Benutzen Sie den Befehl SUBSTR in der Indexdefinition um die
  4919. Indexbeschreibung auf einen Teil des Textfeldes zu beschr╨önken.
  4920.  
  4921. ---------------------------------------------------------------------------
  4922.  
  4923. Ich habe eine neue Datenbank erstellt. Bei den Befehlen IPREV oder
  4924. INEXT erhalte ich eine Fehlermeldung.
  4925.  
  4926. Es mu╤ü mindestens ein Datensatz in der Datenbank vorhanden sein,
  4927. sonst funktionieren die DB-Befehle nicht.
  4928.  
  4929. ---------------------------------------------------------------------------
  4930.  
  4931.  
  4932.  
  4933. ΓòÉΓòÉΓòÉ 17. Das Runtime-Kit ΓòÉΓòÉΓòÉ
  4934.  
  4935. Das Runtime-Kit
  4936.  
  4937.  
  4938. KRUN
  4939. Das Runtime-Kit liegt nur in der KIM-Vollversion bei.
  4940. Wenn Sie mit Hilfe von KIM Programme nicht nur zu Ihrer eigenen
  4941. Verwendung   erstellen   wollen,   sondern   auch   kommerziell
  4942. vertreiben  m╨ñchten, ergibt sich ein rechtliches  Problem.  Wie
  4943. bereits  erw╨öhnt  ist  KIM eine Interpretersprache.  Der  einem
  4944. Produkt  zugrundeliegende Code mu╤ü also bei jedem Programmstart
  4945. aufs  Neue  f╨ær  den Computer ╨æbersetzt werden.  Wenn  Sie  ein
  4946. Programm verkaufen wollen, m╨æssen Sie daher den KIM-Interpreter
  4947. mitliefern.
  4948. Es  ist  aber  aus urheberlichen Gr╨ænden nicht  gestattet,  den
  4949. normalen  KIM-Interpreter KIM.EXE in  solchen  F╨öllen  an  Ihre
  4950. Kunden weiterzugeben. Dennoch ben╨ñtigt Ihr Kunde zus╨ötzlich zum
  4951. Programm  einen  KIM-Interpreter.  Es  ist  deshalb  dem   KIM-
  4952. Programmpaket ein zweiter Interpreter beigelegt, KRUN.EXE.
  4953. KRUN.EXE  darf  jederzeit im Verbund mit einem KIM-Programm  an
  4954. Dritte   weitergegeben  werden.  Im  Gegensatz   zum   normalen
  4955. Interpreter  KIM.EXE  kann KRUN.EXE nur Programme  verarbeiten,
  4956. deren  Programmcode zuvor mit KCRYPT verschl╨æsselt wurde.
  4957. KRUN.EXE kann daher nicht zur Entwicklung neuer  KIM-Programme
  4958. herangezogen werden.
  4959. Der Aufruf von Programmen mittels KRUN gelingt wie folgt:
  4960.  
  4961. KRUN datei (Enter-Taste dr╨æcken)
  4962.  
  4963. Anstelle  von datei geben Sie bitte den Namen des zu startenden
  4964. Programms an.
  4965.  
  4966. KCRYPT
  4967. Wie  erw╨öhnt m╨æssen Programme, welche mit dem Interpreter  KRUN
  4968. betrieben  werden  sollen, zuvor verschl╨æsselt  werden.  Hierzu
  4969. dient  das  Verschl╨æsselungsprogramm KCRYPT.EXE. Dabei wird ein
  4970. Programm in einen P-Code umgewandelt, Leerzeichen und Bemerkungen
  4971. entfernt und anschlie╤üend verschl╨æsselt.
  4972.  
  4973. Aufruf:
  4974.  
  4975. KCRYPT (Entertaste dr╨æcken)
  4976.  
  4977. F╨ær  datei  geben  Sie bitte den Namen des zu  verschl╨æsselnden
  4978. Programmes  an, f╨ær dateineu den Namen, den das  Programm  nach
  4979. der Verschl╨æsselung erhalten soll.
  4980. Es ist nebenbei gesagt sehr sinnvoll, der verschl╨æsselten Datei
  4981. einen   anderen  Namen  zu  geben  als  der  unverschl╨æsselten.
  4982. Ansonsten   w╨ærde   bei  diesem  Vorgang  der  unverschl╨æsselte
  4983. Programmcode  ╨æberschrieben und k╨ñnnte  von  Ihnen  nicht  mehr
  4984. bearbeitet werden.
  4985. Es  kommt  nat╨ærlich  vor, da╤ü Sie ein Produkt  erstellen,  da╤ü
  4986. nicht  nur aus einer Hauptdatei, sondern auch aus Include-  und
  4987. Importdateien besteht. In diesem Fall besteht die  M╨ñglichkeit,
  4988. alle   zusammengeh╨ñrenden   Dateien   in   einem   Schritt   zu
  4989. verschl╨æsseln. Legen Sie hierzu eine neue Datei mit der  Endung
  4990. angeben, beispielsweise:
  4991.  
  4992. Zu verschl╨æsselnde Datei         Inhalt
  4993.  
  4994. KUNDEN.PRO                      Kunden.kim
  4995.                                 Define.inc
  4996.                                 Biblio.inc
  4997.                                 Liste.imp
  4998.  
  4999. In der Datei Kunden.pro sind also das Hauptprogramm Kunden.kim,
  5000. die   Includedateien  Define.inc  und  Biblio.inc   sowie   die
  5001. Importdatei Liste.imp vorhanden.
  5002. Geben Sie nun ein:
  5003.  
  5004.             KCRYPT kunden.pro (Entertaste dr╨æcken)
  5005.  
  5006. Alle  in  kunden.pro  aufgef╨æhrten Dateien  werden  dann  unter
  5007. Beibehaltung ihres Dateinamens verschl╨æsselt. Gleichzeitig wird
  5008. aber   ein  Verzeichnis  "Kunden"  angelegt,  in  welches   die
  5009. unverschl╨æsselten Dateien kopiert werden, so da╤ü diese nach wie
  5010. vor verf╨ægbar sind.
  5011.  
  5012. Wenn  Sie KIM-Programme kommerziell vertreiben m╨ñchten,  d╨ærfen
  5013. Sie  nicht  den  normalen  Interpreter KIM.EXE  mitliefern.  Zu
  5014. diesem   Zweck   ist   der   Zusatzinterpreter   KRUN.EXE    im
  5015. Programmpaket von KIM enthalten. Dieser Interpreter kann nur in
  5016. Verbindung mit verschl╨æsselten Programmen eingesetzt werden.
  5017. Zur   Verschl╨æsselung  von  Programmcodes  dient  das  Programm
  5018. KCRYPT.EXE. Auf einfache Weise k╨ñnnen Sie damit Ihren Code  f╨ær
  5019. jedermann unleserlich machen.
  5020.  
  5021.  
  5022. ΓòÉΓòÉΓòÉ 18. #LABEL ΓòÉΓòÉΓòÉ
  5023.  
  5024. Funktion 
  5025.  
  5026. Markiert eine Position in einem Programm, welche ueber Sprungbefehle
  5027. aufgerufen werden kann.
  5028.  
  5029. Syntax 
  5030.  
  5031. #LABEL
  5032.  
  5033. Eingabe 
  5034.  
  5035. Label   Von Ihnen festgelegte Bezeichnung der Sprungmarke
  5036.  
  5037. Ausgabe 
  5038.  
  5039. Keine
  5040.  
  5041. Beschreibung 
  5042.  
  5043. Zwischen dem Labelzeichen # und dem Namen der Sprungmarkierung darf
  5044. kein Leerzeichen sein. Der Labelname darf maximal aus 32 Zeichen be-
  5045. stehen, wobei Sie auch Zahlen verwenden koennen. Insgesamt duerfen in
  5046. einem Programm bis zu 500 Labels gesetzt werden. Labels koennen mit den
  5047. Sprungbefehlen GOTO und GOSUB aufgerufen werden.
  5048.  
  5049. Bespiel    #LABEL 
  5050.  
  5051. Siehe 
  5052.  
  5053. GOSUB
  5054. GOTO
  5055.  
  5056.  
  5057. ΓòÉΓòÉΓòÉ 19. BEEP ΓòÉΓòÉΓòÉ
  5058.  
  5059. Funktion 
  5060.  
  5061. Der Rechner piepst kurz.
  5062.  
  5063. Syntax 
  5064.  
  5065. BEEP
  5066.  
  5067. Eingabe 
  5068.  
  5069. Keine
  5070.  
  5071. Ausgabe 
  5072.  
  5073. Keine
  5074.  
  5075. Beschreibung 
  5076.  
  5077. Bitte nicht in Endlosschleifen verwenden, der Computer piepst sonst
  5078. unaufhoerlich.
  5079.  
  5080. Bespiel    BEEP 
  5081.  
  5082. Siehe 
  5083.  
  5084. SOUND
  5085.  
  5086.  
  5087. ΓòÉΓòÉΓòÉ 20. CHDIR ΓòÉΓòÉΓòÉ
  5088.  
  5089. Funktion 
  5090.  
  5091. Wechselt das aktuelle Verzeichnis.
  5092.  
  5093. Syntax 
  5094.  
  5095. CHDIR pfad$, ok
  5096.  
  5097. Eingabe 
  5098.  
  5099. pfad$         Der Pfad des gewuenschten Verzeichnisses
  5100.  
  5101. Ausgabe 
  5102.  
  5103. ok            Gibt das Ergebnis der Operation zurueck:
  5104.               ok=1:  Aktion wurde erfolgreich durchgefuehrt
  5105.               ok=-1: Aktion konnte nicht durchgefuehrt werden
  5106.  
  5107. Beschreibung 
  5108.  
  5109. entfaellt
  5110.  
  5111. Bespiel    CHDIR 
  5112.  
  5113. Siehe 
  5114.  
  5115. MKDIR
  5116.  
  5117.  
  5118. ΓòÉΓòÉΓòÉ 21. CLOSE ΓòÉΓòÉΓòÉ
  5119.  
  5120. Funktion 
  5121.  
  5122. Schliesst eine geoeffnete Textdatei.
  5123.  
  5124. Syntax 
  5125.  
  5126. CLOSE nr.
  5127.  
  5128. Eingabe 
  5129.  
  5130. nr            Nummer der zu schliessenden Textdatei
  5131.  
  5132. Ausgabe 
  5133.  
  5134. Keine
  5135.  
  5136. Beschreibung 
  5137.  
  5138. Jede Textdatei erhaelt bei der Erstellung mit OPEN eine Nummer,
  5139. mit der Sie eindeutig bezeichnet ist. Deshalb genuegt einfach
  5140. die Angabe der entsprechenden Nummer zum Loeschen mit CLOSE, da
  5141. dieser Befehl nur fuer Textdateien anwendbar ist.
  5142.  
  5143. Bespiel    CLOSE 
  5144.  
  5145. Siehe 
  5146.  
  5147. OPEN
  5148. PUTS
  5149. GETS
  5150.  
  5151.  
  5152. ΓòÉΓòÉΓòÉ 22. COMMANDLINE ΓòÉΓòÉΓòÉ
  5153.  
  5154. Funktion 
  5155.  
  5156. Liest das Kommandozeilenargument beim Start von KIM in
  5157. das Programm ein.
  5158.  
  5159. Syntax 
  5160.  
  5161. COMMANDLINE var$
  5162.  
  5163. Eingabe 
  5164.  
  5165. keine
  5166.  
  5167. Ausgabe 
  5168.  
  5169. var$     Variable mit dem entsprechenden Komandozeilenargument
  5170.  
  5171. Beschreibung 
  5172.  
  5173. Mit diesem Befehl koennen Sie das beim Start des KIM-Programms hinter
  5174. dem DOS-Prompt eingegebene Kommandozeilenargument zur weiteren Ver-
  5175. wendung in das Programm einlesen.
  5176.  
  5177. Bespiel    COMMANDLINE 
  5178.  
  5179. Siehe 
  5180.  
  5181.  
  5182. ΓòÉΓòÉΓòÉ 23. DATEFORMAT ΓòÉΓòÉΓòÉ
  5183.  
  5184. Funktion 
  5185.  
  5186. Anzeigeformat ╨öndern.
  5187.  
  5188. Syntax 
  5189.  
  5190. dateformat flag,"DD.MM.YY", date1, date2
  5191.  
  5192. Eingabe 
  5193.  
  5194. flag         Maskennr
  5195. maske        Vorgabemaske der Anzeige
  5196. date1        Eingabestring
  5197.  
  5198. Ausgabe 
  5199.  
  5200. date2        Ausgabestring
  5201.  
  5202. Beschreibung 
  5203.  
  5204. keine
  5205.  
  5206. Bespiel    DATEFORMAT 
  5207.  
  5208. Siehe 
  5209.  
  5210. DATETOJU
  5211. DATETOW
  5212. DATUM
  5213. TIME
  5214.  
  5215.  
  5216. ΓòÉΓòÉΓòÉ 24. DATETOJU ΓòÉΓòÉΓòÉ
  5217.  
  5218. Funktion 
  5219.  
  5220. Wandelt Dbase-Datum (CCYYMMTT) in Julianische Zahl
  5221.  
  5222. Syntax 
  5223.  
  5224. datetoju datum1, datum_zahl1
  5225.  
  5226. Eingabe 
  5227.  
  5228. datum1            Dbase-Datum "19940402"
  5229.  
  5230. Ausgabe 
  5231.  
  5232. datum_zahl1       Julianische Zhal
  5233.  
  5234. Beschreibung 
  5235.  
  5236. Umwandeln eines Datum in eine Zahl.
  5237.  
  5238. Bespiel    DATETOJU 
  5239.  
  5240. Siehe 
  5241.  
  5242. DATEFORMAT
  5243. DATETOW
  5244. DATUM
  5245. TIME
  5246.  
  5247.  
  5248. ΓòÉΓòÉΓòÉ 25. DATETOW ΓòÉΓòÉΓòÉ
  5249.  
  5250. Funktion 
  5251.  
  5252. Ermittelt Wochentag 1=Sonntag ... 7=Samstag
  5253.  
  5254. Syntax 
  5255.  
  5256. datetow datum1, Wochentag
  5257.  
  5258. Eingabe 
  5259.  
  5260. datum1
  5261.  
  5262. Ausgabe 
  5263.  
  5264. Wochentag        1=Sonntag
  5265.                  2=Montag
  5266.                  3=Dienstag
  5267.                  4=Mittwoch
  5268.                  5=Donnerstag
  5269.                  6=Freitag
  5270.                  7=Samstag
  5271.  
  5272. Beschreibung 
  5273.  
  5274.  
  5275.  
  5276. Bespiel    DATETOW 
  5277.  
  5278. Siehe 
  5279.  
  5280. DATEFORMAT
  5281. DATETOJU
  5282. DATUM
  5283. TIME
  5284.  
  5285.  
  5286. ΓòÉΓòÉΓòÉ 26. DATUM ΓòÉΓòÉΓòÉ
  5287.  
  5288. Funktion 
  5289.  
  5290. Ermittelt das Tagesdatum aus dem ROM-BIOS des Computers.
  5291.  
  5292. Syntax 
  5293.  
  5294. DATUM  date$
  5295.  
  5296. Eingabe 
  5297.  
  5298. Keine
  5299.  
  5300. Ausgabe 
  5301.  
  5302. date$    Datum in deutschem Format
  5303.  
  5304. Beschreibung 
  5305.  
  5306. Das Programm holt sich das aktuelle Datum aus dem Computer und
  5307. konvertiert selbstaendig das dort in englischem Format vorhandene
  5308. Datum in deutsches Format (Ausgabe: tt.mm.jj [t=Tag, m=Monat, j=Jahr],
  5309. z.B. 12.01.93).
  5310.  
  5311. Bespiel    DATUM 
  5312.  
  5313. Siehe 
  5314.  
  5315. DATUMDIFF
  5316. TIME
  5317.  
  5318.  
  5319. ΓòÉΓòÉΓòÉ 27. DATUMDIFF ΓòÉΓòÉΓòÉ
  5320.  
  5321. Funktion 
  5322.  
  5323. Ermittelt die Anzahl der Tage zwischen zwei vorgegebenen Datumsangaben.
  5324.  
  5325. Syntax 
  5326.  
  5327. DATUMDIFF startdatum$,enddatum$,tage
  5328.  
  5329. Eingabe 
  5330.  
  5331. startdatum$     Variable mit dem Datum, von dem aus gezaehlt wird
  5332. enddatum$       Variable mit dem Datum, bei welchem der Vorgang beendet                   wird
  5333.  
  5334. Ausgabe 
  5335.  
  5336. tage            Anzahl der Tage zwischen den beiden Daten
  5337.  
  5338. Beschreibung 
  5339.  
  5340. Die Datumsangaben muessen in deutschem Format erfolgen. Ein ueber DATUM
  5341. ermitteltes Datum muss nicht konvertiert werden (s.dort). Erlaubt sind
  5342. folgende Eingabeformate: 19.1.1991; 19.1.91;19.01.91; 19.01.1991. Falls
  5343. die Angabe in "startdatum" groesser ist als diejenige in "zieldatum",
  5344. erhaelt die Variable "tage" einen negativen Wert.
  5345.  
  5346. Bespiel    DATUMDIFF 
  5347.  
  5348. Siehe 
  5349.  
  5350. DATUM
  5351. TIME
  5352.  
  5353.  
  5354. ΓòÉΓòÉΓòÉ 28. DEF_BITMAP ΓòÉΓòÉΓòÉ
  5355.  
  5356. Funktion 
  5357.  
  5358. Liest eine externe Bitmap-Datei in ein Programm ein.
  5359.  
  5360. Syntax 
  5361.  
  5362. DEF_BITMAP id_string, x, y, xr, yr, "Name"
  5363.  
  5364. Eingabe 
  5365.  
  5366. id_string       Kennung des Objekts
  5367. x,y             X- und y-Position der linken oberen Ecke des Bildes
  5368. xr, yr          Breite und Hoehe des Objekts
  5369. "Name"          Name der Bitmap-Datei
  5370.  
  5371. Ausgabe 
  5372.  
  5373. keine
  5374.  
  5375. Beschreibung 
  5376.  
  5377. Mit diesem Befehl wird eine extern erstellte Bitmap-Datei in ein
  5378. KIM-Programm eingelesen und als Objekt definiert.
  5379.  
  5380. Bespiel    DEF_BITMAP 
  5381.  
  5382. Siehe 
  5383.  
  5384.  
  5385. ΓòÉΓòÉΓòÉ 29. END ΓòÉΓòÉΓòÉ
  5386.  
  5387. Funktion 
  5388.  
  5389. Markiert das Ende eines Programms.
  5390.  
  5391. Syntax 
  5392.  
  5393. END
  5394.  
  5395. Eingabe 
  5396.  
  5397. Keine
  5398.  
  5399. Ausgabe 
  5400.  
  5401. Keine
  5402.  
  5403. Beschreibung 
  5404.  
  5405. Diese Anweisung muessen Sie unbedingt an das Ende Ihres Programms
  5406. setzen, sonst kann es zu Fehlfunktionen kommen. Dabei duerfen Sie
  5407. END aber mehrmals im Programm verwenden, wenn Sie beispielsweise
  5408. verschiedene Moeglichkeiten zur Programmbeendigung anbieten wollen.
  5409.  
  5410. Bespiel    END 
  5411.  
  5412. Siehe 
  5413.  
  5414.  
  5415. ΓòÉΓòÉΓòÉ 30. ENDE ΓòÉΓòÉΓòÉ
  5416.  
  5417. Funktion 
  5418.  
  5419. Schaltet den Debugger ab.
  5420.  
  5421. Syntax 
  5422.  
  5423. ENDE
  5424.  
  5425. Eingabe 
  5426.  
  5427. Keine
  5428.  
  5429. Ausgabe 
  5430.  
  5431. Keine
  5432.  
  5433. Beschreibung 
  5434.  
  5435. Die Anweisung ENDE muss an der Position in Ihrem Programm eingefuegt
  5436. werden, an welcher der Debugger seine ueberpruefung des Programmcodes
  5437. beenden soll.
  5438.  
  5439. Bespiel    ENDE 
  5440.  
  5441. Siehe 
  5442.  
  5443. START
  5444.  
  5445.  
  5446. ΓòÉΓòÉΓòÉ 31. EXIST ΓòÉΓòÉΓòÉ
  5447.  
  5448. Funktion 
  5449.  
  5450. Ermittelt, ob eine bestimmte Datei bereits existiert.
  5451.  
  5452. Syntax 
  5453.  
  5454. EXIST datei$,flag
  5455.  
  5456. Eingabe 
  5457.  
  5458. datei$        Name der zu ueberpruefenden Datei
  5459.  
  5460. Ausgabe 
  5461.  
  5462. flag          Variable, ueber die das Programm dem Anwender anzeigt,
  5463.               ob die Datei existiert:
  5464.               flag = 1:    Datei existiert
  5465.               flag = -1:   Datei existiert nicht.
  5466.  
  5467. Beschreibung 
  5468.  
  5469. Um zu erfahren, ob eine Datei existiert, muessen Sie nach dieser
  5470. Anweisung den Wert der Variablen flag abfragen.
  5471.  
  5472. Bespiel    EXIST 
  5473.  
  5474. Siehe 
  5475.  
  5476. OPEN
  5477. IOPEN
  5478.  
  5479.  
  5480. ΓòÉΓòÉΓòÉ 32. FILECOPY ΓòÉΓòÉΓòÉ
  5481.  
  5482. Funktion 
  5483.  
  5484. Kopiert den Inhalt einer Datei in eine andere Datei.
  5485.  
  5486. Syntax 
  5487.  
  5488. FILECOPY quell$, ziel$
  5489.  
  5490. Eingabe 
  5491.  
  5492. quell$      Datei, deren Inhalt kopiert werden soll
  5493. ziel$       Datei, in die der Inhalt der Quelldatei kopiert wird
  5494.  
  5495. Ausgabe 
  5496.  
  5497. keine
  5498.  
  5499. Beschreibung 
  5500.  
  5501. Der Inhalt der Zieldatei wird bei diesem Vorgang ueberschrieben.
  5502.  
  5503. Bespiel    FILECOPY 
  5504.  
  5505. Siehe 
  5506.  
  5507. KILL
  5508. RENAME
  5509.  
  5510.  
  5511. ΓòÉΓòÉΓòÉ 33. FILELEN ΓòÉΓòÉΓòÉ
  5512.  
  5513. Funktion 
  5514.  
  5515. Anzeigen der Dateigroe╤üe
  5516.  
  5517. Syntax 
  5518.  
  5519. FILELEN, file, laenge
  5520.  
  5521. Eingabe 
  5522.  
  5523. file        Dateiname
  5524.  
  5525. Ausgabe 
  5526.  
  5527. laenge      Groe╤üe der Datei
  5528.  
  5529. Beschreibung 
  5530.  
  5531.  
  5532.  
  5533. Bespiel    FILELEN 
  5534.  
  5535. Siehe 
  5536.  
  5537.  
  5538. ΓòÉΓòÉΓòÉ 34. GETDIR ΓòÉΓòÉΓòÉ
  5539.  
  5540. Funktion 
  5541.  
  5542. Ermittelt das aktuelle Verzeichnis.
  5543.  
  5544. Syntax 
  5545.  
  5546. GETDIR verz$
  5547.  
  5548. Eingabe 
  5549.  
  5550. keine
  5551.  
  5552. Ausgabe 
  5553.  
  5554. verz$      Variable mit dem Namen des aktuellen Verzeichnisses
  5555.  
  5556. Beschreibung 
  5557.  
  5558. Mit diesem Befehl koennen Sie aus einem KIM-Programm heraus das
  5559. aktuelle Verzeichnis Ihres Systems ermitteln.
  5560.  
  5561. Bespiel    GETDIR 
  5562.  
  5563. Siehe 
  5564.  
  5565. GETDRIVE
  5566. SETDRIVE
  5567.  
  5568.  
  5569. ΓòÉΓòÉΓòÉ 35. GETDRIVE ΓòÉΓòÉΓòÉ
  5570.  
  5571. Funktion 
  5572.  
  5573. Ermittelt das aktuelle Laufwerk.
  5574.  
  5575. Syntax 
  5576.  
  5577. GETDRIVE nr
  5578.  
  5579. Eingabe 
  5580.  
  5581. Keine
  5582.  
  5583. Ausgabe 
  5584.  
  5585. nr     Variable mit der Codezahl des aktuellen Laufwerkes
  5586.  
  5587. Beschreibung 
  5588.  
  5589. Mit dieser Anweisung koennen Sie aus einem laufenden KIM-Programm
  5590. heraus das aktuelle Laufwerk ermitteln. Dieses wird als Codezahl
  5591. an KIM zurueckgegeben:
  5592.        nr=1: Das aktuelle Laufwerk ist A
  5593.        nr=2: Das aktuelle Laufwerk ist B
  5594.        nr=3: Das aktuelle Laufwerk ist C usw.
  5595.  
  5596. Bespiel    GETDRIVE 
  5597.  
  5598. Siehe 
  5599.  
  5600. SETDRIVE
  5601.  
  5602.  
  5603. ΓòÉΓòÉΓòÉ 36. GETFILES ΓòÉΓòÉΓòÉ
  5604.  
  5605. Funktion 
  5606.  
  5607. Liest Datei- und Unterverzeichnisnamen eines Verzeichnisses
  5608. in ein Array ein.
  5609.  
  5610. Syntax 
  5611.  
  5612. GETFILES vorgabe$, array$, start, ende, flag
  5613.  
  5614. Eingabe 
  5615.  
  5616. vorgabe$   Variable mit vorgegebenem Auswahlkriterium
  5617. array$     Name des Arrays, in das die Namen eingelesen werden sollen
  5618. start      Kennummer der ersten zu verwendenen Arrayvariablen in Feld
  5619. ende       Kennummer der letzten zu verwendenen Arrayvariablen im Feld
  5620. flag       Auswahl, ob auch Unterverzeichnisse eingelesen werden sollen:
  5621.            flag=1: Unterverzeichnisse einlesen;
  5622.            flag<>1: Unterverzeichnisse nicht einlesen.
  5623.  
  5624. Ausgabe 
  5625.  
  5626. flag       Variable mit der Anzahl der eingelesenen Datei- und
  5627.            Verzeichnisnamen
  5628.  
  5629. Beschreibung 
  5630.  
  5631. Es koennen gemaess einer Vorgabe bestimmte Dateien eines Verzeichnisses
  5632. in ein Array eingelesen werden. Beispielsweise lassen sich alle
  5633. EXE-Dateien im Verzeichnis Cexe ein-
  5634. lesen. Mit Hilfe der Variablen flag koennen Sie entscheiden, ob bei
  5635. diesem Vorgang auch eventuell vorhandene Unterverzeichnisse berueck-
  5636. sichtigt werden sollen.
  5637.  
  5638. Bespiel    GETFILES 
  5639.  
  5640. Siehe 
  5641.  
  5642. FILELEN
  5643.  
  5644.  
  5645. ΓòÉΓòÉΓòÉ 37. GETS ΓòÉΓòÉΓòÉ
  5646.  
  5647. Funktion 
  5648.  
  5649. Liest eine Zeile aus einer Textdatei in das Programm ein.
  5650.  
  5651. Syntax 
  5652.  
  5653. GETS nr,string$ oder GETS nr, zahl
  5654.  
  5655. Eingabe 
  5656.  
  5657. nr            Kennziffer der zu oeffnenden Datei
  5658.  
  5659. Ausgabe 
  5660.  
  5661. string$       String mit der eingelesenen Zeile aus der
  5662.               entsprechenden Datei
  5663. zahl          Zahlenvariable mit der eingelesenen Zahl aus der Datei
  5664.  
  5665. Beschreibung 
  5666.  
  5667. Die Textdatei muss zuvor mit der Anweisung OPEN geoeffnet werden. Falls
  5668. das Textende erreicht wird, wird der Variablen string$ der Wert "EOF"
  5669. (End Of File) zugewiesen. Die maximale Laenge der zu lesenden Zeile
  5670. darf 255 Zeichen betragen.
  5671.  
  5672. Bespiel    GETS 
  5673.  
  5674. Siehe 
  5675.  
  5676. GETS_SELECT
  5677. SELECT
  5678.  
  5679.  
  5680. ΓòÉΓòÉΓòÉ 38. GETS_SELECT ΓòÉΓòÉΓòÉ
  5681.  
  5682. Funktion 
  5683.  
  5684. Einlesen einer Textdateizeile mit automatischer Aufsplittung einer Zeile
  5685.  
  5686. Syntax 
  5687.  
  5688. GETS_SELECT datei_nr,trennzeichen,Array,von,bis
  5689.  
  5690. Eingabe 
  5691.  
  5692. datei_nr
  5693. trennzeichen
  5694. array
  5695. von
  5696. bis
  5697.  
  5698. Ausgabe 
  5699.  
  5700. array      Array mit Inhalt
  5701.  
  5702. Beschreibung 
  5703.  
  5704. Der Befehl wurde geschaffen um Dateien mit Zeilenlaenge > 255 Zeichen
  5705. einzulesen. (ASCII-Import aus anderen Datenbanken)
  5706. Der Befehl ist vergleichbar mit dem Befehl SELECT. Mit dem Unterschied,
  5707. dass direkt aus einer Textdatei gelesen wird und nach dem Trennzeichen in
  5708. ein Array zerlegt wird. Die Zeile kann bis zu 3000 Bytes lang sein.  Die
  5709. ermittelten Teilstrings duerfen aber max. 255 Zeichen lang sein.
  5710.  
  5711. Bespiel    GETS_SELECT 
  5712.  
  5713. Siehe 
  5714.  
  5715. SELECT
  5716.  
  5717.  
  5718. ΓòÉΓòÉΓòÉ 39. IMPORT ΓòÉΓòÉΓòÉ
  5719.  
  5720. Funktion 
  5721.  
  5722. Laedt ausgelagerte Programmteile in das Programm und entfernt Sie sofort
  5723. nach der Abarbeitung wieder aus dem Speicher.
  5724.  
  5725. Syntax 
  5726.  
  5727. IMPORT datei
  5728.  
  5729. Eingabe 
  5730.  
  5731. datei        Name der zu ladenden Importdatei
  5732.  
  5733. Ausgabe 
  5734.  
  5735.  
  5736. Beschreibung 
  5737.  
  5738. IMPORT laedt einen Programmteil vom aktuellen Laufwerk, welcher bis zum
  5739. Programmendekennzeichen IMPORTEND abgearbeitet und danach wieder aus
  5740. dem Speicher entfernt wird. Somit duerfen Haupt- und Importdatei zusammen
  5741. groesser als 64 KB sein. Die Importdatei selbst darf aber nur maximal
  5742. 64 KB Speicherkapazitaet beanspruchen. In eine Importdatei selbst darf
  5743. nicht importiert werden. In der Importdatei definierte Variablen ver-
  5744. bleiben jedoch im Speicher. Achten Sie deshalb darauf, keine Variablen
  5745. oder Labels doppelt zu verwenden. Wenn Sie eine Importdatei mehrfach
  5746. in ein Programm laden moechten, sollten Sie auf Variablendefinitionen in
  5747. der Importdatei verzichten, da sonst jedesmal die Definition durchge-
  5748. fuehrt wuerde. Andererseits koennen Sie alle Variablen des Programms in
  5749. einer Importdatei definieren und diese einmal zu Beginn laden. Achten
  5750. Sie bei Sprungbefehlen darauf, dass die Sprungmarke auch gerade
  5751. importiert ist. Sie koennen von der Importdatei aus andere Unterpro-
  5752. gramme anspringen.
  5753.  
  5754. Bespiel    IMPORT 
  5755.  
  5756. Siehe 
  5757.  
  5758. IMPORTEND
  5759.  
  5760.  
  5761. ΓòÉΓòÉΓòÉ 40. IMPORTEND ΓòÉΓòÉΓòÉ
  5762.  
  5763. Funktion 
  5764.  
  5765. Programmendezeichen in Importdateien.
  5766.  
  5767. Syntax 
  5768.  
  5769. IMPORTEND
  5770.  
  5771. Eingabe 
  5772.  
  5773. Keine
  5774.  
  5775. Ausgabe 
  5776.  
  5777. Keine
  5778.  
  5779. Beschreibung 
  5780.  
  5781. Jede Importdatei muss mit IMPORTEND beendet werden. Erst dann erfolgt
  5782. der Ruecksprung in das Hauptprogramm und die Entfernung der Importdatei
  5783. aus dem Speicher.
  5784.  
  5785. Bespiel    IMPORTEND 
  5786.  
  5787. Siehe 
  5788.  
  5789. IMPORT
  5790.  
  5791.  
  5792. ΓòÉΓòÉΓòÉ 41. INT ΓòÉΓòÉΓòÉ
  5793.  
  5794. Funktion 
  5795.  
  5796. Wandel eine numerische Zahl in einen Integer-Wert
  5797.  
  5798. Syntax 
  5799.  
  5800. INT, alt  neu
  5801.  
  5802. Eingabe 
  5803.  
  5804. alt             Numerische Zahl
  5805.  
  5806. Ausgabe 
  5807.  
  5808. neu             Interger Zahl
  5809.  
  5810. Beschreibung 
  5811.  
  5812. Wird ben╨ñtigt um eine Zahlenvariable in ein ganze Zahl
  5813. umzuwandeln
  5814.  
  5815. Bespiel    INT 
  5816.  
  5817. Siehe 
  5818.  
  5819.  
  5820. ΓòÉΓòÉΓòÉ 42. ISOMAP ΓòÉΓòÉΓòÉ
  5821.  
  5822. Funktion 
  5823.  
  5824. Anzeigen des Zeichensatz in gleicher Form.
  5825.  
  5826. Syntax 
  5827.  
  5828. ISOMAP wert
  5829.  
  5830. Eingabe 
  5831.  
  5832. wert   0=Iso-Zeichensatz mapping wird nicht durchgef╨æhrt
  5833. wert   1=Iso-Zeichensatz mapping wird durchgef╨æhrt
  5834.  
  5835. Ausgabe 
  5836.  
  5837.  
  5838.  
  5839. Beschreibung 
  5840.  
  5841. Betrifft alle anzeigen von Umlauten.
  5842.  
  5843. Bespiel    ISOMAP 
  5844.  
  5845. Siehe 
  5846.  
  5847.  
  5848. ΓòÉΓòÉΓòÉ 43. JUTODATE ΓòÉΓòÉΓòÉ
  5849.  
  5850. Funktion 
  5851.  
  5852. Wandelt Julianische Zahl in DbaseDatum (CCYYMMTT)
  5853.  
  5854. Syntax 
  5855.  
  5856. jutodate datum_zahl1, datum1
  5857.  
  5858. Eingabe 
  5859.  
  5860. datum_zahl1
  5861.  
  5862. Ausgabe 
  5863.  
  5864. datum1
  5865.  
  5866. Beschreibung 
  5867.  
  5868.  
  5869.  
  5870. Bespiel    JUTODATE 
  5871.  
  5872. Siehe 
  5873.  
  5874. DATETOJU
  5875. DATETOW
  5876. DATEFORMAT
  5877. DATUM
  5878. TIME
  5879.  
  5880.  
  5881. ΓòÉΓòÉΓòÉ 44. KILL ΓòÉΓòÉΓòÉ
  5882.  
  5883. Funktion 
  5884.  
  5885. Loescht eine Datei.
  5886.  
  5887. Syntax 
  5888.  
  5889. KILL datei$
  5890.  
  5891. Eingabe 
  5892.  
  5893. datei$        Zu loeschende Datei (ggf. mit Pfadangabe)
  5894.  
  5895. Ausgabe 
  5896.  
  5897. Keine
  5898.  
  5899. Beschreibung 
  5900.  
  5901. Durch diese Anweisung wird eine gesamte Datei geloescht. Fuer den Namen
  5902. der zu loeschenden Datei duerfen keine WILDCARDS *.* verwendet werden.
  5903.  
  5904. Bespiel    KILL 
  5905.  
  5906. Siehe 
  5907.  
  5908. EXIST
  5909.  
  5910.  
  5911. ΓòÉΓòÉΓòÉ 45. LOAD ΓòÉΓòÉΓòÉ
  5912.  
  5913. Funktion 
  5914.  
  5915. Erstellt ein Auswahlmenue zur Selektierung einer Datei.
  5916.  
  5917. Syntax 
  5918.  
  5919. LOAD parentwindow_id, such$,datei$ [ueberschrift]
  5920.  
  5921. Eingabe 
  5922.  
  5923. parentwindow_id    Kennummer des Fensters, in dem die Auswahlbox als
  5924.                    Unterfenster erscheinen soll
  5925. such$              Pfadangabe fuer die gesuchte Datei
  5926. ueberschrift        Titel des Auswahlfensters
  5927.  
  5928. Ausgabe 
  5929.  
  5930. datei$             Name der gesuchten Datei inklusive Pfad
  5931.  
  5932. Beschreibung 
  5933.  
  5934. Mit diesem Befehl koennen Sie eine beliebige Datei laden. Geben Sie
  5935. zunaechst einen Suchpfad an (wobei Sie auch die Wildcard *.* verwenden
  5936. koennen). Es erscheint dann im angegebenem Fenster ein Menuefenster mit
  5937. allen unter diesen Suchpfad zur Auswahl stehenden Dateien. Optional
  5938. koennen Sie dem Menuefenster eine ueberschrift verleihen. Sie koennen
  5939. sich innerhalb des Menuefensters mit den Pfeiltasten sowie POS1 (HOME)
  5940. und ENDE (END) bewegen. Mit der ENTER-Taste waehlen Sie eine Datei aus,
  5941. mit ESC brechen Sie den Vorgang ab. Beachten Sie bitte, dass im Menue-
  5942. fenster Dateinamen klein und Verzeichnisnamen gross geschrieben sind.
  5943.  
  5944. Bespiel    LOAD 
  5945.  
  5946. Siehe 
  5947.  
  5948. OPEN
  5949.  
  5950.  
  5951. ΓòÉΓòÉΓòÉ 46. MKDIR ΓòÉΓòÉΓòÉ
  5952.  
  5953. Funktion 
  5954.  
  5955. Erstellt aus einem KIM-Programm heraus ein neues Verzeichnis.
  5956.  
  5957. Syntax 
  5958.  
  5959. MKDIR dirname$, ok
  5960.  
  5961. Eingabe 
  5962.  
  5963. dirname$    Variable mit dem Namen des zu erstellenden Verzeichnisses
  5964.  
  5965. Ausgabe 
  5966.  
  5967. ok          Variable mit dem Ergebnis der Aktion:
  5968.             ok=1: Verzeichnis konnte erstellt werden
  5969.             ok=-1: Verzeichnis konnte nicht erstellt werden
  5970.  
  5971. Beschreibung 
  5972.  
  5973. Hiermit koennen Sie von KIM aus ein neues Verzeichnis erstellen. Es
  5974. wird in das aktuelle Verzeichnis als Unterverzeichnis eingefuegt.
  5975.  
  5976. Bespiel    MKDIR 
  5977.  
  5978. Siehe 
  5979.  
  5980.  
  5981. ΓòÉΓòÉΓòÉ 47. OPEN ΓòÉΓòÉΓòÉ
  5982.  
  5983. Funktion 
  5984.  
  5985. oeffnet eine bestimmte Textdatei.
  5986.  
  5987. Syntax 
  5988.  
  5989. OPEN nr,datei$ [,"status"]
  5990.  
  5991. Eingabe 
  5992.  
  5993. nr            Nummer der zu oeffnenden Datei
  5994. datei$        Name der zu oeffnenden Datei (evtl. mit Pfad)
  5995. status        Gibt den Arbeitsmodus des Befehls an
  5996.  
  5997. Ausgabe 
  5998.  
  5999.  
  6000. Beschreibung 
  6001.  
  6002. Beim oeffnen der Datei ohne Angabe des Status des Befehls wird die Datei
  6003. als Textdatei betrachtet. Es wird der Status "oeffnen und Schreiben"
  6004. vorgegeben. Falls die Textdatei datei$ nicht vorhanden ist, wird Sie
  6005. durch diesen Befehl angelegt. Es kann Text an eine bestehende Datei
  6006. angefuegt werden. Die Angabe der Nummer dient zum Verwalten evtl.
  6007. mehrerer gleichzeitig geoeffneter Dateien. Die Nummer muss aber auch
  6008. angegeben werden, wenn nur eine Datei geoeffnet ist, da die sich auf
  6009. die Datei beziehenden Befehle ueber die Dateinummer angesprochen werden.
  6010. Sie koennen optional folgende Arbeitsmodi des Befehls verwenden:
  6011. "r"           Datei oeffnen zum Lesen (keine Schreibmoeglichkeit, d.h.
  6012.               die Datei kann nur eingesehen, aber nicht veraendert
  6013.               werden),
  6014. "w"           Datei oeffnen zum Schreiben; Neuerstellung, falls Datei
  6015.               nicht vorhanden (Dateiinhalt kann veraendert, aber nicht
  6016.               eingesehen werden)
  6017. "r+"          Datei oeffnen zum Lesen und Schreiben (veraenderbar)
  6018. Geben Sie den entsprechenden Status in die Befehlssyntax ein, wenn Sie
  6019. nicht den normalen Modus verwenden moechten.
  6020.  
  6021. Bespiel    OPEN 
  6022.  
  6023. Siehe 
  6024.  
  6025. CLOSE
  6026. GETS
  6027. PUTS
  6028.  
  6029.  
  6030. ΓòÉΓòÉΓòÉ 48. OS_TYPE ΓòÉΓòÉΓòÉ
  6031.  
  6032. Funktion 
  6033.  
  6034. Ermittelt die Version des KIM-Interpreters.
  6035.  
  6036. Syntax 
  6037.  
  6038. OS_TYPE os$
  6039.  
  6040. Eingabe 
  6041.  
  6042. keine
  6043.  
  6044. Ausgabe 
  6045.  
  6046. os$      Variable mit dem Namen des verwendeten KIM-Interpreters.
  6047.  
  6048. Beschreibung 
  6049.  
  6050. Mit diesem Befehl koennen Sie ermitteln, welche Version des
  6051. KIM-Interpreters ("OS/2", "WIN", "MSDOS") gerade aktiv ist.
  6052.  
  6053. Bespiel    OS_TYPE 
  6054.  
  6055. Siehe 
  6056.  
  6057.  
  6058. ΓòÉΓòÉΓòÉ 49. PUTS ΓòÉΓòÉΓòÉ
  6059.  
  6060. Funktion 
  6061.  
  6062. Schreibt eine oder mehrere Variablen in eine Ausgabedatei.
  6063.  
  6064. Syntax 
  6065.  
  6066. PUTS nr,string$ (,"   ";a$,zahl)
  6067.  
  6068. Eingabe 
  6069.  
  6070. nr            Nummer, mit der die anzusprechende Textdatei
  6071.               gekennzeichnet wurde.
  6072. string$       In die Ausgabedatei zu schreibende Zeichen (" "),
  6073.               Stringvariablen
  6074. a$            (string$) oder Zahlenvariablen (zahl)
  6075. zahl
  6076.  
  6077. Ausgabe 
  6078.  
  6079. Keine
  6080.  
  6081. Beschreibung 
  6082.  
  6083. Die Ausgabeeinheit muss vor Anwendung dieser Anweisung mittels OPEN
  6084. eroeffnet worden sein. Die entsprechende Datei wird ueber die dabei
  6085. vergebene Nummer angesprochen.
  6086.  
  6087. Bespiel    PUTS 
  6088.  
  6089. Siehe 
  6090.  
  6091. CLOSE
  6092. GETS
  6093. OPEN
  6094. SELECT
  6095.  
  6096.  
  6097. ΓòÉΓòÉΓòÉ 50. REM ΓòÉΓòÉΓòÉ
  6098.  
  6099. Funktion 
  6100.  
  6101. Leitet einen Kommentar "Kommentar" \t ein, der von KIM nicht als
  6102. Befehl bearbeitet wird.
  6103.  
  6104. Syntax 
  6105.  
  6106. REM
  6107.  
  6108. Eingabe 
  6109.  
  6110. Keine
  6111.  
  6112. Ausgabe 
  6113.  
  6114. Keine
  6115.  
  6116. Beschreibung 
  6117.  
  6118. Alle Anweisungen, die in der Programmzeile nach dem REM folgen, werden
  6119. von KIM als Kommentar angesehen und nicht bearbeitet. Falls in der
  6120. Programmzeile vor dem REM bereits eine Anweisung steht, muss dem REM
  6121. ein Doppelpunkt vorangestellt werden.
  6122.  
  6123. Bespiel    REM 
  6124.  
  6125. Siehe 
  6126.  
  6127.  
  6128. ΓòÉΓòÉΓòÉ 51. RENAME ΓòÉΓòÉΓòÉ
  6129.  
  6130. Funktion 
  6131.  
  6132. Benennt eine Datei um.
  6133.  
  6134. Syntax 
  6135.  
  6136. RENAME name_alt$, name_neu$, ok
  6137.  
  6138. Eingabe 
  6139.  
  6140. name_alt$     Variable mit dem alten Dateinamen
  6141. name_neu$     Variable mit dem neuen Dateinamen
  6142.  
  6143. Ausgabe 
  6144.  
  6145. ok            Variable mit dem Ergebnis der Aktion:
  6146.               ok=1: Aktion war erfolgreich
  6147.               ok=-1: Aktion war nicht erfolgreich
  6148.  
  6149. Beschreibung 
  6150.  
  6151. Hiermit koennen Sie aus KIM heraus eine Datei umbenennen.
  6152.  
  6153. Bespiel    RENAME 
  6154.  
  6155. Siehe 
  6156.  
  6157. KILL
  6158. FILECOPY
  6159.  
  6160.  
  6161. ΓòÉΓòÉΓòÉ 52. RMDIR ΓòÉΓòÉΓòÉ
  6162.  
  6163. Funktion 
  6164.  
  6165. Loescht aus KIM heraus ein Verzeichnis.
  6166.  
  6167. Syntax 
  6168.  
  6169. RMDIR dirname$, ok
  6170.  
  6171. Eingabe 
  6172.  
  6173. dirname$      Variable mit dem Namen des zu loeschenden Verzeichnisses
  6174.  
  6175. Ausgabe 
  6176.  
  6177. ok            Variable mit dem Ergebnis der Aktion:
  6178.               ok=1:  Aktion war erfolgreich
  6179.               ok=-1: Aktion war nicht erfolgreich
  6180.  
  6181. Beschreibung 
  6182.  
  6183. Sie koennen hiermit aus KIM heraus ein Verzeichnis loeschen.
  6184.  
  6185. Bespiel    RMDIR 
  6186.  
  6187. Siehe 
  6188.  
  6189. MKDIR
  6190. GETDIR
  6191.  
  6192.  
  6193. ΓòÉΓòÉΓòÉ 53. RUN ΓòÉΓòÉΓòÉ
  6194.  
  6195. Funktion 
  6196.  
  6197. Startet aus einem Programm ein anderes KIM-Programm.
  6198.  
  6199. Syntax 
  6200.  
  6201. RUN programm
  6202.  
  6203. Eingabe 
  6204.  
  6205. programm   Name des zu startenden Programms.
  6206.  
  6207. Ausgabe 
  6208.  
  6209. Keine
  6210.  
  6211. Beschreibung 
  6212.  
  6213. nil
  6214.  
  6215. Bespiel    RUN 
  6216.  
  6217. Siehe 
  6218.  
  6219.  
  6220. ΓòÉΓòÉΓòÉ 54. SETDRIVE ΓòÉΓòÉΓòÉ
  6221.  
  6222. Funktion 
  6223.  
  6224. Wechselt das aktuelle Laufwerk.
  6225.  
  6226. Syntax 
  6227.  
  6228. SETDRIVE nr, anzahl
  6229.  
  6230. Eingabe 
  6231.  
  6232. nr       Variable mit der Codezahl des gewuenschten Laufwerkes
  6233.          (1=A,2=B,3=C, usw.)
  6234.  
  6235. Ausgabe 
  6236.  
  6237. anzahl   Variable mit der Anzahl der zur Verfuegung stehenden Laufwerke
  6238.  
  6239. Beschreibung 
  6240.  
  6241. keine
  6242.  
  6243. Bespiel    SETDRIVE 
  6244.  
  6245. Siehe 
  6246.  
  6247. GETDRIVE
  6248.  
  6249.  
  6250. ΓòÉΓòÉΓòÉ 55. SHELL ΓòÉΓòÉΓòÉ
  6251.  
  6252. Funktion 
  6253.  
  6254. Erlaubt die Ausfuehrung von  OS/2 / DOS-Befehlen  oder
  6255. OS/2 / DOS-Programmen waehrend eines KIM-Programmablaufs.
  6256.  
  6257. Syntax 
  6258.  
  6259. SHELL string$ [Pfad, Parameter, x, y, breite, hoehe, visible, titel]
  6260.  
  6261. Eingabe 
  6262.  
  6263. string$     Variable mit dem Namen des auszufuehrenden Befehls/Programms
  6264. Pfad        Suchpfad zum gewuenschten Programm (z.B."CKIM")
  6265. Parameter   Zusaetzliche Befehle in der Kommandozeile des Betriebssystems
  6266.             (vgl. hierzu das Handbuch des Betriebssystem)
  6267. x,y         x- und y-Position der linken oberen Ecke des Child-Windows
  6268. breite      Breite des Child-Windows
  6269. hoehe       Hoehe des Child-Windows
  6270. visible     Regelt den Arbeitsmodus des externen Programms:
  6271.             visible=1:      Das externe Programm laeuft im Vordergrund
  6272.             visible=0:      Das externe Programm laeuft im Hintergrund
  6273. titel        Titel des Child-Windows
  6274.  
  6275. Ausgabe 
  6276.  
  6277. Keine
  6278.  
  6279. Beschreibung 
  6280.  
  6281. Mit diesem Befehl wird der DOS-Interpreter COMMAND.COM geladen. Danach
  6282. ist das Programm in der Lage, jede beliebige DOS-Anweisung zu verstehen
  6283. und zu bearbeiten. Moechten Sie ein externes Program starten, so geben
  6284. sie die in eckigen Klammern gesetzten optionalen Angaben ein. Es oeffnet
  6285. sich dann ein Child-Window, in dem das externe Programm ablaeuft. Der
  6286. Modus (Vordergrund- oder Hintergrundbetrieb) wird ueber visible gesteuert.
  6287. Die Rueckkehr von der DOS-Ebene zum KIM-Programm erfolgt durch Eingabe
  6288. der Anweisung EXIT in der DOS-Ebene. Sie koennen den auf der DOS-Ebene
  6289. verfuegbaren Speicher von ca. 100 KB durch das sogenanuete Speicher-
  6290. swapping auf ca. 400 KB erhoehen. Dies wird durch die Anweisung
  6291. _SHELL_FLAG = 1 ausgefuehrt, welche Sie vor der eigentlichen SHELL-
  6292. Anweisung aktivieren muessen. Bei _SHELL_FLAG = 0 wird kein Swappvorgang
  6293. durchgefuehrt.
  6294.  
  6295. Bespiel    SHELL 
  6296.  
  6297. Siehe 
  6298.  
  6299. RUN
  6300.  
  6301.  
  6302. ΓòÉΓòÉΓòÉ 56. SOUND ΓòÉΓòÉΓòÉ
  6303.  
  6304. Funktion 
  6305.  
  6306. Steuert den internen Lautsprecher des Computers an.
  6307.  
  6308. Syntax 
  6309.  
  6310. SOUND freq, dur
  6311.  
  6312. Eingabe 
  6313.  
  6314. freq           Frequenz des zu erzeugenden Tons in Hertz
  6315. dur            Laenge des Tons in Millisekunden
  6316.  
  6317. Ausgabe 
  6318.  
  6319. keine
  6320.  
  6321. Beschreibung 
  6322.  
  6323. Mit diesem Befehl koennen Sie den Lautsprecher des Computers zur
  6324. Erzeugung eines Tones ansteuern. Dabei koennen Sie Tonhoehe und
  6325. -dauer festlegen.
  6326.  
  6327. Bespiel    SOUND 
  6328.  
  6329. Siehe 
  6330.  
  6331. BEEP
  6332.  
  6333.  
  6334. ΓòÉΓòÉΓòÉ 57. START ΓòÉΓòÉΓòÉ
  6335.  
  6336. Funktion 
  6337.  
  6338. Aktiviert den KIM-Debugger.
  6339.  
  6340. Syntax 
  6341.  
  6342. START
  6343.  
  6344. Eingabe 
  6345.  
  6346. Keine
  6347.  
  6348. Ausgabe 
  6349.  
  6350. Keine
  6351.  
  6352. Beschreibung 
  6353.  
  6354. Fuegen Sie diesen Befehl an der Stelle in Ihrem Programm ein, von der aus
  6355. Sie Ihr Programm ueberpruefen lassen wollen. Der Debugger wird durch den
  6356. Befehl ENDE wieder abgeschaltet.
  6357.  
  6358. Bespiel    START 
  6359.  
  6360. Siehe 
  6361.  
  6362. ENDE
  6363.  
  6364.  
  6365. ΓòÉΓòÉΓòÉ 58. TIME ΓòÉΓòÉΓòÉ
  6366.  
  6367. Funktion 
  6368.  
  6369. Ermittelt Tagesdatum und Uhrzeit aus dem ROM-BIOS des Rechners.
  6370.  
  6371. Syntax 
  6372.  
  6373. TIME zeit$
  6374.  
  6375. Eingabe 
  6376.  
  6377. Keine
  6378.  
  6379. Ausgabe 
  6380.  
  6381. zeit$         Variable mit dem Aktuellen Datum und der aktuellen Uhrzeit
  6382.  
  6383. Beschreibung 
  6384.  
  6385. Mit diesem Befehl koennen Sie das Tagesdatum und die aktuelle Uhrzeit in
  6386. das Programm einlesen. Sie erhalten folgende Anzeige: ttt mmm tt hh
  6387.  
  6388. Bespiel    TIME 
  6389.  
  6390. Siehe 
  6391.  
  6392. DATUM
  6393. DATUMDIFF
  6394.  
  6395.  
  6396. ΓòÉΓòÉΓòÉ 59. DECLARE ΓòÉΓòÉΓòÉ
  6397.  
  6398. Funktion 
  6399.  
  6400. Beschleunigt den Ladevorgang der Variablendeklarationen
  6401. beim Programmstart.
  6402.  
  6403. Syntax 
  6404.  
  6405. DECLARE_END
  6406.  
  6407. Eingabe 
  6408.  
  6409. Keine
  6410.  
  6411. Ausgabe 
  6412.  
  6413. Keine
  6414.  
  6415. Beschreibung 
  6416.  
  6417. Diese Anweisung beschleunigt den Ablauf eines Programms, da sie die
  6418. erforderliche Zeit zum Laden der deklarierten Variablen verkuerzt.
  6419. Dies gelingt durch ein teilweises Deaktivieren von Sicherheits-
  6420. ueberpruefungen beim Laden des Programmes. Der Befehl darf deshalb
  6421. nur verwendet werden, wenn sichergestellt ist, dass das Programm
  6422. keinerlei Fehler enthaelt, da sonst gleichnamig definierte Variablen
  6423. nicht mehr als Fehler erkannt werden koennen. Zwischen DECLARE und
  6424. DECLARE_END duerfen keine anderen Anweisungen als Variablen-
  6425. deklarationen stehen.
  6426.  
  6427. Bespiel    DECLARE 
  6428.  
  6429. Siehe 
  6430.  
  6431. DEFINE
  6432. DEFSTRING
  6433. DEFFLOAT
  6434. DIM
  6435. DIMFLOAT
  6436.  
  6437.  
  6438. ΓòÉΓòÉΓòÉ 60. DECLARE_END ΓòÉΓòÉΓòÉ
  6439.  
  6440. Funktion 
  6441.  
  6442. Markiert das Ende von DECLARE.
  6443.  
  6444.  
  6445. Syntax 
  6446.  
  6447. DECLARE_END
  6448.  
  6449. Eingabe 
  6450.  
  6451. Keine
  6452.  
  6453. Ausgabe 
  6454.  
  6455. Keine
  6456.  
  6457. Beschreibung 
  6458.  
  6459. Diese Anweisung beschleunigt den Ablauf eines Programms, da sie die
  6460. erforderliche Zeit zum Laden der deklarierten Variablen verkuerzt.
  6461. Dies gelingt durch ein teilweises Deaktivieren von Sicherheits-
  6462. ueberpruefungen beim Laden des Programmes. Der Befehl darf deshalb
  6463. nur verwendet werden, wenn sichergestellt ist, dass das Programm
  6464. keinerlei Fehler enthaelt, da sonst gleichnamig definierte Variablen
  6465. nicht mehr als Fehler erkannt werden koennen. Zwischen DECLARE und
  6466. DECLARE_END duerfen keine anderen Anweisungen als Variablen-
  6467. deklarationen stehen.
  6468.  
  6469. Bespiel    DECLARE_END 
  6470.  
  6471. Siehe 
  6472.  
  6473. DEFINE
  6474. DEFSTRING
  6475. DEFFLOAT
  6476. DIM
  6477. DIMFLOAT
  6478.  
  6479.  
  6480. ΓòÉΓòÉΓòÉ 61. DEFFLOAT ΓòÉΓòÉΓòÉ
  6481.  
  6482. Funktion 
  6483.  
  6484. Definiert eine oder mehrere Zahlenvariablen.
  6485.  
  6486. Syntax 
  6487.  
  6488. DEFFLOAT var
  6489.  
  6490. Eingabe 
  6491.  
  6492. var       Name der zu definierenden Variablen (es koennen mehrere mit
  6493.           einer Anweisung erstellt werden)
  6494.  
  6495. Ausgabe 
  6496.  
  6497. Keine
  6498.  
  6499. Beschreibung 
  6500.  
  6501. Die Variablennamen duerfen bis zu 32 Zeichen lang sein. Die verfuegbaren
  6502. Eingabezeichen fuer Zahlenvariablen reichen von -1 E38 bis 1 E 38 und
  6503. arbeiten auf zwoelf Stellen genau (es koennen somit alle rationalen
  6504. Zahlen als Variablenwerte verwendet werden). Es duerfen bis zu 255
  6505. Zeichen in eine Variable eingegeben werden. Beachten Sie bei der
  6506. Zahleneingabe bitte, dass Sie bei Dezimalzahlen statt eines Kommas
  6507. einen Punkt verwenden muessen (also nicht 3,28, sondern 3.28).
  6508.  
  6509. Bespiel    DEFFLOAT 
  6510.  
  6511. Siehe 
  6512.  
  6513. DEFINE
  6514. DEFSTRING
  6515. DIM
  6516. DIMFLOAT
  6517.  
  6518.  
  6519. ΓòÉΓòÉΓòÉ 62. DEFINE ΓòÉΓòÉΓòÉ
  6520.  
  6521. Funktion 
  6522.  
  6523. Definiert eine Feldvariable fuer eine Record-Struktur.
  6524.  
  6525. Syntax 
  6526.  
  6527. DEFINE varname1,varlaenge1,...
  6528.  
  6529. Eingabe 
  6530.  
  6531. varname1     Name der zu definierenden Feldvariablen mit Kennummer
  6532. varlaenge1   Laenge der entsprechenden zu definierenden Define-Variablen
  6533.  
  6534. Ausgabe 
  6535.  
  6536. Keine
  6537.  
  6538. Beschreibung 
  6539.  
  6540. Die erste definierte Variable muss die Kennziffer1 besitzen, z.B.
  6541. string1. Danach hat die Numerierung fortlaufend aufsteigend zu
  6542. erfolgen (2,3..). Der Variablenname darf maximal 32 Zeichen lang
  6543. sein. Der Inhalt einer Define-Variablen darf normalerweise bis zu
  6544. 255 Zeichen betragen. Nur bei Datenbank- oder Maskenbefehlen aendert
  6545. sich die Variablenlaenge auf den unter varlaenge definierten Wert.
  6546.  
  6547. Bespiel    DEFINE 
  6548.  
  6549. Siehe 
  6550.  
  6551. DEFFLOAT
  6552. DEFSTRING
  6553. DIM
  6554. DIMFLOAT
  6555.  
  6556.  
  6557. ΓòÉΓòÉΓòÉ 63. DEFSTRING ΓòÉΓòÉΓòÉ
  6558.  
  6559. Funktion 
  6560.  
  6561. Definiert eine oder mehrere Stringvariablen.
  6562.  
  6563. Syntax 
  6564.  
  6565. DEFSTRING var1$,..
  6566.  
  6567. Eingabe 
  6568.  
  6569. var1$        Name der zu definierenden Stringvariablen (es koennen
  6570.              mehrere mit einer Anweisung definiert werden)
  6571.  
  6572. Ausgabe 
  6573.  
  6574. Keine
  6575.  
  6576. Beschreibung 
  6577.  
  6578. Die Variablennamen duerfen maximal 32 Zeichen lang sein. Der Inhalt
  6579. einer Stringvariablen kann bis zu 255 Zeichen betragen und muss mit
  6580. Anfuehrungs- und Schlusszeichen " " begrenzt werden. Als Eingabe sind
  6581. alle alphanumerischen Zeichen ausser Anfuehrungs- und Schlusszeichen
  6582. erlaubt.
  6583.  
  6584. Bespiel    DEFSTRING 
  6585.  
  6586. Siehe 
  6587.  
  6588. DEFFLOAT
  6589. DEFINE
  6590. DIM
  6591. DIMFLOAT
  6592.  
  6593.  
  6594. ΓòÉΓòÉΓòÉ 64. DIM ΓòÉΓòÉΓòÉ
  6595.  
  6596. Funktion 
  6597.  
  6598. Definiert mehrere Stringvariablen in Form eines Arrays.
  6599.  
  6600. Syntax 
  6601.  
  6602. DIM s$,n,m
  6603.  
  6604. Eingabe 
  6605.  
  6606. s$        Name des zu erstellenden String-Arrays
  6607. n         Nummer des ersten Strings im Feld
  6608. m         Nummer des letzten Strings im Feld
  6609.  
  6610. Ausgabe 
  6611.  
  6612. Keine
  6613.  
  6614. Beschreibung 
  6615.  
  6616. Jeder Variablenname darf bis zu 32 Zeichen lang sein. Der Inhalt der
  6617. Variablen darf jeweils maximal 255 Zeichen betragen (wie bei normalen
  6618. Stringvariablen). Sie koennen jede Variable des Arrays sowohl direkt
  6619. ueber den vollstaendigen Namen (st1) als auch nur ueber ihre Nummer an-
  6620. sprechen.
  6621.  
  6622. Bespiel    DIM 
  6623.  
  6624. Siehe 
  6625.  
  6626. DEFFLOAT
  6627. DEFINE
  6628. DEFSTRING
  6629. DIMFLOAT
  6630. FORM
  6631. STR
  6632. VAL
  6633.  
  6634.  
  6635. ΓòÉΓòÉΓòÉ 65. DIMFLOAT ΓòÉΓòÉΓòÉ
  6636.  
  6637. Funktion 
  6638.  
  6639. Definiert mehrere Zahlenvariablen in Form eines Arrays.
  6640.  
  6641. Syntax 
  6642.  
  6643. DIMFLOAT zahl,n,m
  6644.  
  6645. Eingabe 
  6646.  
  6647. zahl      Name des zu erstellenden Zahlenvariablen-Arrays
  6648. n         Nummer der ersten Variablen im Feld
  6649. m         Nummer der letzten Variablen im Feld
  6650.  
  6651. Ausgabe 
  6652.  
  6653. Keine
  6654.  
  6655. Beschreibung 
  6656.  
  6657. Jeder Variablenname darf bis zu 32 Zeichen lang sein. Der Inhalt der
  6658. Variablen darf maximal 255 Zeichen betragen. Sie koennen jede Variable
  6659. des Array sowohl direkt ueber den vollstaendigen Namen(st1) als auch nur
  6660. ueber ihre Nummer ansprechen.
  6661.  
  6662. Bespiel    DIMFLOAT 
  6663.  
  6664. Siehe 
  6665.  
  6666. DEFFLOAT
  6667. DEFINE
  6668. DEFSTRING
  6669. DIM
  6670. FORM
  6671. STR
  6672. VAL
  6673.  
  6674.  
  6675. ΓòÉΓòÉΓòÉ 66. DIMMEMO ΓòÉΓòÉΓòÉ
  6676.  
  6677. Funktion 
  6678.  
  6679. Es wird eine Stringvariable definiert, die bis zu
  6680. 64000 Zeichen Inhalt besitzen darf.
  6681.  
  6682. Syntax 
  6683.  
  6684. DIMMEMO varname,laenge
  6685.  
  6686. Eingabe 
  6687.  
  6688. varname     Name der Variablen
  6689. laenge      Gewuenschter maximaler Inhalt der Variablen
  6690.  
  6691. Ausgabe 
  6692.  
  6693.  
  6694. Beschreibung 
  6695.  
  6696. Memovariablen muessen immer als globale Variablen definiert werden!
  6697. Bei der Definition muss deshalb entweder vor dem Variablennamen ein
  6698. Underslash gesetzt oder dem Namen der Variablen als letztes Zeichen
  6699. eine Zahl eingefuegt werden.
  6700.  
  6701. Bespiel    DIMMEMO 
  6702.  
  6703. Siehe 
  6704.  
  6705. DEFSTRING
  6706. DEFINE
  6707.  
  6708.  
  6709. ΓòÉΓòÉΓòÉ 67. ASC ΓòÉΓòÉΓòÉ
  6710.  
  6711. Funktion 
  6712.  
  6713. Wandelt einen Buchstaben in seinen entsprechenden ASCII-Wert um.
  6714.  
  6715. Syntax 
  6716.  
  6717. ASC zeichen,zahl
  6718.  
  6719. Eingabe 
  6720.  
  6721. zeichen    String mit einem Zeichen
  6722.  
  6723.  
  6724. Ausgabe 
  6725.  
  6726. zahl       Zahlenvarible die den ASCII-Wert des Zeichen als Inhalt zuge-
  6727.            wiesen bekommt.
  6728.  
  6729. Beschreibung 
  6730.  
  6731. keine
  6732.  
  6733.  
  6734. Bespiel    ASC 
  6735.  
  6736. Siehe 
  6737.  
  6738. CHR
  6739. PUTS
  6740. STRADD
  6741.  
  6742.  
  6743. ΓòÉΓòÉΓòÉ 68. CHANGE ΓòÉΓòÉΓòÉ
  6744.  
  6745. Funktion 
  6746.  
  6747. Tauscht zwei Zeichen innerhalb einer Stringvariablen gegeneinander aus.
  6748.  
  6749. Syntax 
  6750.  
  6751. CHANGE string$,alt,neu
  6752.  
  6753. Eingabe 
  6754.  
  6755. string$       Stringvariable, in der der Austausch erfolgt
  6756. alt           Altes Zeichen (ASCII-Code angeben)
  6757. neu           Neues Zeichen (ASCII-Code angeben)
  6758.  
  6759. Ausgabe 
  6760.  
  6761. string$       (in geaenderter Form)
  6762.  
  6763. Beschreibung 
  6764.  
  6765. Es wird das angegebene Zeichen gegen das vorgegebene neue Zeichen aus-
  6766. getauscht. Das angegebene Zeichen wird so oft ausgetauscht, wie es in
  6767. der Stringvariable vorhanden ist.
  6768.  
  6769. Bespiel    CHANGE 
  6770.  
  6771. Siehe 
  6772.  
  6773. IN
  6774. LEN
  6775. STRDEL
  6776. REPLACE
  6777.  
  6778.  
  6779. ΓòÉΓòÉΓòÉ 69. CHR ΓòÉΓòÉΓòÉ
  6780.  
  6781. Funktion 
  6782.  
  6783. Wandelt einen ASCII-Codewert in ein entsprechendes Zeichen um.
  6784. Dieser Befehl wird bei der Druckersteuerung dazu verwendet, um
  6785. bestimmte Druckvorgaenge ueber spezielle Codezeichen vom Programm
  6786.  aus zu initiieren.
  6787.  
  6788. Syntax 
  6789.  
  6790. CHR(zahl)
  6791.  
  6792. Eingabe 
  6793.  
  6794. zahl         Es muss eine ganze Zahl eingegeben werden,  ASCII-Codewert
  6795.              fuer ein bestimmtes Zeichen fungiert (vgl. ASCII-Tabelle
  6796.              im Anhang).
  6797.  
  6798. Ausgabe 
  6799.  
  6800. Keine
  6801.  
  6802. Beschreibung 
  6803.  
  6804. Als Wert fuer die Variable zahl darf nur eine ganze Zahl zwischen
  6805. 0 und 255 eingegeben werden (nur diese Zahlen codieren ASCII-Zeichen).
  6806. Der Befehl funktioniert nur im Zusammenhang mit den Anweisungen LPRINT
  6807. und PUTS.
  6808.  
  6809. Bespiel    CHR 
  6810.  
  6811. Siehe 
  6812.  
  6813. LPRINT
  6814. PUTS
  6815.  
  6816.  
  6817. ΓòÉΓòÉΓòÉ 70. CLEAR ΓòÉΓòÉΓòÉ
  6818.  
  6819. Funktion 
  6820.  
  6821. Loescht den Inhalt eines Arrays.
  6822.  
  6823. Syntax 
  6824.  
  6825. CLEAR          var$,start,ende
  6826.  
  6827. Eingabe 
  6828.  
  6829. var$           Name des zu loeschenden Arrays
  6830. start          Nummer der ersten zu loeschenden Variablen im Array
  6831. ende           Nummer der letzten zu Loeschenden Variablen im Array
  6832.  
  6833. Ausgabe 
  6834.  
  6835. var$           Alle Variablen des Arrays mit Kennummern zwischen start
  6836.                und ende
  6837.                werden mit neuem Inhalt an das Programm zurueckgegeben.
  6838.  
  6839. Beschreibung 
  6840.  
  6841. Mit diesem Befehl koennen schnell und unkompliziert Teile eines Arrays
  6842. oder das gesamte Array geloescht werden. Die Variablen haben dann den
  6843. Wert " "  (Leerstring). Fuer einzelne, nicht in einem Array zusammenge-
  6844. fasste Variablen ist der Befehl nicht gedacht. Diese koennen ja einfach
  6845. durch die Zuweisung st=" " geleert werden.
  6846.  
  6847. Bespiel    CLEAR 
  6848.  
  6849. Siehe 
  6850.  
  6851. COMPRESS
  6852. COMPRESS2
  6853. LTRIM
  6854. SET
  6855. RSET
  6856.  
  6857.  
  6858. ΓòÉΓòÉΓòÉ 71. COMPRESS ΓòÉΓòÉΓòÉ
  6859.  
  6860. Funktion 
  6861.  
  6862. Entfernt Leerzeichen am Ende eines Strings. Dies ist wuenschenswert,
  6863. wenn einer Variablen ueber eine Maske ein Wert eingegeben wurde, der
  6864. kleiner als die Laenge des Eingabefeldes ist, da dabei automatisch
  6865. Leerzeichen angefuegt werden.
  6866.  
  6867. Syntax 
  6868.  
  6869. COMPRESS string$
  6870.  
  6871. Eingabe 
  6872.  
  6873. string$         Zu bearbeitende Stringvariable
  6874.  
  6875. Ausgabe 
  6876.  
  6877. string$         Geaenderte Stringvariable
  6878.  
  6879. Beschreibung 
  6880.  
  6881. Arrays werden besser mit der Anweisung COMPRESS2 bearbeitet.
  6882.  
  6883. Bespiel    COMPRESS 
  6884.  
  6885. Siehe 
  6886.  
  6887. COMPRESS2
  6888. LEN
  6889. MID
  6890. SET
  6891. RSET
  6892.  
  6893.  
  6894. ΓòÉΓòÉΓòÉ 72. COMPRESS2 ΓòÉΓòÉΓòÉ
  6895.  
  6896. Funktion 
  6897.  
  6898. Entfernt Leerzeichen am Ende von Strings in Arrays.
  6899.  
  6900. Syntax 
  6901.  
  6902. COMPRESS2 array$,start,ende
  6903.  
  6904. Eingabe 
  6905.  
  6906. array$        Name des Arrays
  6907. start         Nummer der ersten zu behandelnden Variablen im Array
  6908. ende          Nummer der letzten zu behandelnden Variablen im Array
  6909.  
  6910. Ausgabe 
  6911.  
  6912. array$        Veraendertes Array
  6913.  
  6914. Beschreibung 
  6915.  
  6916. Diese ist eine Version von COMPRESS zur schnellen Bearbeitung
  6917. von Arrays.
  6918.  
  6919. Bespiel    COMPRESS2 
  6920.  
  6921. Siehe 
  6922.  
  6923. COMPRESS
  6924. LEN
  6925. MID
  6926. SET
  6927. RSET
  6928.  
  6929.  
  6930. ΓòÉΓòÉΓòÉ 73. FILLSTR ΓòÉΓòÉΓòÉ
  6931.  
  6932. Funktion 
  6933.  
  6934. Fuellt eine Stringvariable mit einem bestimmten Zeichen.
  6935.  
  6936. Syntax 
  6937.  
  6938. FILLSTR anzahl,var$,zeichen$
  6939.  
  6940. Eingabe 
  6941.  
  6942. anzahl     Anzahl der einzufuellenden Zeichen
  6943. var$       Aufzufuellende Variable
  6944. zeichen$   Fuellzeichen (maximal 1 Zeichen)
  6945.  
  6946. Ausgabe 
  6947.  
  6948. var$       Gefuellte Variable
  6949.  
  6950. Beschreibung 
  6951.  
  6952. Es wird ein Zeichen beliebig oft in die Variable geschrieben. Die
  6953. durch diese Anweisung gefuellte Variable darf aber danach nur maximal
  6954. 255 Zeichen Inhalt besitzen.
  6955.  
  6956. Bespiel    FILLSTR 
  6957.  
  6958. Siehe 
  6959.  
  6960. CHANGE
  6961. REPLACE
  6962.  
  6963.  
  6964. ΓòÉΓòÉΓòÉ 74. FIND ΓòÉΓòÉΓòÉ
  6965.  
  6966. Funktion 
  6967.  
  6968. Durchsucht einen Array-Bereich nach einem Begriff.
  6969.  
  6970. Syntax 
  6971.  
  6972. FIND array$,start,ende,such$,erg
  6973.  
  6974. Eingabe 
  6975.  
  6976. array$     Name des zu durchsuchenden Arrays
  6977. start      Variable, ab der die Suche durchgefuehrt werden soll.
  6978. ende       Variable, bis zu der die Suche durchgefuehrt werden soll.
  6979. such$      Als Inhalt einer Stringvariablen vorgegebener Suchbegriff
  6980.  
  6981. Ausgabe 
  6982.  
  6983. erg        Variable mit der Position des Suchbegriffs im Array als
  6984.            Inhalt
  6985.  
  6986. Beschreibung 
  6987.  
  6988. Mit dem Befehl koennen Sie ein Array nach einem eindeutigen Suchbegriff
  6989. durchsuchen. Den Suchbegriff muessen Sie in  Form einer Stringvariablen
  6990. vorgeben. Das Ergebnis wird in der Zahlenvariablen erg abgespeichert.
  6991. Falls der Rechner bei der Suche keinen Erfolg hat, bekommt die Variable
  6992. erg den Wert Null zugewiesen.
  6993.  
  6994. Bespiel    FIND 
  6995.  
  6996. Siehe 
  6997.  
  6998. IN
  6999.  
  7000.  
  7001. ΓòÉΓòÉΓòÉ 75. FORM ΓòÉΓòÉΓòÉ
  7002.  
  7003. Funktion 
  7004.  
  7005. Wandelt eine Zahlenvariable in eine Stringvariable um, wobei eine
  7006. bestimmte Anzahl von Nachkommastellen in der Stringvariablen fest-
  7007. gelegt werden kann, oder formatiert eine bestehende Stringvariable
  7008. in Bezug auf die Nachkommastellen.
  7009.  
  7010. Syntax 
  7011.  
  7012. FORM zahl,string$,komma,zeichenzahl
  7013.  
  7014. Eingabe 
  7015.  
  7016. zahl         Die zu konvertierende Zahlenvariable
  7017. komma        Anzahl der Nachkommastellen in der neuen Stringvariablen
  7018. zeichenzahl  Gesamtzahl der Zeichen in der neuen Stringvariable
  7019.  
  7020. Ausgabe 
  7021.  
  7022. string$                 Die Stringvariable mit dem neuen Inhalt
  7023.  
  7024. Beschreibung 
  7025.  
  7026. Die Zeichen aus der Zahlenvariablen werden in der Stringvariable
  7027. rechtsbuendig ausgerichtet und noetigenfalls mit Leerzeichen von
  7028. links her aufgefuellt (Beispiel: Die Umwandlung der Zahl 10.80 in
  7029. einen String mit einer Gesamtzeichenzahl von 7 fuehrt dazu, dass die
  7030. neue Stringvariable den Inhalt "00010.80" erhaelt). Es erfolgt auto-
  7031. matisch eine Rundung auf die angegebene Zahl von Nachkommastellen.
  7032. Beachten Sie bitte, dass mit diesem Befehl nur Zahlen mit maximal acht
  7033. Vorkommastellen und zehn Nachkommastellen formatiert werden koennen.
  7034.  
  7035. Bespiel    FORM 
  7036.  
  7037. Siehe 
  7038.  
  7039. VAL
  7040. STR
  7041.  
  7042.  
  7043. ΓòÉΓòÉΓòÉ 76. FRAC ΓòÉΓòÉΓòÉ
  7044.  
  7045. Funktion 
  7046.  
  7047. Zerlegt eine Zahl in Vor- und Nachkommastellen.
  7048.  
  7049. Syntax 
  7050.  
  7051. FRAC zahl,vor,nach
  7052.  
  7053. Eingabe 
  7054.  
  7055. zahl        Variable mit der zu bearbeitenden Zahl
  7056.  
  7057. Ausgabe 
  7058.  
  7059. vor         Variable mit den Vorkommastellen als Inhalt
  7060. nach        Variable mit den Nachkommastellen als Inhalt
  7061.  
  7062. Beschreibung 
  7063.  
  7064. Diese Anweisung zerlegt eine beliebige Zahl in Vor- und
  7065. Nachkommastellen. Diese Werte werden getrennt und verschiedenen
  7066. Variablen zugewiesen.
  7067.  
  7068. Bespiel    FRAC 
  7069.  
  7070. Siehe 
  7071.  
  7072.  
  7073. ΓòÉΓòÉΓòÉ 77. GANZ ΓòÉΓòÉΓòÉ
  7074.  
  7075. Funktion 
  7076.  
  7077. Wandel eine numerische Zahl in einen Integer-Wert
  7078.  
  7079. Syntax 
  7080.  
  7081. GANZ, alt  neu
  7082.  
  7083. Eingabe 
  7084.  
  7085. alt             Numerische Zahl
  7086.  
  7087. Ausgabe 
  7088.  
  7089. neu             Ganze Zahl ohne Kommastellen
  7090.  
  7091. Beschreibung 
  7092.  
  7093. Wird ben╨ñtigt um eine Zahlenvariable in ein ganze Zahl
  7094. umzuwandeln
  7095.  
  7096. Bespiel    GANZ 
  7097.  
  7098. Siehe 
  7099.  
  7100.  
  7101. ΓòÉΓòÉΓòÉ 78. GLOBALREAD ΓòÉΓòÉΓòÉ
  7102.  
  7103. Funktion 
  7104.  
  7105. Programm ╨æbergreifende Variablenverwaltung
  7106.  
  7107. Syntax 
  7108.  
  7109. GLOBALREAD  zahl (string)
  7110.  
  7111. Eingabe 
  7112.  
  7113.  
  7114. Ausgabe 
  7115.  
  7116.  
  7117. Beschreibung 
  7118.  
  7119. keine
  7120.  
  7121. Bespiel    GLOBALREAD 
  7122.  
  7123. Siehe 
  7124.  
  7125. RUN
  7126.  
  7127.  
  7128. ΓòÉΓòÉΓòÉ 79. GLOBALWRITE ΓòÉΓòÉΓòÉ
  7129.  
  7130. Funktion 
  7131.  
  7132. Programm ╨æbergreifende Variablenverwaltung
  7133.  
  7134. Syntax 
  7135.  
  7136. GLOBALWRITE zahl (string)
  7137.  
  7138. Eingabe 
  7139.  
  7140.  
  7141. Ausgabe 
  7142.  
  7143.  
  7144. Beschreibung 
  7145.  
  7146. keine
  7147.  
  7148. Bespiel    GLOBALWRITE 
  7149.  
  7150. Siehe 
  7151.  
  7152. GLOBALREAD
  7153.  
  7154.  
  7155. ΓòÉΓòÉΓòÉ 80. IGETREC_ARRAY ΓòÉΓòÉΓòÉ
  7156.  
  7157. Funktion 
  7158.  
  7159. Mehrere Datensaetze werden in ein Array eingelesen.
  7160.  
  7161. Syntax 
  7162.  
  7163. IGETREC_ARRAY nr,flag,trenn$,dbstruct$,array$,start,ende,feldnr1,...
  7164.  
  7165. Eingabe 
  7166.  
  7167. nr      Nummer der entsprechenden Datenbank
  7168. flag    Arbeitsmodus des Befehls:
  7169.         flag = 0:  Es werden die Datensaetze vom aktuellen Datensatz aus
  7170.                    eingelesen, die auf den aktuellen Datensatz folgen.
  7171.         flag = 1:  Es werden die Datensaetze vom aktuellen Datensatz aus
  7172.                    eingelesen, die vor dem aktuellen Datensatz stehen.
  7173. trenn$     Trennzeichen fuer einzelne Felder innerhalb eines Datensatzes
  7174. dbstruct$  Recordstruktur der DB
  7175. array$     Array, in die die Datenbanksaetze eingelesen werden sollen
  7176. start      erste zu fuellende Variable im Array
  7177. ende       letzte zu fuellende Variable im Array
  7178. feldnrx    Felder, die mit Trennzeichen <trenn> in das Array
  7179.            geschrieben werden.
  7180.  
  7181. Ausgabe 
  7182.  
  7183.  
  7184. Beschreibung 
  7185.  
  7186. Es koennen mehrere Datensaetze schnell eingelesen werden. Dieser Befehl
  7187. wurde fuer Ausgabelisten geschaffen.
  7188.  
  7189. Bespiel    IGETREC_ARRAY 
  7190.  
  7191. Siehe 
  7192.  
  7193. IGETREC
  7194.  
  7195.  
  7196. ΓòÉΓòÉΓòÉ 81. IN ΓòÉΓòÉΓòÉ
  7197.  
  7198. Funktion 
  7199.  
  7200. Ermittelt, ob ein Zeichen bzw. eine Zeichenkette in einer
  7201. Stringvariablen vorhanden ist. Das Ergebnis wird als Zahl
  7202. verfuegbar.
  7203.  
  7204. Syntax 
  7205.  
  7206. IN string$,suchstring$,gefunden
  7207.  
  7208. Eingabe 
  7209.  
  7210. string         Stringvariable, in der nach dem Zeichen gesucht wird
  7211. suchstring$    Stringvariable, in der das zu suchende Zeichen vorge-
  7212.                geben ist.
  7213.  
  7214. Ausgabe 
  7215.  
  7216. gefunden       Zahlenvariable, in der das Ergebnis der Suche vermerkt
  7217.                wird.
  7218.  
  7219. Beschreibung 
  7220.  
  7221. Wurde das gesuchte Zeichen gefunden, so wird ueber die Variable
  7222. gefunden die Position des Zeichens im String an das Programm
  7223. zurueckgegeben. Wurde das Zeichen nicht gefunden, erhaelt die
  7224. Variable gefunden den Wert -1.
  7225.  
  7226. Bespiel    IN 
  7227.  
  7228. Siehe 
  7229.  
  7230. CHANGE
  7231. LEN
  7232. STRDEL
  7233.  
  7234.  
  7235. ΓòÉΓòÉΓòÉ 82. INT ΓòÉΓòÉΓòÉ
  7236.  
  7237. Funktion 
  7238.  
  7239. Wandelt eine Dezimalzahl in eine ganze Zahl um.
  7240.  
  7241. Syntax 
  7242.  
  7243. INT zahl,erg
  7244.  
  7245. Eingabe 
  7246.  
  7247. zahl         Umzuwandelnde Zahlenvariable
  7248.  
  7249. Ausgabe 
  7250.  
  7251. erg          Umgewandelte Zahlenvariable
  7252.  
  7253. Beschreibung 
  7254.  
  7255. Dieser Befehl wandelt eine Dezimalzahl in eine ganze Zahl um, indem er
  7256. die Nachkommastellen entfernt. Es wird hierbei keine Rundung durchge-
  7257. fuehrt.
  7258.  
  7259. Bespiel    INT 
  7260.  
  7261. Siehe 
  7262.  
  7263. FORM
  7264. FRAC
  7265. VAL
  7266.  
  7267.  
  7268. ΓòÉΓòÉΓòÉ 83. LCASE ΓòÉΓòÉΓòÉ
  7269.  
  7270. Funktion 
  7271.  
  7272. Verwandelt Grossbuchstaben einer Stringvariablen in Kleinbuchstaben.
  7273.  
  7274. Syntax 
  7275.  
  7276. LCASE string$
  7277.  
  7278. Eingabe 
  7279.  
  7280. string$     Zu veraendernde Stringvariable
  7281.  
  7282. Ausgabe 
  7283.  
  7284. string$     Veraenderte Stringvariable mit Kleinbuchstaben als Inhalt
  7285.  
  7286. Beschreibung 
  7287.  
  7288. Mit diesem Befehl werden in einem Schritt alle Grossbuchstaben einer
  7289. Stringvariable in Kleinbuchstaben umgewandelt. Auf Zahlenvariablen ist
  7290. diese Anweisung natnrlich nicht anwendbar.
  7291.  
  7292. Bespiel    LCASE 
  7293.  
  7294. Siehe 
  7295.  
  7296. IN
  7297. UCASE
  7298.  
  7299.  
  7300. ΓòÉΓòÉΓòÉ 84. LEN ΓòÉΓòÉΓòÉ
  7301.  
  7302. Funktion 
  7303.  
  7304. Ermittelt die Laenge des Inhalts einer Stringvariablen.
  7305.  
  7306. Syntax 
  7307.  
  7308. LEN string$,zahl
  7309.  
  7310. Eingabe 
  7311.  
  7312. string$        Zu pruefende Stringvariable
  7313.  
  7314. Ausgabe 
  7315.  
  7316. zahl           Variable, an die die ermittelte Stringlaenge zurueck-
  7317.                gegeben wird
  7318.  
  7319. Beschreibung 
  7320.  
  7321. Es kann nur die Laenge von Stringvariablen geprueft werden, nicht aber
  7322. die Laenge von Zahlenvariablen. Leer- und Satzzeichen werden bei der
  7323. Laengenermittlung mitgezaehlt.
  7324.  
  7325. Bespiel    LEN 
  7326.  
  7327. Siehe 
  7328.  
  7329. STRDEL
  7330.  
  7331.  
  7332. ΓòÉΓòÉΓòÉ 85. LOADARRAY ΓòÉΓòÉΓòÉ
  7333.  
  7334. Funktion 
  7335.  
  7336. Liest eine Textdatei in ein definiertes Feld.
  7337.  
  7338. Syntax 
  7339.  
  7340. LOADARRAY datei, feld, start,ende, anzahl
  7341.  
  7342. Eingabe 
  7343.  
  7344. datei    Dateiname
  7345. feld    Name des Arrays, in das die Datei geladen wird.
  7346. start    Erstes Feld, in das die Datei geladen wird.
  7347. ende    Letztes Feld, in das die Datei geladen wird.
  7348.  
  7349. Ausgabe 
  7350.  
  7351. anzahl    Anzahl der eingelesenen Zeilen.
  7352.  
  7353. Beschreibung 
  7354.  
  7355. Falls die Anzahl der einzulesenden Zeilen gr╨ñ╤üer w╨öre als das Array,
  7356. dann werden nur soviele Zeilen eingelesen, wie das Array aufnehmen
  7357. kann.
  7358.  
  7359. Bespiel    LOADARRAY 
  7360.  
  7361. Siehe 
  7362.  
  7363. SAVEARRAY
  7364. OPEN
  7365. CLOSE
  7366. GETS_SELECT
  7367. SELECT
  7368.  
  7369.  
  7370. ΓòÉΓòÉΓòÉ 86. LOADMEMO ΓòÉΓòÉΓòÉ
  7371.  
  7372. Funktion 
  7373.  
  7374. Laedt den Inhalt einer Datei in eine Memovariable.
  7375.  
  7376. Syntax 
  7377.  
  7378. LOADMEMO datei, memovariable, ok
  7379.  
  7380. Eingabe 
  7381.  
  7382. datei          Datei mit zu ladendem Inhalt
  7383. memovriable    Memovariable, in die der Dateiinhalt eingefuegt
  7384.                werden soll
  7385.  
  7386. Ausgabe 
  7387.  
  7388. memovariable   Memovariable mit neuem Inhalt
  7389. ok             Variable mit dem Ergebnis der Operation:
  7390.                ok=1:  Dateiinhalt wurde geladen
  7391.                ok=-1: Dateiinhalt konnte nicht geladen werden
  7392.  
  7393. Beschreibung 
  7394.  
  7395. keine
  7396.  
  7397. Bespiel    LOADMEMO 
  7398.  
  7399. Siehe 
  7400.  
  7401. SAVEMEMO
  7402.  
  7403.  
  7404. ΓòÉΓòÉΓòÉ 87. LTRIM ΓòÉΓòÉΓòÉ
  7405.  
  7406. Funktion 
  7407.  
  7408. Entfernt linksbuendige Leerzeichen aus einer Stringvariablen.
  7409.  
  7410. Syntax 
  7411.  
  7412. LTRIM string$
  7413.  
  7414. Eingabe 
  7415.  
  7416. string$         Zu veraendernde Variable
  7417.  
  7418. Ausgabe 
  7419.  
  7420. string$         Veraenderte Variable
  7421.  
  7422. Beschreibung 
  7423.  
  7424. Nur Stringvariablen koennen auf diese Weise formatiert werden,
  7425. nicht jedoch Zahlenvariablen.
  7426.  
  7427. Bespiel    LTRIM 
  7428.  
  7429. Siehe 
  7430.  
  7431. COMPRESS
  7432. COMPRESS2
  7433. SET
  7434. RSET
  7435.  
  7436.  
  7437. ΓòÉΓòÉΓòÉ 88. MID ΓòÉΓòÉΓòÉ
  7438.  
  7439. Funktion 
  7440.  
  7441. Kopiert einen Teil einer Stringvariable in eine andere Stringvariable.
  7442.  
  7443. Syntax 
  7444.  
  7445. MID string$,neu$,anfang,anzahl
  7446.  
  7447. Eingabe 
  7448.  
  7449. string$     Zu kopierender String
  7450. anfang      Position im String, ab der kopiert werden soll
  7451. anzahl      Anzahl der zu kopierenden Zeichen
  7452.  
  7453. Ausgabe 
  7454.  
  7455. neu$        String, in den der Inhalt kopiert wird
  7456.  
  7457. Beschreibung 
  7458.  
  7459. Es kann nur der Inhalt von Stringvariablen kopiert werden, nicht
  7460. jedoch der von Zahlenvariablen.
  7461.  
  7462. Bespiel    MID 
  7463.  
  7464. Siehe 
  7465.  
  7466. CHANGE
  7467. IN
  7468. LEN
  7469. STRDEL
  7470.  
  7471.  
  7472. ΓòÉΓòÉΓòÉ 89. REPLACE ΓòÉΓòÉΓòÉ
  7473.  
  7474. Funktion 
  7475.  
  7476. Tauscht Teile des Inhalts einer Stringvariablen.
  7477.  
  7478. Syntax 
  7479.  
  7480. REPLACE text$, alt$, neu$
  7481.  
  7482. Eingabe 
  7483.  
  7484. text$      Name der Stringvariablen, deren Inhalt veraendert werden soll.
  7485. alt$       Zeichenkette aus text$, die ausgetauscht werden soll
  7486. neu$       Zeichenkette, die anstelle von alt$ in text$ eingefuegt
  7487.            werden soll
  7488.  
  7489. Ausgabe 
  7490.  
  7491. text$      Stringvariable mit neuem Inhalt
  7492.  
  7493. Beschreibung 
  7494.  
  7495. Mit dieser Funktion koennen Sie Teile oder den gesamten Inhalt einer
  7496. Stringvariable austauschen. Geben Sie dazu in der Variablen alt$ den
  7497. Teil des Inhalts der zu veraendernden Variablen text$ vor, der ausge-
  7498. tauscht werden soll. Diese Zeichen werden dann gegen den Inhalt der
  7499. Variablen neu$ getauscht.
  7500.  
  7501. Bespiel    REPLACE 
  7502.  
  7503. Siehe 
  7504.  
  7505. CHANGE
  7506.  
  7507.  
  7508. ΓòÉΓòÉΓòÉ 90. REVERSE ΓòÉΓòÉΓòÉ
  7509.  
  7510. Funktion 
  7511.  
  7512. Dreht den Inhalt einer Variablen
  7513.  
  7514. Syntax 
  7515.  
  7516. REVERSE eingabe, ausgabe
  7517.  
  7518. Eingabe 
  7519.  
  7520. eingabe  Variable deren Inhalt gedreht werden soll.
  7521.  
  7522. Ausgabe 
  7523.  
  7524. ausgabe  Variable mit neuem Inhalt
  7525.  
  7526. Beschreibung 
  7527.  
  7528. keine
  7529.  
  7530.  
  7531. Bespiel    REVERSE 
  7532.  
  7533. Siehe 
  7534.  
  7535.  
  7536. ΓòÉΓòÉΓòÉ 91. RSET ΓòÉΓòÉΓòÉ
  7537.  
  7538. Funktion 
  7539.  
  7540. Formatiert den Inhalt einer Stringvariablen rechtsbuendig.
  7541.  
  7542. Syntax 
  7543.  
  7544. RSET      laenge,string$
  7545.  
  7546. Eingabe 
  7547.  
  7548. laenge    Laenge der Stringvariablen nach der Modifikation
  7549. string$   Eingabestringvariable
  7550.  
  7551. Ausgabe 
  7552.  
  7553. string$   Formatierte Stringvariable
  7554.  
  7555. Beschreibung 
  7556.  
  7557. Mit diesem Befehl wird der Inhalt einer Stringvariablen rechtsbuendig
  7558. mit Leerzeichen aufgefuellt (d.h. links vom urspruenglichen Inhalt
  7559. werden entsprechend viele Leerzeichen angefuegt). Die Laenge des
  7560. formatierten Strings richtet sich nach dem Wert in der Variablen
  7561. laenge. Ist der Inhalt der urspruenglichen Stringvariable kleiner
  7562. oder gleich der so festgelegten Laenge fuer die auszugebende String-
  7563. variable, so wird keine Formatierung durchgefuehrt.
  7564.  
  7565. Bespiel    RSET 
  7566.  
  7567. Siehe 
  7568.  
  7569. SET
  7570. COMPRESS
  7571. COMPRESS2
  7572. LTRIM
  7573.  
  7574.  
  7575. ΓòÉΓòÉΓòÉ 92. SAVEARRAY ΓòÉΓòÉΓòÉ
  7576.  
  7577. Funktion 
  7578.  
  7579. Speichert den Inhalt eines Array in eine Datei.
  7580.  
  7581. Syntax 
  7582.  
  7583. SAVEARRAY datei, feld, start,ende
  7584.  
  7585. Eingabe 
  7586.  
  7587. datei    Dateiname
  7588. feld    Name des zu speichernden Feldes
  7589. start    Erstes Feld,  das gespeichert wird.
  7590. ende    Letztes Feld, das gespeichert wird.
  7591.  
  7592. Ausgabe 
  7593.  
  7594. keine
  7595.  
  7596. Beschreibung 
  7597.  
  7598. nil
  7599.  
  7600. Bespiel    SAVEARRAY 
  7601.  
  7602. Siehe 
  7603.  
  7604. LOADARRAY
  7605. OPEN
  7606. CLOSE
  7607. GETS_SELECT
  7608. SELECT
  7609.  
  7610.  
  7611. ΓòÉΓòÉΓòÉ 93. SAVEMEMO ΓòÉΓòÉΓòÉ
  7612.  
  7613. Funktion 
  7614.  
  7615. Speichert den Inhalt einer Memovariablen wird in eine Datei gespeichert.
  7616.  
  7617. Syntax 
  7618.  
  7619. SAVEMEMO datei, memovariable, ok
  7620.  
  7621. Eingabe 
  7622.  
  7623. datei         Datei, in welcher der Variableninhalt gespeichert
  7624.               werden soll.
  7625. memovariable  Zu speichernde Memovariable
  7626.  
  7627. Ausgabe 
  7628.  
  7629. ok            Variable mit dem Ergebnis des Vorgangs:
  7630.               ok=1:  Variableninhalt konnte gespeichert werden
  7631.               ok=-1: Variableninhalt konnte nicht gespeichert werden
  7632.  
  7633. Beschreibung 
  7634.  
  7635. Mit dieser Anweisung kann der Inhalt einer Variablen in eine Datei
  7636. uebergeben werden. Somit entspricht dieser innerhalb eines Programmes
  7637. vorgenommene Vorgang dem Speichern des Variableninhalts auf Diskette
  7638. oder Festplatte.
  7639. Dieser Befehl kann auch zum Ausdruck von Daten herangezogen werden.
  7640. Wird anstelle eines Dateinamens der Ausdruck "LPT1" (fuer Linear Port 1,
  7641. dem ueblichen Druckerkanal) eingesetzt, so wird der Inhalt der
  7642. Memovariablen direkt zum Drucker umgeleitet und dort ausgegeben.
  7643.  
  7644. Bespiel    SAVEMEMO 
  7645.  
  7646. Siehe 
  7647.  
  7648. LOADMEMO
  7649.  
  7650.  
  7651. ΓòÉΓòÉΓòÉ 94. SELECT ΓòÉΓòÉΓòÉ
  7652.  
  7653. Funktion 
  7654.  
  7655. Zerlegt eine Stringvariable in Teilvariablen bezueglich zu einem
  7656. beliebigen Trennzeichen.
  7657.  
  7658. Syntax 
  7659.  
  7660. SELECT ganz$,ord,s$,n,m
  7661.  
  7662. Eingabe 
  7663.  
  7664. ganz$      Zu zerlegende Stringvariable
  7665. ord        ASCII-Codewert des Trennzeichens, an welchem der Inhalt
  7666.            geteilt wird
  7667. s$         Name der Teilvariablen (Array)
  7668. n          Erste Teilvariable im Array, in die ein Teil des Inhalts
  7669.            geschrieben wird
  7670. m          Letzte Teilvariable im Array, in die ein Teil des Inhalts
  7671.            geschrieben wird.
  7672.  
  7673. Ausgabe 
  7674.  
  7675. sn,...,sm  Teilvariablen
  7676.  
  7677. Beschreibung 
  7678.  
  7679. SELECT teilt den Inhalt einer Stringvariablen auf verschiedene
  7680. Teilvariablen auf. Bei der Teilung richtet sich der Befehl nach
  7681. einem von Ihnen vorgegebenen Trennzeichen. Haben Sie mehr Teil-
  7682. variablen definiert als durch den Vorgang mit Inhalt gefuellt werden
  7683. koennen, so bleiben die ueberzaehligen Teilvariablen leer.
  7684.  
  7685. Bespiel    SELECT 
  7686.  
  7687. Siehe 
  7688.  
  7689. CLEAR
  7690. IN
  7691. MID
  7692. LEN
  7693.  
  7694.  
  7695. ΓòÉΓòÉΓòÉ 95. SET ΓòÉΓòÉΓòÉ
  7696.  
  7697. Funktion 
  7698.  
  7699. Formatiert eine Stringvariable durch Anfuegen von Leerzeichen.
  7700.  
  7701. Syntax 
  7702.  
  7703. SET anzahl,string$
  7704.  
  7705. Eingabe 
  7706.  
  7707. anzahl           Gewuenschte Laenge der formatierten Variablen
  7708. string$          Name der zu formatierenden Variablen
  7709.  
  7710. Ausgabe 
  7711.  
  7712. string$          Formatierte Variable
  7713.  
  7714. Beschreibung 
  7715.  
  7716. Es wird an den Inhalt einer Stringvariablen die notwendige Anzahl von
  7717. Leerstellen angefuegt, um auf die in anzahl vorgegebene Variablenlaenge
  7718. zu kommen (linksbuendige Formatierung im Gegensatz zur rechtsbuendigen
  7719. Formatierung mit RSET). Ist dieser Wert kleiner als die ursprnuegliche
  7720. Laenge der Stringvariablen, so wird der Befehl nicht ausgefuehrt. Die
  7721. Anweisung dient u.a. zur buendigen Anordnung von Variablen in Tabellen.
  7722.  
  7723. Bespiel    SET 
  7724.  
  7725. Siehe 
  7726.  
  7727. COMPRESS
  7728. MID
  7729. LEN
  7730. LPRINT
  7731. RSET
  7732.  
  7733.  
  7734. ΓòÉΓòÉΓòÉ 96. STR ΓòÉΓòÉΓòÉ
  7735.  
  7736. Funktion 
  7737.  
  7738. Wandelt eine Zahlenvariable in eine Stringvariable um.
  7739.  
  7740. Syntax 
  7741.  
  7742. STR string$,zahl,stellen
  7743.  
  7744. Eingabe 
  7745.  
  7746. zahl             Name der umzuwandelnden Zahlenvariablen
  7747. stellen          Laenge des Inhalts der zu erstellenden Stringvariablen
  7748.  
  7749. Ausgabe 
  7750.  
  7751. string$          Name der zu erstellenden Stringvariablen
  7752.  
  7753. Beschreibung 
  7754.  
  7755. Mit diesem Befehl wandeln Sie den Inhalt einer Zahlenvariablen in den
  7756. Inhalt einer Stringvariablen um. Dabei koennen Sie die Laenge der zu er-
  7757. stellenden Stringvariablen festlegen und auf diese Weise zusaetzliche
  7758. Leerzeichen von links her einfuegen oder abtrennen. Im Gegensatz zu FORM
  7759. koennen Sie aber keinen Einfluss auf die Zahl der Nachkommastellen nehmen.
  7760.  
  7761. Bespiel    STR 
  7762.  
  7763. Siehe 
  7764.  
  7765. FORM
  7766. VAL
  7767.  
  7768.  
  7769. ΓòÉΓòÉΓòÉ 97. STRADD ΓòÉΓòÉΓòÉ
  7770.  
  7771. Funktion 
  7772.  
  7773. Verknuepft Textstuecke bzw. den Inhalt von Stringvariablen.
  7774.  
  7775. Syntax 
  7776.  
  7777. STRADD string1$,"Text",string2$,chr(12),...
  7778.  
  7779. Eingabe 
  7780.  
  7781. string1$,...          Namen der zu verknuepfenden Stringvariablen
  7782. text,...              Zu verknuepfender Text
  7783.  
  7784. Ausgabe 
  7785.  
  7786. string$               Name der Stringvariablen mit verknuepftem Inhalt
  7787.  
  7788. Beschreibung 
  7789.  
  7790. Sie koennen beliebig viele Textstuecke bzw. den Inhalt beliebig vieler
  7791. Stringvariablen miteinander verknuepfen. Beachten Sie aber bitte, dass
  7792. der Inhalt der durch die Verknuepfung erzeugten Variable maximal 255
  7793. Zeichen betragen darf. Es koennen auch einzelne Steuerzeichen mit chr()
  7794. angefuegt werden.
  7795.  
  7796. Bespiel    STRADD 
  7797.  
  7798. Siehe 
  7799.  
  7800. LEN
  7801. MID
  7802. STRDEL
  7803.  
  7804.  
  7805. ΓòÉΓòÉΓòÉ 98. STRDEL ΓòÉΓòÉΓòÉ
  7806.  
  7807. Funktion 
  7808.  
  7809. Loescht Teile einer Stringvariablen ab einer beliebigen Stelle.
  7810.  
  7811. Syntax 
  7812.  
  7813. STRDEL string$,anfang,laenge
  7814.  
  7815. Eingabe 
  7816.  
  7817. string$        Name der zu bearbeitenden Stringvariablen
  7818. anfang           Position, ab der geloescht werden soll
  7819. laenge           Laenge des zu loeschenden Teils der Variablen
  7820.  
  7821. Ausgabe 
  7822.  
  7823. string$          Name der Stringvariablen mit gekuerztem Inhalt
  7824.  
  7825. Beschreibung 
  7826.  
  7827. Sie sind hiermit in der Lage, beliebig grosse Teile des Inhalts einer
  7828. Stringvariablen von einer beliebigen Position ab zu loeschen.
  7829.  
  7830. Bespiel    STRDEL 
  7831.  
  7832. Siehe 
  7833.  
  7834. CHANGE
  7835. IN
  7836. LEN
  7837. STRADD
  7838.  
  7839.  
  7840. ΓòÉΓòÉΓòÉ 99. UCASE ΓòÉΓòÉΓòÉ
  7841.  
  7842. Funktion 
  7843.  
  7844. Verwandelt alle Kleinbuchstaben einer Stringvariablen in Grossbuchstaben.
  7845.  
  7846. Syntax 
  7847.  
  7848. UCASE string$
  7849.  
  7850. Eingabe 
  7851.  
  7852. string$         Umzu_ndernde Stringvariable
  7853.  
  7854. Ausgabe 
  7855.  
  7856. string$          Umgewandelte Stringvariable
  7857.  
  7858. Beschreibung 
  7859.  
  7860. Diese Anweisung dient zur Editierung des Inhalts von Stringvariablen.
  7861. Es werden alle Kleinbuchstaben in Grossbuchstaben umgewandelt.
  7862.  
  7863. Bespiel    UCASE 
  7864.  
  7865. Siehe 
  7866.  
  7867. IN
  7868. LCASE
  7869.  
  7870.  
  7871. ΓòÉΓòÉΓòÉ 100. VAL ΓòÉΓòÉΓòÉ
  7872.  
  7873. Funktion 
  7874.  
  7875. Verwandelt eine Stringvariable in eine Zahlenvariable.
  7876.  
  7877. Syntax 
  7878.  
  7879. VAL string$,zahl
  7880.  
  7881. Eingabe 
  7882.  
  7883. string$          Umzuwandelnde Stringvariable
  7884.  
  7885. Ausgabe 
  7886.  
  7887. zahl             Neu erstellte Zahlenvariable
  7888.  
  7889. Beschreibung 
  7890.  
  7891. Sie koennen hiermit Stringvariablen in Zahlenvariablen umwandeln,
  7892. aber nur, wenn der Inhalt der Stringvariablen eindeutig einer Zahl
  7893. zugeordnet werden kann (also bereits eine Zahl ist). Ist der Inhalt
  7894. des Strings z.B. "Hallo", so kann das Programm diesem keine Zahl
  7895. zuordnen. Der Zahlenvariablen wird dann der Wert 0 uebergeben.
  7896.  
  7897. Bespiel    VAL 
  7898.  
  7899. Siehe 
  7900.  
  7901. FORM
  7902. STR
  7903.  
  7904.  
  7905. ΓòÉΓòÉΓòÉ 101. VARNR ΓòÉΓòÉΓòÉ
  7906.  
  7907. Funktion 
  7908.  
  7909. Ermittelt die Interne Variblennr jeder Variable.
  7910.  
  7911. Syntax 
  7912.  
  7913. VARNR variable, zahl
  7914.  
  7915. Eingabe 
  7916.  
  7917. variable      Variable deren Nr. ermittelt werden soll.
  7918.  
  7919. Ausgabe 
  7920.  
  7921. zahl          Nr. der Variable
  7922.  
  7923. Beschreibung 
  7924.  
  7925. keine
  7926.  
  7927. Bespiel    VARNR 
  7928.  
  7929. Siehe 
  7930.  
  7931.  
  7932. ΓòÉΓòÉΓòÉ 102. CALL ΓòÉΓòÉΓòÉ
  7933.  
  7934. Funktion 
  7935.  
  7936. Aktiviert ein zuvor definiertes Modul.
  7937.  
  7938. Syntax 
  7939.  
  7940. CALL name (varein,varaus)
  7941.  
  7942. Eingabe 
  7943.  
  7944. name             Name des zu aktivierenden Moduls
  7945. varein           Name der Eingabevariablen
  7946. varaus           Name der Ausgabevariablen
  7947.  
  7948. Ausgabe 
  7949.  
  7950. varaus           Ausgabevariable
  7951.  
  7952. Beschreibung 
  7953.  
  7954. Mit diesem Befehl aktivieren Sie ein zuvor mit MODUL erstelltes Modul.
  7955. Da Module mit lokalen Variablen arbeiten, muessen Sie eine lokale Ein-
  7956. gabevariable definieren, in die mit CALL ein externer Wert uebergeben
  7957. wird. Das Programm arbeitet intern mit diesem Wert und gibt ihn dann
  7958. gegebenenfalls an eine externe Ausgabevariable zurueck. Sie muessen
  7959. gleichfalls die Art dieser Variablen festlegen. Einer Stringvariablen
  7960. muessen Sie das Kuerzel CHAR voranstellen, einer Zahlenvariablen ein
  7961. FLOAT.
  7962. Nach Abarbeitung des Moduls wird mit dem nach CALL folgenden Befehl
  7963. fortgefahren.
  7964.  
  7965. Bespiel    CALL 
  7966.  
  7967. Siehe 
  7968.  
  7969.  
  7970. ΓòÉΓòÉΓòÉ 103. ENDIF ΓòÉΓòÉΓòÉ
  7971.  
  7972. Funktion 
  7973.  
  7974. Beendet eine Programmverzweigung ueber eine IF-Anweisung.
  7975.  
  7976. Syntax 
  7977.  
  7978. ENDIF
  7979.  
  7980. Eingabe 
  7981.  
  7982. Keine
  7983.  
  7984. Ausgabe 
  7985.  
  7986. Keine
  7987.  
  7988. Beschreibung 
  7989.  
  7990. Jede IF-Anweisung in Ihrem Programm muss mit dem Befehl ENDIF beendet
  7991. werden, sonst kommt es zu Fehlfunktionen.
  7992.  
  7993. Bespiel    ENDIF 
  7994.  
  7995. Siehe 
  7996.  
  7997.  
  7998. ΓòÉΓòÉΓòÉ 104. FOR..TO..NEXT ΓòÉΓòÉΓòÉ
  7999.  
  8000. Funktion 
  8001.  
  8002. Schleife mit einer von vornherein durch einen Endwert festgelegten
  8003. Zahl von Durchlaeufen.
  8004.  
  8005. Syntax 
  8006.  
  8007. NEXT
  8008.  
  8009. Eingabe 
  8010.  
  8011. x      Laufvariable
  8012. y      Wert fuer x, ab der die Schleife durchlaufen wird
  8013.        (Anfangsbedingung)
  8014. z      Wert fuer x, bei der die Schleife zum letzten Mal
  8015.        durchlaufen wird (x=z+1 ist die Abbruchsbedingung)
  8016.  
  8017. Ausgabe 
  8018.  
  8019. Keine
  8020.  
  8021. Beschreibung 
  8022.  
  8023. Die Anweisungen zwischen FOR..TO und NEXT werden z-y-mal durchgefuehrt.
  8024. Bei jedem Durchlaufen der Schleife wird der Wert der Laufvariablen x
  8025. um Eins erhoeht. Sobald x den Wert z+1 erreicht hat, wird die Schleife
  8026. abgebrochen (bei x=z erfolgt der letzte Schleifendurchlauf). Vor der
  8027. Schleife muessen Sie x den Startwert y zuweisen. Sollte x bereits zu
  8028. Beginn den Wert z+1 besitzen, wird die Schleife ueberhaupt nicht
  8029. durchlaufen.
  8030.  
  8031. Bespiel   .TO..NEXT reftype=fn. FOR..TO..NEXT 
  8032.  
  8033. Siehe 
  8034.  
  8035. WHILE__WEND
  8036.  
  8037.  
  8038. ΓòÉΓòÉΓòÉ 105. GOSUB ΓòÉΓòÉΓòÉ
  8039.  
  8040. Funktion 
  8041.  
  8042. Veranlasst einen Sprung in ein Unterprogramm.
  8043.  
  8044. Syntax 
  8045.  
  8046. GOSUB #label
  8047.  
  8048. Eingabe 
  8049.  
  8050. #label        Sprungmarkierung am Anfang des Unterprogramms
  8051.  
  8052. Ausgabe 
  8053.  
  8054. Keine
  8055.  
  8056. Beschreibung 
  8057.  
  8058. Mit GOSUB wird ein Unterprogramm aufgerufen, das sich an der Position
  8059. der Sprungmarke #label befindet. Zwischen dem Labelzeichen # und dem
  8060. Labelnamen darf kein Leerzeichen sein. In einem Programm darf kein
  8061. Labelname zweimal verwendet werden. Ein so angesprungenes Unterprogramm
  8062. wird mit dem Befehl RETURN abgeschlossen, der gewaehrleistet, dass das
  8063. Programm zu seinem Absprungort zurueckkehrt. Oft ist es sinnvoll, Unter-
  8064. programme in INCLUDE-Dateien auszulagern, um eine ungewollte Akti-
  8065. vierung zu vermeiden.
  8066.  
  8067. Bespiel    GOSUB 
  8068.  
  8069. Siehe 
  8070.  
  8071. GOTO
  8072.  
  8073.  
  8074. ΓòÉΓòÉΓòÉ 106. GOTO ΓòÉΓòÉΓòÉ
  8075.  
  8076. Funktion 
  8077.  
  8078. Unbedingter Sprung zu einem Label.
  8079.  
  8080. Syntax 
  8081.  
  8082. GOTO #Label
  8083.  
  8084. Eingabe 
  8085.  
  8086. #Label           Sprungmarke
  8087.  
  8088. Ausgabe 
  8089.  
  8090. Keine
  8091.  
  8092. Beschreibung 
  8093.  
  8094. Es gelten prinzipiell die gleichen Regeln wie bei der Anweisung GOSUB.
  8095. Allerdings veranlasst GOTO einen unbedingten Sprung zu einem anderen
  8096. Programmteil, d.h. es ist keine Rueckkehr zum Ausgangsort ueber ein
  8097. RETURN moeglich. Es wird kein Unterprogramm aktiviert.
  8098.  
  8099. Bespiel    GOTO 
  8100.  
  8101. Siehe 
  8102.  
  8103. GOSUB
  8104.  
  8105.  
  8106. ΓòÉΓòÉΓòÉ 107. IF..THEN..ELSE..ENDIF ΓòÉΓòÉΓòÉ
  8107.  
  8108. Funktion 
  8109.  
  8110. Steuert ueber einen Vergleich die Ausfuehrung bestimmter Befehle
  8111. (Verzweigung).
  8112.  
  8113. Syntax 
  8114.  
  8115. ENDIF
  8116.  
  8117. Eingabe 
  8118.  
  8119. [Vergleich]        Ergebnis des Vergleichs einer Variablen mit einem
  8120.                    bestimmten Vorgabewert.
  8121. [Anweisungsblock]  Alle Befehle, die zwischen THEN und ENDIF
  8122.                    ausgefuehrt werden sollen.
  8123.  
  8124. Ausgabe 
  8125.  
  8126. Keine
  8127.  
  8128. Beschreibung 
  8129.  
  8130. Liefert der Vergleich ein wahres Ergebnis, werden alle Befehle zwischen
  8131. THEN und ENDIF ausgefuehrt. Ist das Ergebnis eine Falschaussage, so wird
  8132. als naechster Befehl die Anweisung nach dem ENDIF ausgefuehrt, oder,
  8133. falls eine ELSE-Anweisung vorhanden ist, der Anweisungsblock nach dem
  8134. ELSE. Beachten Sie bitte, die Anweisung mit ENDIF zu beenden. Es koennen
  8135. mehrere Vergleiche mit Hilfe der logischen Operatoren AND oder OR ver-
  8136. knuepft werden.
  8137.  
  8138. Bespiel   .THEN..ELSE..ENDIF reftype=fn. IF..THEN..ELSE..ENDIF 
  8139.  
  8140. Siehe 
  8141.  
  8142. WHILE__WEND
  8143.  
  8144.  
  8145. ΓòÉΓòÉΓòÉ 108. MODUL..ENDMOD ΓòÉΓòÉΓòÉ
  8146.  
  8147. Funktion 
  8148.  
  8149. Definiert ein Modul.
  8150.  
  8151. Syntax 
  8152.  
  8153. MODUL name (char/float varein, char/float varaus)
  8154.  
  8155. Eingabe 
  8156.  
  8157. name           Name des zu definierenden Moduls
  8158. char/float     Art der Variable (char: String, float: Zahlenvariable)
  8159. varein         Name der Eingabevariablen (oder Platzhalter
  8160. varaus         Name der Ausgabevariablen (oder Platzhalter
  8161.  
  8162. Ausgabe 
  8163.  
  8164. varaus         Ausgabevariable
  8165.  
  8166. Beschreibung 
  8167.  
  8168. Module sind kleine abgekapselte Programme, die intern beliebige
  8169. Anweisungen durchfuehren und das Ergebnis an das Hauptprogramm
  8170. zurueckgeben. Sie eignen sich daher zur Erstellung eigener
  8171. High-Level-Befehle. Module arbeiten mit lokalen Variablen, welche
  8172. nur im Bereich des Moduls Gueltigkeit besitzen, wenn Sie im Modul
  8173. definiert wurden. Es muessen daher Werte von externen, im gesamten
  8174. Programm gueltigen Variablen an interne, im Modul gueltige Variablen
  8175. uebergeben werden. Sie muessen dabei gleichzeitig die Art der ent-
  8176. sprechenden uebergabevariablen festlegen:
  8177. char string         Stringvariable des Namens string
  8178. float zahl          Zahlenvariable des Namens zahl
  8179. Define- und MEMO-Variablen sind immer global (im gesamten Programm
  8180. gueltig) und koennen daher nicht als Uebergabevariablentyp eingesetzt
  8181. werden. Sie koennen aber den Namen eines als uebergabevariable ver-
  8182. wendeten Strings zwischen die Platzhalter  .  setzen. Im Modul wird
  8183. die Stringvariable dann wie eine Feldvariable behandelt.  Im Modul
  8184. definierte Variablen werden dann global, wenn Sie mit einem Under-
  8185. slash definiert wurden, also z.B. DEFFLOAT _zahl.
  8186. Ein Modul muss immer mit der Anweisung ENDMOD beendet werden. Alle
  8187. lokalen
  8188. dem Befehl CALL aufgerufen.
  8189.  
  8190. Bespiel   .ENDMOD reftype=fn. MODUL..ENDMOD 
  8191.  
  8192. Siehe 
  8193.  
  8194. CALL
  8195.  
  8196.  
  8197. ΓòÉΓòÉΓòÉ 109. WHILE..WEND ΓòÉΓòÉΓòÉ
  8198.  
  8199. Funktion 
  8200.  
  8201. Erstellt eine Schleife, die erst durch ein bestimmtes Ereignis
  8202. abgebrochen wird.
  8203.  
  8204. Syntax 
  8205.  
  8206. WEND
  8207.  
  8208. Eingabe 
  8209.  
  8210. a            Laufvariable
  8211. vergl        Vergleichsoperator (=,<,>,<>,<=,>=)
  8212. x            Zahlenvariable bzw. Rechenoperation
  8213.  
  8214. Ausgabe 
  8215.  
  8216. Keine
  8217.  
  8218. Beschreibung 
  8219.  
  8220. Mit WHILE..WEND koennen Schleifen programmiert werden, die bis zum
  8221. Eintreten einer bestimmten Abbruchsbedingung durchlaufen werden.
  8222. Hierbei ist im Gegensatz zu IF..THEN kein Sprungbefehl notwendig.
  8223. Die Schleife wird solange durchlaufen, wie die auf WHILE folgende
  8224. Bedingung erfuellt ist. Ist dies nicht mehr der Fall, fuehrt das
  8225. Programm mit der auf WEND folgenden Anweisung fort. Beachten Sie
  8226. unbedingt, dass innerhalb der Schleife eine Abbruchsmoeglichkeit
  8227. bestehen muss, da sonst eine Endlosschleife entsteht.
  8228.  
  8229. Bespiel   .WEND reftype=fn. WHILE..WEND 
  8230.  
  8231. Siehe 
  8232.  
  8233.  
  8234. ΓòÉΓòÉΓòÉ 110. ACOS ΓòÉΓòÉΓòÉ
  8235.  
  8236. Funktion 
  8237.  
  8238. Berechnet den ArcusCosinus eines vorgegebenen Winkels.
  8239.  
  8240. Syntax 
  8241.  
  8242. ACOS eingabe, ausgabe
  8243.  
  8244. Eingabe 
  8245.  
  8246. Variable mit dem Wert des zu berechnenden Winkels
  8247.  
  8248. Ausgabe 
  8249.  
  8250. Variable mit dem ArcusCosinus des vorgegebenen Winkels
  8251.  
  8252. Beschreibung 
  8253.  
  8254. Mit dieser Funktion berechnen Sie den ArcusCosinus eines Winkels.
  8255. Geben Sie hierzu den numerischen Wert des Winkels ohne Einheit vor.
  8256.  
  8257. Bespiel    ACOS 
  8258.  
  8259. Siehe 
  8260.  
  8261. ASIN
  8262. ATAN
  8263. COS
  8264. SIN
  8265. TAN
  8266.  
  8267.  
  8268. ΓòÉΓòÉΓòÉ 111. ASIN ΓòÉΓòÉΓòÉ
  8269.  
  8270. Funktion 
  8271.  
  8272. Berechnet den ArcusSinus eines vorgegebenen Winkels.
  8273.  
  8274. Syntax 
  8275.  
  8276. ASIN eingabe, ausgabe
  8277.  
  8278. Eingabe 
  8279.  
  8280. eingabe      Variable mit dem Wert des zu berechnenden Winkels
  8281.  
  8282. Ausgabe 
  8283.  
  8284. ausgabe      Variable mit dem ArcusSinus des vorgegebenen Winkels
  8285.  
  8286. Beschreibung 
  8287.  
  8288. Mit dieser Funktion berechnen Sie den ArcusSinus eines Winkels. Geben
  8289. Sie hierzu den numerischen Wert des Winkels ohne Einheit vor.
  8290.  
  8291. Bespiel    ASIN 
  8292.  
  8293. Siehe 
  8294.  
  8295. ACOS
  8296. ATAN
  8297. COS
  8298. SIN
  8299.  
  8300.  
  8301. ΓòÉΓòÉΓòÉ 112. ATAN ΓòÉΓòÉΓòÉ
  8302.  
  8303. Funktion 
  8304.  
  8305. Berechnet den ArcusTangens eines vorgegebenen Winkels.
  8306.  
  8307. Syntax 
  8308.  
  8309. ATAN eingabe, ausgabe
  8310.  
  8311. Eingabe 
  8312.  
  8313. eingabe       Variable mit dem Wert des zu berechnenden Winkels
  8314.  
  8315. Ausgabe 
  8316.  
  8317. ausgabe       Variable mit dem ArcusTangens des vorgegebenen Winkels
  8318.  
  8319. Beschreibung 
  8320.  
  8321. Mit dieser Funktion berechnen Sie den ArcusTangens erines Winkels.
  8322. Geben Sie hierzu den numerischen Wert des Winkels ohne Einheit vor.
  8323.  
  8324. Bespiel    ATAN 
  8325.  
  8326. Siehe 
  8327.  
  8328. ACOS
  8329. ASIN
  8330. COS
  8331. SIN
  8332.  
  8333.  
  8334. ΓòÉΓòÉΓòÉ 113. CALC ΓòÉΓòÉΓòÉ
  8335.  
  8336. Funktion 
  8337.  
  8338. Ermittelt das Ergebnis einer Berechnung mit den Werten
  8339. von zwei Stringvariablen.
  8340.  
  8341. Syntax 
  8342.  
  8343. CALC op$,werta$,wertb$,erg$
  8344.  
  8345. Eingabe 
  8346.  
  8347. op$                Benoetigter Rechenoperator (+,-)
  8348. werta$,wertb$      Strings, deren Inhalte addiert oder
  8349.                    subtrahiert werden sollen.
  8350.  
  8351. Ausgabe 
  8352.  
  8353. erg$               String mit dem Ergebnis der Rechnung
  8354.  
  8355. Beschreibung 
  8356.  
  8357. Der Befehl ermittelt das Ergebnis einer Addition zweier String-
  8358. variablen oder Subtraktion auf zwei Kommastellen genau. Es
  8359. erfolgt keine Rundung des Ergebnisses.
  8360.  
  8361. Bespiel    CALC 
  8362.  
  8363. Siehe 
  8364.  
  8365. SIN
  8366. COS
  8367. TAN
  8368.  
  8369.  
  8370. ΓòÉΓòÉΓòÉ 114. COS ΓòÉΓòÉΓòÉ
  8371.  
  8372. Funktion 
  8373.  
  8374. Berechnet den Cosinus des angegebenen Winkels.
  8375.  
  8376. Syntax 
  8377.  
  8378. COS eingabe, ausgabe
  8379.  
  8380. Eingabe 
  8381.  
  8382. eingabe            Variable mit dem Wert des zu berechnenden Winkels
  8383.  
  8384. Ausgabe 
  8385.  
  8386. ausgabe            Variable mit dem Cosinus des angegebenen Winkels
  8387.  
  8388. Beschreibung 
  8389.  
  8390. Mit dieser Funktion koennen Sie den Cosinus eines Winkels errechnen.
  8391. Geben Sie hierzu den numerischen Wert des Winkels ohne Einheit an.
  8392.  
  8393. Bespiel    COS 
  8394.  
  8395. Siehe 
  8396.  
  8397. ACOS
  8398. ASIN
  8399. ATAN
  8400. SIN
  8401. TAN
  8402.  
  8403.  
  8404. ΓòÉΓòÉΓòÉ 115. EVAL ΓòÉΓòÉΓòÉ
  8405.  
  8406. Funktion 
  8407.  
  8408. Errechnet den Inhalt einer in einer Stringvariablen
  8409. enthaltenen Rechenoperation.
  8410.  
  8411. Syntax 
  8412.  
  8413. EVAL express$,erg
  8414.  
  8415. Eingabe 
  8416.  
  8417. express$   String mit mathematischen Ausdruck
  8418.  
  8419. Ausgabe 
  8420.  
  8421. erg        Variable, in die das Ergebnis der Berechnung uebergeben wird
  8422.  
  8423. Beschreibung 
  8424.  
  8425. Der Befehl berechnet die in der Variable vorgesehene Rechenoperation.
  8426. Das Ergebnis wird in der Variable erg gespeichert und kann auf Wunsch
  8427. angezeigt werden. Folgende Rechenoperationen koennen mit diesem Befehl
  8428. durchgefuehrt werden: Multiplikation, Division, Addition, Subtraktion.
  8429.  
  8430. Bespiel    EVAL 
  8431.  
  8432. Siehe 
  8433.  
  8434.  
  8435. ΓòÉΓòÉΓòÉ 116. SIN ΓòÉΓòÉΓòÉ
  8436.  
  8437. Funktion 
  8438.  
  8439. Berechnet den Sinus eines vorgegebenen Winkels.
  8440.  
  8441. Syntax 
  8442.  
  8443. SIN eingabe, ausgabe
  8444.  
  8445. Eingabe 
  8446.  
  8447. eingabe            Variable mit dem Wert des zu berechnenden Winkels
  8448.  
  8449. Ausgabe 
  8450.  
  8451. ausgabe            Variable mit dem Sinus des vorgegebenen Winkels
  8452.  
  8453. Beschreibung 
  8454.  
  8455. Mit dieser Funktion berechnen Sie den Sinus eines Winkels. Geben Sie
  8456. hierzu den numerischen Wert des Winkels ohne Einheit vor.
  8457.  
  8458. Bespiel    SIN 
  8459.  
  8460. Siehe 
  8461.  
  8462. ACOS
  8463. ASIN
  8464. ATAN
  8465. COS
  8466.  
  8467.  
  8468. ΓòÉΓòÉΓòÉ 117. SQRT ΓòÉΓòÉΓòÉ
  8469.  
  8470. Funktion 
  8471.  
  8472. Gibt Wurzel aus Zahl zur╨æck.
  8473.  
  8474. Syntax 
  8475.  
  8476. SQRT zahl, erg
  8477.  
  8478. Eingabe 
  8479.  
  8480. zahl
  8481.  
  8482. Ausgabe 
  8483.  
  8484. erg
  8485.  
  8486. Beschreibung 
  8487.  
  8488. keine
  8489.  
  8490. Bespiel    SQRT 
  8491.  
  8492. Siehe 
  8493.  
  8494.  
  8495. ΓòÉΓòÉΓòÉ 118. TAN ΓòÉΓòÉΓòÉ
  8496.  
  8497. Funktion 
  8498.  
  8499. Berechnet den Tangens eines vorgegebenen Winkels.
  8500.  
  8501. Syntax 
  8502.  
  8503. TAN eingabe, ausgabe
  8504.  
  8505. Eingabe 
  8506.  
  8507. eingabe            Variable mit dem Wert des zu berechnenden Winkels
  8508.  
  8509. Ausgabe 
  8510.  
  8511. ausgabe            Variable mit dem Tangens des vorgegebenen Winkels
  8512.  
  8513. Beschreibung 
  8514.  
  8515. Mit dieser Funktion berechnen Sie den Tangens eines Winkels. Geben Sie
  8516. hierzu den numerischen Wert des Winkels ohne Einheit vor.
  8517.  
  8518. Bespiel    TAN 
  8519.  
  8520. Siehe 
  8521.  
  8522. ACOS
  8523. ASIN
  8524. ATAN
  8525. COS
  8526.  
  8527.  
  8528. ΓòÉΓòÉΓòÉ 119. LPRINT ΓòÉΓòÉΓòÉ
  8529.  
  8530. Funktion 
  8531.  
  8532. Gibt Variablen bzw. Zeichenketten auf dem Drucker aus.
  8533.  
  8534. Syntax 
  8535.  
  8536. LPRINT "Text",zahl,string$
  8537.  
  8538. Eingabe 
  8539.  
  8540. "Text",zahl,string$           Auszudruckender Text bzw. Variablen
  8541.  
  8542. Ausgabe 
  8543.  
  8544. Keine
  8545.  
  8546. Beschreibung 
  8547.  
  8548. Mit der LPRINT-Anweisung koennen Sie beliebigen Text oder Inhalt von
  8549. Zahlen- oder Stringvariablen ausdrucken lassen. Reihenfolge und An-
  8550. zahl der Parameter sind beliebig. Die Trenueung der einzelnen Ausgabe-
  8551. werte erfolgt durch Komma oder Strichpunkt. Bei Verwendung des Strich-
  8552. punkts als Trennzeichen fuegt LPRINT zwischen den beiden Parametern
  8553. 8 Leerzeichen ein. Zwischen dem LPRINT-Befehl und dem ersten Anfuehrungs-
  8554. zeichen muss unbedingt ein Leerzeichen stehen. Steuerzeichen werden mit
  8555. dem Befehl CHR an den Drucker uebergeben.
  8556.  
  8557. Bespiel    LPRINT 
  8558.  
  8559. Siehe 
  8560.  
  8561. CHR
  8562. FORM
  8563. STR
  8564.  
  8565.  
  8566. ΓòÉΓòÉΓòÉ 120. PRNCHANGE ΓòÉΓòÉΓòÉ
  8567.  
  8568. Funktion 
  8569.  
  8570. Tauscht Zeichen aus einer Tabelle aus (Druckertreiber).
  8571.  
  8572. Syntax 
  8573.  
  8574. PRNCHANGE array,start,ende
  8575.  
  8576. Eingabe 
  8577.  
  8578. array    Name des Feldes, in welchem Zeichen ausgetauscht werden sollen
  8579. start    Startvariable im Feld, von der aus der Tausch beginueen soll
  8580. ende     Schlussvaribale im Feld, bei der der Tausch beendet werden soll
  8581.  
  8582. Ausgabe 
  8583.  
  8584. Keine
  8585.  
  8586. Beschreibung 
  8587.  
  8588. Mit diesem Befehl koennen Sie Zeichen aus der ASCII-Tabelle austauschen.
  8589. Die Anweisung wirkt nur auf die Befehle PRINT und LPRINT. PRNCHANGE
  8590. wird zur Erstellung von Druckertreibern fuer Drucker herangezogen, deren
  8591. interne Zeichentabelle nicht mit dem IBM-ASCII-Code identisch ist.
  8592.  
  8593. Bespiel    PRNCHANGE 
  8594.  
  8595. Siehe 
  8596.  
  8597. LPRINT
  8598.  
  8599.  
  8600. ΓòÉΓòÉΓòÉ 121. DBFIELDS ΓòÉΓòÉΓòÉ
  8601.  
  8602. Funktion 
  8603.  
  8604. ************************ UNBEKANNT **********************
  8605.  
  8606. Syntax 
  8607.  
  8608.  
  8609. Eingabe 
  8610.  
  8611.  
  8612.  
  8613. Ausgabe 
  8614.  
  8615.  
  8616.  
  8617. Beschreibung 
  8618.  
  8619. ************************ UNBEKANNT **********************
  8620.  
  8621. Bespiel    DBFIELDS 
  8622.  
  8623. Siehe 
  8624.  
  8625.  
  8626. ΓòÉΓòÉΓòÉ 122. IADD ΓòÉΓòÉΓòÉ
  8627.  
  8628. Funktion 
  8629.  
  8630. fuegt einer Datenbank einen Datensatz hinzu.
  8631.  
  8632. Syntax 
  8633.  
  8634. IADD nr,s$
  8635.  
  8636. Eingabe 
  8637.  
  8638. nr         Nummer der entsprechenden Datenbank
  8639. s$         Recordstruktur, ueber die die Daten eingegeben werden sollen
  8640.  
  8641. Ausgabe 
  8642.  
  8643. Keine
  8644.  
  8645. Beschreibung 
  8646.  
  8647. Der angefuegte Datensatz wird intern sofort durch die Indexdateien
  8648. richtig in die Datenbank einsortiert. Der neue Datensatz wird also
  8649. in Abhaengigkeit vom aktivierten Index an unterschiedlichen Stellen
  8650. in die Datenbank eingefuegt. Durch IADD wird der Datenbankanzeiger
  8651. automatisch auf den hinzugefuegten Datensatz gestellt, dieser wird
  8652. also der aktuelle Datensatz.
  8653.  
  8654. Bespiel    IADD 
  8655.  
  8656. Siehe 
  8657.  
  8658.  
  8659. ΓòÉΓòÉΓòÉ 123. ICLOSE ΓòÉΓòÉΓòÉ
  8660.  
  8661. Funktion 
  8662.  
  8663. Schliesst eine geoeffnete Datenbank.
  8664.  
  8665. Syntax 
  8666.  
  8667. ICLOSE nr
  8668.  
  8669. Eingabe 
  8670.  
  8671. nr           Nummer der entsprechenden Datenbank
  8672.  
  8673. Ausgabe 
  8674.  
  8675. Keine
  8676.  
  8677. Beschreibung 
  8678.  
  8679. Ausser der entsprechenden Datenbank werden alle zugehoerigen
  8680. Indexdateien geschlossen. Dabei werden alle Pufferinhalte
  8681. auf eine Festplatte oder eine Diskette geschrieben. Wenn Sie
  8682. als Datenbanknummer die Zahl 99 angeben, werden alle geoeffneten
  8683. Datenbank- und Indexdateien geschlossen.
  8684.  
  8685. Bespiel    ICLOSE 
  8686.  
  8687. Siehe 
  8688.  
  8689.  
  8690. ΓòÉΓòÉΓòÉ 124. ICLOSE_INDEX ΓòÉΓòÉΓòÉ
  8691.  
  8692. Funktion 
  8693.  
  8694. Indexdateien einer Datenbank werden geschlossen.
  8695.  
  8696. Syntax 
  8697.  
  8698. ICLOSE_INDEX nr
  8699.  
  8700. Eingabe 
  8701.  
  8702. nr          Nummer der entsprechenden Datenbank
  8703.  
  8704. Ausgabe 
  8705.  
  8706. Keine
  8707.  
  8708. Beschreibung 
  8709.  
  8710. Dieser Befehl schliesst alle Indexdateien einer geoeffneten Datenbank.
  8711.  
  8712. Bespiel    ICLOSE_INDEX 
  8713.  
  8714. Siehe 
  8715.  
  8716.  
  8717. ΓòÉΓòÉΓòÉ 125. ICREATE ΓòÉΓòÉΓòÉ
  8718.  
  8719. Funktion 
  8720.  
  8721. Erstellt eine neue Datenbank.
  8722.  
  8723. Syntax 
  8724.  
  8725. ICREATE name$,def_felder$,def_index$
  8726.  
  8727. Eingabe 
  8728.  
  8729. name$         Name der Datenbank (ohne DOS-Endung), darf maximal
  8730.               8 Zeichen betragen (auch Pfadangabe moeglich)
  8731. def_felder$   Array mit der Definition der Feldstruktur der Datenbank
  8732. def_index$    Array mit der Definition der Indexstruktur des
  8733.               Basisindizes
  8734.  
  8735. Ausgabe 
  8736.  
  8737. Keine
  8738.  
  8739. Beschreibung 
  8740.  
  8741. Durch diesen Befehl wird eine bestehende Datenbank gleichen Namens
  8742. ueberschrieben!  Die Datenbank muss anschliessend mit IOPEN geoeffnet
  8743. werden. Der Basisindex traegt den gleichen Namen wie die Datenbank.
  8744. Zusaetzlich muessen Sie die Arrays angeben, in denen die Feld- und
  8745. die Indexstruktur der Datenbank verzeichnet sind. Beispiel (es duerfen
  8746. keine Tabulatoren verwendet werden!!!):
  8747. Datenbank erstellen mit ICREATE
  8748. DIM feld,1,4
  8749. DIM index,1,3
  8750. rem      Name      Typ     Laenge   Dezimalstellen
  8751. feld1="  NAME     , C  ,    20   ,         0"
  8752. feld2="  STRASSE  , C  ,    50   ,         0"
  8753. feld3="  ORT      , C  ,    30   ,         0"
  8754. feld4=""
  8755. rem       Name    Ausdruck  Filter    Unique  Auf/Abst.
  8756. index1="Name_tag, NAME, .NOT.DELETED,  0  ,    0"
  8757. index2="Ort_tag,  ORT,  .NOT.DELETED,  0  ,    0"
  8758. index3=""
  8759. icreate "dateiname",feld,index
  8760.  
  8761. Bespiel    ICREATE 
  8762.  
  8763. Siehe 
  8764.  
  8765.  
  8766. ΓòÉΓòÉΓòÉ 126. IDEL ΓòÉΓòÉΓòÉ
  8767.  
  8768. Funktion 
  8769.  
  8770. Loescht einen Datensatz aus der aktuellen Datenbank.
  8771.  
  8772. Syntax 
  8773.  
  8774. IDEL nr
  8775.  
  8776. Eingabe 
  8777.  
  8778. nr      Nummer der entsprechenden Datenbank
  8779.  
  8780. Ausgabe 
  8781.  
  8782. Keine
  8783.  
  8784. Beschreibung 
  8785.  
  8786. Loescht den aktuellen Datensatz und setzt den Datenbanksatzzeiger auf
  8787. den naechsten Datensatz (Der Datensatz wird analog zu dBASE nur als
  8788. geloescht markiert und kann mit IUNDEL wieder zurueckgeholt werden).
  8789.  
  8790. Bespiel    IDEL 
  8791.  
  8792. Siehe 
  8793.  
  8794. IDELCHECK
  8795. IUNDEL
  8796.  
  8797.  
  8798. ΓòÉΓòÉΓòÉ 127. IDELCHECK ΓòÉΓòÉΓòÉ
  8799.  
  8800. Funktion 
  8801.  
  8802. Prueft, ob ein Datensatz als geloescht markiert wurde.
  8803.  
  8804. Syntax 
  8805.  
  8806. IDELCHECK nr, ok
  8807.  
  8808. Eingabe 
  8809.  
  8810. nr      Nummer der entsprechenden Datenbank
  8811. ok      Variable, in die das Ergebnis der Suche uebergeben wird:
  8812.         ok=0 = Datensatz ist als geloescht markiert
  8813.         ok <>0 = Datensatz ist als nicht geloescht markiert
  8814.  
  8815. Ausgabe 
  8816.  
  8817.  
  8818. Beschreibung 
  8819.  
  8820. Datensatzmarkierung kann mit IUNDEL aufgehoben werden.
  8821.  
  8822. Bespiel    IDELCHECK 
  8823.  
  8824. Siehe 
  8825.  
  8826.  
  8827. ΓòÉΓòÉΓòÉ 128. IENDE ΓòÉΓòÉΓòÉ
  8828.  
  8829. Funktion 
  8830.  
  8831. Setzt den Datenbanksatzzeiger der entsprechenden Datenbank auf den
  8832. letzten Datensatz bezueglich des aktuellen Index.
  8833.  
  8834. Syntax 
  8835.  
  8836. IENDE nr,s$
  8837.  
  8838. Eingabe 
  8839.  
  8840. nr        Nummer der entsprechenden Datenbank
  8841.  
  8842. Ausgabe 
  8843.  
  8844. s$        Recordstruktur, in der der aktuelle Datensatz
  8845.           angezeigt werden soll
  8846.  
  8847. Beschreibung 
  8848.  
  8849. Hiermit wird der letzte Datensatz zum aktuellen Datensatz und in der
  8850. Recordstruktur angezeigt. Falls sich kein Datensatz in der Datenbank
  8851. befindet, erhalten Sie eine entsprechende Fehlermeldung.
  8852.  
  8853. Bespiel    IENDE 
  8854.  
  8855. Siehe 
  8856.  
  8857. ISTART
  8858. IPREV
  8859. INEXT
  8860.  
  8861.  
  8862. ΓòÉΓòÉΓòÉ 129. IENDEREL ΓòÉΓòÉΓòÉ
  8863.  
  8864. Funktion 
  8865.  
  8866. Der Datensatzzeiger wird auf das Ende der Masterdatenbank gesetzt.
  8867.  
  8868. Syntax 
  8869.  
  8870. IENDEREL relnr, structmaster, structslave
  8871.  
  8872. Eingabe 
  8873.  
  8874. relnr            Kennummer (Handle) der Relation
  8875.                  (Master- und Slave-Datenbank)
  8876.  
  8877. Ausgabe 
  8878.  
  8879. structmaster     Datensatzinhalt (aus Masterdatenbank)
  8880. structslave      Datensatzinhalt (aus Slavedatenbank)
  8881.  
  8882. Beschreibung 
  8883.  
  8884. Der Befehl entspricht dem Befehl IENDE, nur dass er allgemeiner auf
  8885. Relationen verknuepfter Datenbanken angewandt werden kann.
  8886.  
  8887. Bespiel    IENDEREL 
  8888.  
  8889. Siehe 
  8890.  
  8891.  
  8892. ΓòÉΓòÉΓòÉ 130. IEXITREL ΓòÉΓòÉΓòÉ
  8893.  
  8894. Funktion 
  8895.  
  8896. Eine Relation wird beendet.
  8897.  
  8898. Syntax 
  8899.  
  8900. IEXITREL relnr
  8901.  
  8902. Eingabe 
  8903.  
  8904. relnr     Kennummer (Handle) der Relation (Master- und Slave-Datenbank)
  8905.  
  8906. Ausgabe 
  8907.  
  8908. keine
  8909.  
  8910. Beschreibung 
  8911.  
  8912. Eine mit ISETREL definierte Relation wird wieder aufgehoben.
  8913.  
  8914. Bespiel    IEXITREL 
  8915.  
  8916. Siehe 
  8917.  
  8918.  
  8919. ΓòÉΓòÉΓòÉ 131. IGET_NR ΓòÉΓòÉΓòÉ
  8920.  
  8921. Funktion 
  8922.  
  8923. Ermittelt die Nummer des aktuellen Datensatzes.
  8924.  
  8925. Syntax 
  8926.  
  8927. IGET_NR dbnr, pos
  8928.  
  8929. Eingabe 
  8930.  
  8931. dbnr           Kennummer der entsprechenden Datenbank
  8932.  
  8933. Ausgabe 
  8934.  
  8935. pos            Variable mit Nummer des aktuellen Datensatzes
  8936.  
  8937. Beschreibung 
  8938.  
  8939. Bei der Einfuegung in eine Datenbank erhaelt jeder Datensatz automatisch
  8940. eine interne Nummer, welche er fuer immer behaelt, gleichgueltig, nach
  8941. welchem Index die Datenbank sortiert ist. ueber diese Nummer laesst sich
  8942. ein Datensatz mit IGO_NR heraussuchen. Der Befehl IGET_NR ermittelt
  8943. die Nummer des aktuellen Datensatzes.
  8944.  
  8945. Bespiel    IGET_NR 
  8946.  
  8947. Siehe 
  8948.  
  8949. IGO_NR
  8950.  
  8951.  
  8952. ΓòÉΓòÉΓòÉ 132. IGETREC ΓòÉΓòÉΓòÉ
  8953.  
  8954. Funktion 
  8955.  
  8956. Liest einen Datensatz aus einer geoeffneten Datenbank
  8957. in eine Recordstruktur.
  8958.  
  8959. Syntax 
  8960.  
  8961. IGETREC nr,s$
  8962.  
  8963. Eingabe 
  8964.  
  8965. nr        Nummer der entsprechenden Datenbank
  8966.  
  8967. Ausgabe 
  8968.  
  8969. s$        Recordstruktur, in der der Datensatz angezeigt werden soll.
  8970.  
  8971. Beschreibung 
  8972.  
  8973. Mit dieser Anweisung werden die Werte des aktuellen Datensatzes in die
  8974. entsprechenden Feldvariablen der Recordstruktur geladen.
  8975.  
  8976. Bespiel    IGETREC 
  8977.  
  8978. Siehe 
  8979.  
  8980. IGETREC_ARRAY
  8981.  
  8982.  
  8983. ΓòÉΓòÉΓòÉ 133. IGETSTRUCT ΓòÉΓòÉΓòÉ
  8984.  
  8985. Funktion 
  8986.  
  8987. Der Aufbau einer Datenbank wird ermittelt.
  8988.  
  8989. Syntax 
  8990.  
  8991. IGETSTRUCT nr,def_felder$,def_index$,zahl
  8992.  
  8993. Eingabe 
  8994.  
  8995. nr               Nummer der entsprechenden Datenbank
  8996.  
  8997. Ausgabe 
  8998.  
  8999. def_felder$      Array mit der Feldstruktur
  9000. def_index$       Array mit der Basisindex-Struktur
  9001. zahl             Anzahl der Feldnamen
  9002.  
  9003. Beschreibung 
  9004.  
  9005. Der Aufbau der Rueckgabewerte entspricht denen, die bei der Erstellung
  9006. einer Datenbank mit ICREATE vorgegeben wurden. Somit laesst sich die
  9007. Struktur der Datenbank genau nachvollziehen.
  9008.  
  9009. Bespiel    IGETSTRUCT 
  9010.  
  9011. Siehe 
  9012.  
  9013.  
  9014. ΓòÉΓòÉΓòÉ 134. IGO_NR ΓòÉΓòÉΓòÉ
  9015.  
  9016. Funktion 
  9017.  
  9018. Bewegt den Datensatzzeiger zum Datensatz mit der angegebenen Nummer.
  9019.  
  9020. Syntax 
  9021.  
  9022. IGO_NR dbnr, pos
  9023.  
  9024. Eingabe 
  9025.  
  9026. dbnr      Kennummer der entsprechenden Datenbank
  9027. pos       Variable mit Nummer des gewuenschten Datensatzes
  9028.  
  9029. Ausgabe 
  9030.  
  9031. Keine
  9032.  
  9033. Beschreibung 
  9034.  
  9035. Bei der Einfuegung in eine Datenbank erhaelt jeder Datensatz automatisch
  9036. eine interne Nummer, welche er behaelt, gleichgueltig, nach welchem Index
  9037. die Datenbank sortiert ist. ueber diese Nummer laesst sich ein Datensatz
  9038. mit IGO_NR heraussuchen.
  9039.  
  9040. Bespiel    IGO_NR 
  9041.  
  9042. Siehe 
  9043.  
  9044. IGET_NR
  9045.  
  9046.  
  9047. ΓòÉΓòÉΓòÉ 135. ILEN ΓòÉΓòÉΓòÉ
  9048.  
  9049. Funktion 
  9050.  
  9051. Ermittelt die Anzahl der Datensaetze in einer geoeffneten Datenbank.
  9052.  
  9053. Syntax 
  9054.  
  9055. ILEN nr,laenge
  9056.  
  9057. Eingabe 
  9058.  
  9059. nr          Nummer der entsprechenden Datenbank
  9060.  
  9061. Ausgabe 
  9062.  
  9063. laenge      Variable, in die die Anzahl der Datensaetze uebergeben wird
  9064.  
  9065. Beschreibung 
  9066.  
  9067. Nichts
  9068.  
  9069. Bespiel    ILEN 
  9070.  
  9071. Siehe 
  9072.  
  9073.  
  9074. ΓòÉΓòÉΓòÉ 136. ILOCK ΓòÉΓòÉΓòÉ
  9075.  
  9076. Funktion 
  9077.  
  9078. Sperrt den aktuellen Datensatz fuer den Zugriff anderer Anwender.
  9079.  
  9080. Syntax 
  9081.  
  9082. ILOCK nr,ok
  9083.  
  9084. Eingabe 
  9085.  
  9086. nr         Nummer der entsprechenden Datenbank
  9087.  
  9088. Ausgabe 
  9089.  
  9090. ok         Rueckgabemeldung, ob der Datensatz bereits gesperrt ist:
  9091.            ok<>50    Der Datensatz kann gesperrt werden
  9092.            ok=-50    Der Datensatz ist bereits gesperrt
  9093.  
  9094. Beschreibung 
  9095.  
  9096. Dieser Befehl ist nur in der Netzwerkversion von KIM verfuegbar.
  9097. Er sperrt den aktuellen Datensatz einer geoeffneten Datenbank fuer
  9098. den gleichzeitigen Zugriff durch andere Netzwerkteilnehmer. Falls
  9099. der Datensatz bereits gesperrt ist, wird der Variablen ok intern
  9100. der Wert 50 zugewiesen. Es erscheint dann ein Meldungsfenster mit
  9101. der entsprechenden Mitteilung.
  9102.  
  9103. Bespiel    ILOCK 
  9104.  
  9105. Siehe 
  9106.  
  9107. IUNLOCK
  9108.  
  9109.  
  9110. ΓòÉΓòÉΓòÉ 137. IMAKEINDEX ΓòÉΓòÉΓòÉ
  9111.  
  9112. Funktion 
  9113.  
  9114. Erstellt nachtraeglich einen Index zu einer Datenbank.
  9115.  
  9116. Syntax 
  9117.  
  9118. IMAKEINDEX nr,datei$,index$
  9119.  
  9120. Eingabe 
  9121.  
  9122. nr        Nummer der entsprechenden Datenbank
  9123. datei$    Name der neuen Indexdatei (Bitte ohne Endung)
  9124. index$    Array mit der neuen Indexstruktur
  9125.  
  9126. Ausgabe 
  9127.  
  9128. Keine
  9129.  
  9130. Beschreibung 
  9131.  
  9132. Dieser Befehl bietet die Option, einen Index nicht nur bei der
  9133. Erstellung der Datenbank mit ICREATE zu definieren, sondern auch
  9134. nachtraeglich zu jedem beliebigen Zeitpunkt. Eine bestehende Index-
  9135. datei mit gleichen Namen muss zuerst geloescht werden ( mit KILL).
  9136. Es koennen je Indexdatei mehrere Subindizes definiert werden.
  9137.  
  9138. Bespiel    IMAKEINDEX 
  9139.  
  9140. Siehe 
  9141.  
  9142.  
  9143. ΓòÉΓòÉΓòÉ 138. IMODREC ΓòÉΓòÉΓòÉ
  9144.  
  9145. Funktion 
  9146.  
  9147. Aendert den aktuellen Datensatz einer Datenbank.
  9148.  
  9149. Syntax 
  9150.  
  9151. IMODREC nr, s$
  9152.  
  9153. Eingabe 
  9154.  
  9155. nr      Kennummer der entsprechenden Datenbank
  9156.  
  9157. Ausgabe 
  9158.  
  9159. s$      Recordstruktur, in der der geaenderte Datensatz angezeigt wird
  9160.  
  9161. Beschreibung 
  9162.  
  9163. Der aktuelle Datensatz wird mit dieser Anweisung ueberschrieben.
  9164.  
  9165. Bespiel    IMODREC 
  9166.  
  9167. Siehe 
  9168.  
  9169. IADD
  9170.  
  9171.  
  9172. ΓòÉΓòÉΓòÉ 139. INEXT ΓòÉΓòÉΓòÉ
  9173.  
  9174. Funktion 
  9175.  
  9176. Setzt den Datenbanksatzzeiger auf den naechsten Datensatz
  9177. bezueglich des aktuellen Index.
  9178.  
  9179. Syntax 
  9180.  
  9181. INEXT nr,pos,s$
  9182.  
  9183. Eingabe 
  9184.  
  9185. nr       Nummer der entsprechenden Datenbank
  9186.  
  9187. Ausgabe 
  9188.  
  9189. pos      Rueckgabevariable fuer die neue Position des Datenbanksatz-
  9190.          zeigers. Ist der Dateianfang erreicht, wird pos=4 ans Programm
  9191.          zurueckgegeben. Ist das Dateiende erreicht, wird pos der Wert 3
  9192.          zugewiesen.
  9193. s$       Recordstruktur, in die der neue Datensatz geladen wird.
  9194.  
  9195. Beschreibung 
  9196.  
  9197. Mit INEXT wird der naechste Datensatz nach dem aktuellen Satz aktiviert,
  9198. wobei sich KIM an dem aktuellen Index orientiert. Falls das Dateiende
  9199. erreicht ist, wird der Datenbanksatzzeiger nicht weiter verstellt, der
  9200. letzte Datensatz bleibt aktiviert.
  9201.  
  9202. Bespiel    INEXT 
  9203.  
  9204. Siehe 
  9205.  
  9206. ISTART
  9207. IENDE
  9208. IPREV
  9209. ISKIP
  9210.  
  9211.  
  9212. ΓòÉΓòÉΓòÉ 140. INEXTREL ΓòÉΓòÉΓòÉ
  9213.  
  9214. Funktion 
  9215.  
  9216. Der Datensatzzeiger  auf den naechsten
  9217. Datensatz der Masterdatenbank gesetzt
  9218.  
  9219. Syntax 
  9220.  
  9221. INEXTREL relnr,ok, structmaster, structslave
  9222.  
  9223. Eingabe 
  9224.  
  9225. relnr         Kennummer (Handle) der Relation
  9226.               (Master- und Slavedatenbank)
  9227.  
  9228. Ausgabe 
  9229.  
  9230. ok            Werte entsprechen der Variablen pos bei dem Befehl INEXT.
  9231. structmaster  Datensatzinhalt der Masterdatenbank
  9232. structslave   Datensatzinhalt der Slavedatenbank
  9233.  
  9234. Beschreibung 
  9235.  
  9236. Der Befehl entspricht dem Befehl INEXT, nur ist er allgemeiner auf
  9237. Relationen anwendbar.
  9238.  
  9239. Bespiel    INEXTREL 
  9240.  
  9241. Siehe 
  9242.  
  9243.  
  9244. ΓòÉΓòÉΓòÉ 141. IOPEN ΓòÉΓòÉΓòÉ
  9245.  
  9246. Funktion 
  9247.  
  9248. oeffnet eine bestehende Datenbank.
  9249.  
  9250. Syntax 
  9251.  
  9252. IOPEN nr,datei
  9253.  
  9254. Eingabe 
  9255.  
  9256. nr            Nummer der entsprechenden Datenbank
  9257. datei         Name der entsprechenden Datenbank
  9258.  
  9259. Ausgabe 
  9260.  
  9261. Keine
  9262.  
  9263. Beschreibung 
  9264.  
  9265. Voraussetzung fuer diesen Befehls ist das Vorhandensein einer Daten-
  9266. bank. Mit IOPEN wird die Datenbank fuer den Zugriff durch andere Daten-
  9267. bankbefehle aktiviert. Eine geoeffnete Datei sollte am Ende des Pro-
  9268. gramms mit ICLOSE wieder geschlossen werden. Die Indexdateien muessen
  9269. mit IOPEN_INDEX geoeffnet werden.
  9270.  
  9271. Bespiel    IOPEN 
  9272.  
  9273. Siehe 
  9274.  
  9275.  
  9276. ΓòÉΓòÉΓòÉ 142. IOPEN_INDEX ΓòÉΓòÉΓòÉ
  9277.  
  9278. Funktion 
  9279.  
  9280. Eine Indexdatei wird geoeffnet.
  9281.  
  9282. Syntax 
  9283.  
  9284. IOPEN_INDEX nr,datei$
  9285.  
  9286. Eingabe 
  9287.  
  9288. nr            Nummer der entsprechenden Datenbank
  9289. datei$        Zu oeffnende Indexdatei
  9290.  
  9291. Ausgabe 
  9292.  
  9293.  
  9294. Beschreibung 
  9295.  
  9296. Neben einer geoeffneten Indexdatei koennen noch weitere Indexdateien
  9297. geoeffnet werden.
  9298.  
  9299. Bespiel    IOPEN_INDEX 
  9300.  
  9301. Siehe 
  9302.  
  9303. ICLOSE_INDEX
  9304.  
  9305.  
  9306. ΓòÉΓòÉΓòÉ 143. IPACK ΓòÉΓòÉΓòÉ
  9307.  
  9308. Funktion 
  9309.  
  9310. Geloeschte Datensaetze werden aus der Datenbank entfernt.
  9311.  
  9312. Syntax 
  9313.  
  9314. IPACK nr
  9315.  
  9316. Eingabe 
  9317.  
  9318. nr         Nummer der entsprechenden Datenbank
  9319.  
  9320. Ausgabe 
  9321.  
  9322. Keine
  9323.  
  9324. Beschreibung 
  9325.  
  9326. Mit diesem Befehl werden alle als geloescht markierten Datensaetze aus
  9327. der Datenbank entfernt. Danach koennen sie nicht mehr mit IUNDEL zurueck-
  9328. geholt werden.
  9329.  
  9330. Bespiel    IPACK 
  9331.  
  9332. Siehe 
  9333.  
  9334. IREINDEX
  9335.  
  9336.  
  9337. ΓòÉΓòÉΓòÉ 144. IPREV ΓòÉΓòÉΓòÉ
  9338.  
  9339. Funktion 
  9340.  
  9341. Setzt den Datenbanksatzzeiger auf den vorhergehenden
  9342. Datensatz bezueglich des aktuellen Index.
  9343.  
  9344. Syntax 
  9345.  
  9346. IPREV nr,pos,s$
  9347.  
  9348. Eingabe 
  9349.  
  9350. nr        Nummer der entsprechenden Datenbank
  9351.  
  9352. Ausgabe 
  9353.  
  9354. s$        Recordstruktur, in die der neue Datensatz geladen wird
  9355. pos       Variable, in die die neue Position des Datenbanksatzzeigers
  9356.           zurueckgegeben wird. Am Dateianfang wird der Wert 4 ueber-
  9357.           geben, am Ende der Datei erfolgt die uebergabe des Wertes 3.
  9358.  
  9359. Beschreibung 
  9360.  
  9361. Mit diesem Befehl wird der vorhergehende Datensatz aktiviert.
  9362. Am Dateianfang und -ende erfolgt keine Veraenderung des aktuellen
  9363. Datensatzes mehr.
  9364.  
  9365. Bespiel    IPREV 
  9366.  
  9367. Siehe 
  9368.  
  9369. ISTART
  9370. IENDE
  9371. INEXT
  9372. ISKIP
  9373.  
  9374.  
  9375. ΓòÉΓòÉΓòÉ 145. IPREVREL ΓòÉΓòÉΓòÉ
  9376.  
  9377. Funktion 
  9378.  
  9379. Der Datensatzzeiger auf den vorherigen
  9380. Datensatz der Masterdatenbank gesetzt.
  9381.  
  9382. Syntax 
  9383.  
  9384. IPREVREL relnr,ok, structmaster, structslave
  9385.  
  9386. Eingabe 
  9387.  
  9388. relnr          Kennummer (Handle) der Relation
  9389.  
  9390. Ausgabe 
  9391.  
  9392. ok             Werte entsprechen der Variablen pos bei dem Befehl IPREV
  9393. structmaster   Datensatzinhalt (Masterdatenbank)
  9394. structslave    Datensatzinhalt (Slavedatenbank)
  9395.  
  9396. Beschreibung 
  9397.  
  9398. Der Befehl entspricht dem Befehl IPREV, ist aber allgemeiner fuer
  9399. Relationen gueltig.
  9400.  
  9401. Bespiel    IPREVREL 
  9402.  
  9403. Siehe 
  9404.  
  9405. INEXTREL
  9406.  
  9407.  
  9408. ΓòÉΓòÉΓòÉ 146. IREAD ΓòÉΓòÉΓòÉ
  9409.  
  9410. Funktion 
  9411.  
  9412. Sucht einen Datensatz in einer geoeffneten Datenbank bezueglich
  9413. des aktuellen Index.
  9414.  
  9415. Syntax 
  9416.  
  9417. IREAD nr,ok,suchstring$,s$
  9418.  
  9419. Eingabe 
  9420.  
  9421. nr            Nummer der entsprechenden Datenbank
  9422. s$            Recordstruktur, in der der Datensatz gesucht wird
  9423. suchstring$   Zu suchender Feldinhalt
  9424.  
  9425. Ausgabe 
  9426.  
  9427. ok            Variable, in die das Ergebnis der Suche uebergeben wird:
  9428.               ok=0:    Datensatz gefunden
  9429.               ok<>0:   Datensatz nicht gefunden
  9430.  
  9431. Beschreibung 
  9432.  
  9433. Es wird nach dem Feldwert in der Datenbank gesucht, auf den der aktuelle
  9434. Index zeigt (Schluesselwert). Es koennen aber auch alle weiteren Felder
  9435. der Recordstruktur als Index ausgezeichnet werden. Dies ist besonders
  9436. dann wichtig, wenn mehrere Datensaetze mit dem gleichen Schluesselwert
  9437. gefunden werden. Dann werden zur Unterscheidung weitere Indexkriterien
  9438. betrachtet.
  9439.  
  9440. Bespiel    IREAD 
  9441.  
  9442. Siehe 
  9443.  
  9444. IADD
  9445. IMODREC
  9446.  
  9447.  
  9448. ΓòÉΓòÉΓòÉ 147. IREINDEX ΓòÉΓòÉΓòÉ
  9449.  
  9450. Funktion 
  9451.  
  9452. Reorganisiert einen bestehenden Index.
  9453.  
  9454. Syntax 
  9455.  
  9456. IREINDEX nr
  9457.  
  9458. Eingabe 
  9459.  
  9460. nr           Nummer der entsprechenden Datenbank
  9461.  
  9462. Ausgabe 
  9463.  
  9464. keine
  9465.  
  9466. Beschreibung 
  9467.  
  9468. Es werden alle offenen Indexdateien einer Datenbank reorganisiert.
  9469.  
  9470. Bespiel    IREINDEX 
  9471.  
  9472. Siehe 
  9473.  
  9474. IPACK
  9475.  
  9476.  
  9477. ΓòÉΓòÉΓòÉ 148. ISET ΓòÉΓòÉΓòÉ
  9478.  
  9479. Funktion 
  9480.  
  9481. Wechselt den aktuellen Index.
  9482.  
  9483. Syntax 
  9484.  
  9485. ISET nr,index$,expr$
  9486.  
  9487. Eingabe 
  9488.  
  9489. nr       Nummer der entsprechenden Datenbank
  9490. index$   Neuer Indexname (Nicht der Name der physikal. Indexdatei)
  9491.  
  9492. Ausgabe 
  9493.  
  9494. expr$            Aktueller Inhalt aufgrund des neuen Indexes.
  9495.  
  9496. Beschreibung 
  9497.  
  9498. Der aktuelle Index wird gewechselt. Voraussetzung hierfuer ist, dass eine
  9499. Indexdatei geoeffnet ist.
  9500.  
  9501. Bespiel    ISET 
  9502.  
  9503. Siehe 
  9504.  
  9505. IOPEN
  9506. IOPEN_INDEX
  9507.  
  9508.  
  9509. ΓòÉΓòÉΓòÉ 149. ISETREL ΓòÉΓòÉΓòÉ
  9510.  
  9511. Funktion 
  9512.  
  9513. Eine Relation zwischen einer Master- und
  9514. einer Slave-Datenbank wird definiert.
  9515.  
  9516. Syntax 
  9517.  
  9518. ISETREL relnr, dbnr_master,dbnr_slave,slave_ausdruck
  9519.  
  9520. Eingabe 
  9521.  
  9522. relnr            Kennummer (Handle) der Relation
  9523. dbnr_master      Kennummer (Handle) der Masterdatenbank
  9524. dbnr_slave       Kennummer (Handle) der Slavedatenbank
  9525. slave_ausdruck   Verknuepfung zwischen Master- und Slave-Datenbank
  9526.  
  9527. Ausgabe 
  9528.  
  9529. keine
  9530.  
  9531. Beschreibung 
  9532.  
  9533. Es wird eine Relation zwischen zwei Datenbanken geknuepft. Dabei ist
  9534. die Verbindung zwischen beiden Datenbanken der Inhalt der Variablen
  9535. slave_ausdruck. Hier wird der gemeinsame Index der beteiligten Daten-
  9536. banken festgelegt, nach der saemtliche Daten angeordnet werden sollen.
  9537.  
  9538. Bespiel    ISETREL 
  9539.  
  9540. Siehe 
  9541.  
  9542.  
  9543. ΓòÉΓòÉΓòÉ 150. ISETRELQUERY ΓòÉΓòÉΓòÉ
  9544.  
  9545. Funktion 
  9546.  
  9547. Ein dBASE-Ausdruck  wird fuer eine Relation eingesetzt.
  9548.  
  9549. Syntax 
  9550.  
  9551. ISETRELQUERY relnr,expression
  9552.  
  9553. Eingabe 
  9554.  
  9555. relnr         Kennummer (Handle) der Relation
  9556. expression    Ausdruck, der fuer die Relation eingesetzt werden soll
  9557.  
  9558. Ausgabe 
  9559.  
  9560. Keine
  9561.  
  9562. Beschreibung 
  9563.  
  9564. Es wird ein DBASE-Ausdruck fuer eine Relation eingesetzt. Die
  9565. Beschreib
  9566. Kapitel ueber Datenbanken.
  9567.  
  9568. Bespiel    ISETRELQUERY 
  9569.  
  9570. Siehe 
  9571.  
  9572.  
  9573. ΓòÉΓòÉΓòÉ 151. ISETRELSORT ΓòÉΓòÉΓòÉ
  9574.  
  9575. Funktion 
  9576.  
  9577. Es wird ein Sortierausdruck fuer eine Relation bestimmt.
  9578.  
  9579. Syntax 
  9580.  
  9581. ISETRELSORT relnr, sort_expression
  9582.  
  9583. Eingabe 
  9584.  
  9585. relnr              Kennummer (Handle) der Relation
  9586. sort_expression    Sortierausdruck
  9587.  
  9588. Ausgabe 
  9589.  
  9590. Keine
  9591.  
  9592. Beschreibung 
  9593.  
  9594. Befehle fuer die Sortierung werden im Kapitel ueber Datenbanken
  9595. beschrieben.
  9596.  
  9597. Bespiel    ISETRELSORT 
  9598.  
  9599. Siehe 
  9600.  
  9601.  
  9602. ΓòÉΓòÉΓòÉ 152. ISKIP ΓòÉΓòÉΓòÉ
  9603.  
  9604. Funktion 
  9605.  
  9606. Datenbankzeiger vor- bzw. r╨æckw╨örts bewegen
  9607.  
  9608. Syntax 
  9609.  
  9610. ISKIP db_nr, anzahl
  9611.  
  9612. Eingabe 
  9613.  
  9614. db_nr        Nr der Datanbank
  9615. anzahl      10  S╨ötze weiter
  9616. anzahl      -10 S╨ötze zur╨æck
  9617.  
  9618. Ausgabe 
  9619.  
  9620.  
  9621. Beschreibung 
  9622.  
  9623. Bewegt den Datenbankzeiger bei einen  positiven Wert um
  9624. <anzahl> vorw╨örts in der Datenbank oder bei einen nega-
  9625. tiven Wert um <Anzahl> zur╨æck in der Datenbank.  Werden
  9626. dabei die Datenbankgrenzen (Anfang,Ende) ╨æberschritten,
  9627. wird der  Datenbankzeiger  entsprechend auf  den Anfang
  9628. oder das Ende gesetzt.
  9629.  
  9630. Bespiel    ISKIP 
  9631.  
  9632. Siehe 
  9633.  
  9634. INEXT
  9635. IPREV
  9636.  
  9637.  
  9638. ΓòÉΓòÉΓòÉ 153. ISTART ΓòÉΓòÉΓòÉ
  9639.  
  9640. Funktion 
  9641.  
  9642. Setzt den Datenbanksatzzeiger auf den ersten Datensatz bezueglich
  9643. des aktuellen Index.
  9644.  
  9645. Syntax 
  9646.  
  9647. ISTART nr,s$
  9648.  
  9649. Eingabe 
  9650.  
  9651. nr      Nummer der entsprechenden Datenbank
  9652.  
  9653. Ausgabe 
  9654.  
  9655. s$      Recordstruktur, in der der neue Datensatz erscheinen soll.
  9656.  
  9657. Beschreibung 
  9658.  
  9659. Falls kein Datensatz in der Datenbank vorhanden ist, wird eine ent-
  9660. sprechende Meldung ausgegeben.
  9661.  
  9662. Bespiel    ISTART 
  9663.  
  9664. Siehe 
  9665.  
  9666. IENDE
  9667. IPREV
  9668. INEXT
  9669.  
  9670.  
  9671. ΓòÉΓòÉΓòÉ 154. ISTARTREL ΓòÉΓòÉΓòÉ
  9672.  
  9673. Funktion 
  9674.  
  9675. Der Datensatzzeiger wird auf den Anfang der Masterdatenbank gesetzt
  9676.  
  9677. Syntax 
  9678.  
  9679. ISTARTREL relnr, structmaster, structslave
  9680.  
  9681. Eingabe 
  9682.  
  9683. relnr            Kennummer (Handle) der Relation
  9684.  
  9685. Ausgabe 
  9686.  
  9687. structmaster     Datensatzinhalt (Masterdatenbank)
  9688. structslave      Datensatzinhalt (Slavedatenbank)
  9689.  
  9690. Beschreibung 
  9691.  
  9692. Der Befehl entspricht dem Befehl ISTART, ist aber allgemeiner fuer
  9693. Relationen gueltig.
  9694.  
  9695. Bespiel    ISTARTREL 
  9696.  
  9697. Siehe 
  9698.  
  9699.  
  9700. ΓòÉΓòÉΓòÉ 155. IUNDEL ΓòÉΓòÉΓòÉ
  9701.  
  9702. Funktion 
  9703.  
  9704. Loeschmarkierung eines Datensatzes wird aufgehoben.
  9705.  
  9706. Syntax 
  9707.  
  9708. IUNDEL nr
  9709.  
  9710. Eingabe 
  9711.  
  9712. nr        Nummer der entsprechenden Datenbank
  9713.  
  9714. Ausgabe 
  9715.  
  9716. keine
  9717.  
  9718. Beschreibung 
  9719.  
  9720. Der aktuelle Datensatz wird wieder zurueckgeholt und kann weiter ver-
  9721. wendet werden. Dieser Befehl ist nur anwendbar, wenn die Anweisung
  9722. IPACK noch nicht durchgefuehrt wurde.
  9723.  
  9724. Bespiel    IUNDEL 
  9725.  
  9726. Siehe 
  9727.  
  9728. IDEL
  9729. IDELCHECK
  9730.  
  9731.  
  9732. ΓòÉΓòÉΓòÉ 156. IUNLOCK ΓòÉΓòÉΓòÉ
  9733.  
  9734. Funktion 
  9735.  
  9736. Entsperrt den aktuellen Datensatz einer geoeffneten Datenbank.
  9737.  
  9738. Syntax 
  9739.  
  9740. IUNLOCK nr,ok
  9741.  
  9742. Eingabe 
  9743.  
  9744. nr         Nummer der entsprechenden Datenbank
  9745.  
  9746. Ausgabe 
  9747.  
  9748. ok         Variable, in die das Ergebnis des Vorgangs an das Programm
  9749.            zurueck gegeben wird:
  9750.            ok<>50     Datensatz wurde entsperrt
  9751.            ok=50      Datensatz konnte nicht entsperrt werden
  9752.  
  9753. Beschreibung 
  9754.  
  9755. Dieser Befehl ist nur in der Netzwerkversion von KIM gueltig. Er ent-
  9756. sperrt einen mit ILOCK fuer den Zugriff anderer Anwender gesperrten
  9757. Datensatz wieder. Somit ist der aktuelle Datensatz fuer jeden Benutzer
  9758. des Netzwerks ansprechbar und bearbeitbar.
  9759.  
  9760. Bespiel    IUNLOCK 
  9761.  
  9762. Siehe 
  9763.  
  9764. ILOCK
  9765.  
  9766.  
  9767. ΓòÉΓòÉΓòÉ 157. RND ΓòÉΓòÉΓòÉ
  9768.  
  9769. Funktion 
  9770.  
  9771. Ermittelt eine willkuerliche Zahl mittels eines Zufallsgenerators.
  9772.  
  9773. Syntax 
  9774.  
  9775. RND  startpos,zahl
  9776.  
  9777. Eingabe 
  9778.  
  9779. startpos         Startposition fuer den Zufallsgenerator (0-255)
  9780.  
  9781. Ausgabe 
  9782.  
  9783. zahl             Variable, in die die zuf_llig ausgewaehlte Zahl
  9784.                  uebergeben wird (0-32000).
  9785.  
  9786. Beschreibung 
  9787.  
  9788. Mit diesem Befehl koennen Sie einen Zufallsgenerator aktivieren, der
  9789. Ihnen beliebig viele Zahlen in zuf_lliger Reihenfolge ausgibt. Um
  9790. unterschiedliche Zufallszahlen zu erhalten, koennen Sie verschiedene
  9791. Startpositionen zur Ermittlung der Zahlen festlegen.
  9792.  
  9793. Bespiel    RND 
  9794.  
  9795. Siehe 
  9796.  
  9797.  
  9798. ΓòÉΓòÉΓòÉ 158. SETLANG ΓòÉΓòÉΓòÉ
  9799.  
  9800. Funktion 
  9801.  
  9802. Umwandlung beim lesen von numerischen Feldern.
  9803.  
  9804. Syntax 
  9805.  
  9806. SETLANG flag
  9807.  
  9808. Eingabe 
  9809.  
  9810. flag          1=Umwandlung Punkt nach Komma (Vorgabe)
  9811.               0=Punkt bleibt
  9812.  
  9813. Ausgabe 
  9814.  
  9815. keine
  9816.  
  9817. Beschreibung 
  9818.  
  9819. (Standard) Bei Zahlenfelder aus Datenbank einer
  9820. Datenbank wird der Punkt in ein Komma gewandelt
  9821. (Deutschland)
  9822.  
  9823. Bespiel    SETLANG 
  9824.  
  9825. Siehe 
  9826.  
  9827.  
  9828. ΓòÉΓòÉΓòÉ 159. ADD_ITEM ΓòÉΓòÉΓòÉ
  9829.  
  9830. Funktion 
  9831.  
  9832. Ein Objekt wird an ein anderes Objekt angefuegt.
  9833.  
  9834. Syntax 
  9835.  
  9836. ADD_ITEM  Haupt_id String, Unter_id,..
  9837.  
  9838. Eingabe 
  9839.  
  9840. Haupt_id String                 Mutterobjekt
  9841. Unter_id String                 Kindobjekt
  9842.  
  9843. Ausgabe 
  9844.  
  9845. keine
  9846.  
  9847. Beschreibung 
  9848.  
  9849. Mit diesem Befehl fuegen Sie an ein Objekt ein anderes Objekt an.
  9850. Beispiel:
  9851. Sie haben ein Listenobjekt, z.B. eine Combobox, definiert. In dieser
  9852. Combobox brauchen wir einige Elemente. Diese Elemente, z.B. String-
  9853. objekte, werden mit dem Befehl ADD_ITEM an die Combobox "angefuegt".
  9854. Dann fuegen wir das Objekt Combobox an das Fensterobjekt an. In einigen
  9855. Fuellen ist die Reihenfolge der Objekte, die an ein anderes Objekt
  9856. angefuegt werden, wichtig (bei Fenstern sollte zunaechst der Rahmen
  9857. vor anderen Objekte hinzugefuegt werden, vgl. Kapitel Oberflaechen-
  9858. erstellung). Ein Objekt darf nicht gleichzeitig zwei verschiedenen
  9859. Objekten als Element zugewiesen werden. Das Betriebssystem meldet
  9860. sonst einen allgemeinen Speicherschutzfehler.
  9861.  
  9862. Bespiel    ADD_ITEM 
  9863.  
  9864. Siehe 
  9865.  
  9866. ADD_ITEM_ARRAY
  9867. SUB_ITEM
  9868. SUB_ITEM_ARRAY
  9869.  
  9870.  
  9871. ΓòÉΓòÉΓòÉ 160. ADD_ITEM_ARRAY ΓòÉΓòÉΓòÉ
  9872.  
  9873. Funktion 
  9874.  
  9875. Berechnet den ArcusCosinus eines vorgegebenen Winkels.
  9876. Ein Objekt wird an ein anderes Objekt angefuegt.
  9877.  
  9878. Syntax 
  9879.  
  9880. ADD_ITEM_ARRAY  Haupt_id String, Unter_id, von$, bis$
  9881.  
  9882. Eingabe 
  9883.  
  9884. Variable mit dem Wert des zu berechnenden Winkels
  9885. Haupt_id String      Mutterobjekt
  9886. Unter_id String      Kindobjekt
  9887. von$                 Erstes Objekt (Zahl)
  9888. bis$                 Letztes Objekt (Zahl)
  9889.  
  9890. Ausgabe 
  9891.  
  9892. Variable mit dem ArcusCosinus des vorgegebenen Winkels
  9893. keine
  9894.  
  9895. Beschreibung 
  9896.  
  9897. Mit dieser Funktion berechnen Sie den ArcusCosinus eines Winkels.
  9898. Geben Sie hierzu den numerischen Wert des Winkels ohne Einheit vor.
  9899. Mit diesem Befehl fuegen Sie an ein Objekt mehrere Objekt an.
  9900.  
  9901. Bespiel    ADD_ITEM_ARRAY 
  9902.  
  9903. Siehe 
  9904.  
  9905. ADD_ITEM
  9906. SUB_ITEM
  9907. SUB_ITEM_ARRAY
  9908.  
  9909.  
  9910. ΓòÉΓòÉΓòÉ 161. COLOR_ITEM ΓòÉΓòÉΓòÉ
  9911.  
  9912. Funktion 
  9913.  
  9914. Aendert die Farbe eines Objekts
  9915.  
  9916. Syntax 
  9917.  
  9918. COLOR_ITEM id_string,pnr
  9919.  
  9920. Eingabe 
  9921.  
  9922. id_string       Objektkennung
  9923. pnr             Bezeichnung der Palette, in der die zu verwendenden
  9924.                 Farben definiert wurden
  9925.  
  9926. Ausgabe 
  9927.  
  9928. keine
  9929.  
  9930. Beschreibung 
  9931.  
  9932. Hiermit wird die Farbe eines Objekts ge_ndert. Dies hat nur einen Er-
  9933. folg unter WINDOWS/OS2, wenn das Flag "color on" fuer das entsprechende
  9934. Objekt gesetzt und die entsprechende Farbpalette definiert ist.
  9935.  
  9936. Bespiel    COLOR_ITEM 
  9937.  
  9938. Siehe 
  9939.  
  9940. DEF_PALETTE
  9941.  
  9942.  
  9943. ΓòÉΓòÉΓòÉ 162. DEF_BORDER ΓòÉΓòÉΓòÉ
  9944.  
  9945. Funktion 
  9946.  
  9947. Definition eines Rands
  9948.  
  9949. Syntax 
  9950.  
  9951. DEF_BORDER id_string
  9952.  
  9953. Eingabe 
  9954.  
  9955. id_string  Objektbezeichnung
  9956.  
  9957. Ausgabe 
  9958.  
  9959. keine
  9960.  
  9961. Beschreibung 
  9962.  
  9963. Ein Border-Objekt wird definiert und kann dann mit ADD_ITEM addiert
  9964. werden.
  9965.  
  9966. Bespiel    DEF_BORDER 
  9967.  
  9968. Siehe 
  9969.  
  9970.  
  9971. ΓòÉΓòÉΓòÉ 163. DEF_BUTTON ΓòÉΓòÉΓòÉ
  9972.  
  9973. Funktion 
  9974.  
  9975. Definiert einen Button (dt. Knopf)
  9976.  
  9977. Syntax 
  9978.  
  9979. DEF_BUTTON id_string, x, y, len, bitmap$, text$
  9980.  
  9981. Eingabe 
  9982.  
  9983. id_string    Objektkennung
  9984. x,y          x/y-Position des Buttons im zugewiesenen Fenster
  9985. len          Laenge des Buttons
  9986. bitmap$      Name eines Bitmaps aus einer DAT-Datei (wenn vorhanden)
  9987. text$        Titel des Buttons
  9988.  
  9989. Ausgabe 
  9990.  
  9991. keine
  9992.  
  9993. Beschreibung 
  9994.  
  9995. Dadurch wird ein Button (Druckknopf) erstellt. Die Art eines Buttons
  9996. (PUSH, RADIO, RING) wird ueber die Flags gesteuert. Optional kann auf
  9997. den Button ein Bild (Bitmap, Icon) gelegt werden. Wird dies nicht ge-
  9998. wuenscht, weisen Sie der Variablen bitmap$ einen Leerstring " " zu.
  9999.  
  10000. Bespiel    DEF_BUTTON 
  10001.  
  10002. Siehe 
  10003.  
  10004.  
  10005. ΓòÉΓòÉΓòÉ 164. DEF_COMBO ΓòÉΓòÉΓòÉ
  10006.  
  10007. Funktion 
  10008.  
  10009. Definiert eine Auswahlbox.
  10010.  
  10011. Syntax 
  10012.  
  10013. DEF_COMBO id_string,x,y,len,height
  10014.  
  10015. Eingabe 
  10016.  
  10017. id_string      Objektkennung
  10018. x,y            x/y-Position der Box im zugewiesenen Fenster
  10019. len            Laenge der Box
  10020. height         Hoehe der Box
  10021.  
  10022. Ausgabe 
  10023.  
  10024. keine
  10025.  
  10026. Beschreibung 
  10027.  
  10028. Einer Auswahlbox koennen verschiedenartige Objekte zugewiesen werden.
  10029.  
  10030. Bespiel    DEF_COMBO 
  10031.  
  10032. Siehe 
  10033.  
  10034. DEF_LIST
  10035.  
  10036.  
  10037. ΓòÉΓòÉΓòÉ 165. DEF_GROUP ΓòÉΓòÉΓòÉ
  10038.  
  10039. Funktion 
  10040.  
  10041. Definiert ein Gruppenobjekt.
  10042.  
  10043. Syntax 
  10044.  
  10045. DEF_GROUP        Id_string, x, y, xr, yr,"ueberschrift"
  10046.  
  10047. Eingabe 
  10048.  
  10049. Id_string        Kennung des Objekts
  10050. x, y             Position des Gruppenfensters im zugewiesenen Fenster
  10051. xr, yr           Laenge und Breite der Gruppe
  10052. "ueberschrift"    Ueberschrift der Gruppe
  10053.  
  10054. Ausgabe 
  10055.  
  10056.  
  10057. Beschreibung 
  10058.  
  10059. Mit diesem Befehl wird ein Gruppenobjekt definiert. In erster
  10060. Linie dient ein Gruppenobjekt dazu, mehrere Fensterobjekte zu
  10061. einer physikalischen Gruppe zusammenzufassen und von anderen
  10062. Objekten zu separieren.
  10063.  
  10064. Bespiel    DEF_GROUP 
  10065.  
  10066. Siehe 
  10067.  
  10068.  
  10069. ΓòÉΓòÉΓòÉ 166. DEF_ICON ΓòÉΓòÉΓòÉ
  10070.  
  10071. Funktion 
  10072.  
  10073. Ein Icon aus der Objektbibliothek wird naeher definiert.
  10074.  
  10075. Syntax 
  10076.  
  10077. DEF_ICON Id_string, x, y, "Iconname","Titel"
  10078.  
  10079. Eingabe 
  10080.  
  10081. Id_string     Kennung des Objekts
  10082. x, y          x-y Position des Icons im zugewiesenen Objekt
  10083. "Iconname"    Name des ICONS in einer geladenen DAT-Datei.
  10084. "Titel"       Zusatzbezeichnung des Icons
  10085.  
  10086. Ausgabe 
  10087.  
  10088. keine
  10089.  
  10090. Beschreibung 
  10091.  
  10092. Icons sind kleine Grafiken im Pixelformat auf einer 32 x 32 Matrix.
  10093. Fuer die Systemunabhaengigkeit wird ein eigenes Format unterstuetzt.
  10094. Icons koennen nur aus systemunabhaengigen DAT-Files genutzt werden.
  10095. Ein entsprechender ICON-Designer wird an anderer Stelle beschrieben.
  10096. ueber ein Flag kann man entscheiden, ob das ICON nur bei Symbolgroesse
  10097. eines Fensterobjekts oder als normales ICON eingesetzt wird. Das FLAG
  10098. "ICON MINIMIZE" bewirkt die Aktivierung des Icons bei Verkleinerung
  10099. des Objekts auf Symbolgroesse. "ICON DOUBLE_CLICK" hat zur Folge, dass
  10100. das Icon nur bei einem Doppelklick selektiert wird.
  10101. Der "Iconname" ist die Bezeichnung des ICONS aus einem DAT-File, ueber
  10102. den es aus dieser Datei eingelesen werden. ueber die Zusatzbezeichnung
  10103. koennen Sie das Icon nach diesem Befehl mit anderen Anweisungen an-
  10104. sprechen.
  10105.  
  10106. Bespiel    DEF_ICON 
  10107.  
  10108. Siehe 
  10109.  
  10110. LOAD_DAT
  10111.  
  10112.  
  10113. ΓòÉΓòÉΓòÉ 167. DEF_INPUT ΓòÉΓòÉΓòÉ
  10114.  
  10115. Funktion 
  10116.  
  10117. Definition einer formatierbaren Eingabemaske.
  10118.  
  10119. Syntax 
  10120.  
  10121. DEF_INPUT id_string, x,y,breite,text,maske,schablone
  10122.  
  10123. Eingabe 
  10124.  
  10125. id_string   Objektkennung
  10126. x,y         x,y-Position der Maske im Fenster
  10127. breite      Breite der Eingabezone
  10128. text        Vorgabetext (erscheint bei Aufruf der Maske)
  10129. maske       Zulaessige Eingabe, die in der Maske getaetigt werden kann:
  10130.             c:    Alphanumerische Eingabezeichen
  10131.             C:    Alphanumerische Eingabeparameter. z, A.. Z
  10132.                   (keine Sonderzeichen und Zahlen)
  10133.             A:    Wie bei a, aber mit sofortiger Umwandlung in
  10134.                   Grossbuchstaben
  10135.             L:    Benuetzen Sie dieses Zeichen fuer Schablonenvorgabe
  10136.             N:    Numerische Eingabeparameter:
  10137.             x:    Eingabeparameter:  von druckbaren Zeichen
  10138.             X:    Wie x, aber mit Umwandlung in Grossbuchstaben
  10139. schablone   Eingabeschablone
  10140.  
  10141. Ausgabe 
  10142.  
  10143.  
  10144. Beschreibung 
  10145.  
  10146. Es wird eine Eingabemaske erstellt, die die getaetigte Eingabe gemaess
  10147. der unter maske definierten Vorgaben automatisch formatiert.
  10148. Ein Beispiel fuer den Befehl:
  10149.              DEF_INPUT "id",2,2,10," ","LLLcccLNNN","GUT   -   ".
  10150. Die ersten drei Felder der Maske enthalten eine Vorgabe, welche ueber
  10151. die Schablone als GUT bestimmt wird. Danach koennen drei alphanumerische
  10152. Zeichen eingegeben werden, ehe ein weiteres Zeichen (-) vorgegeben ist.
  10153. Schliesslich koennen drei Zahlen eingegeben werden. Maske und Schablone
  10154. entsprechen sich in Zeichenanzahl und -folge.
  10155.  
  10156. Bespiel    DEF_INPUT 
  10157.  
  10158. Siehe 
  10159.  
  10160. DEF_INPUT_DATE
  10161. DEF_INPUT_TIME
  10162. DEF_NUMBER
  10163.  
  10164.  
  10165. ΓòÉΓòÉΓòÉ 168. DEF_INPUT_DATE ΓòÉΓòÉΓòÉ
  10166.  
  10167. Funktion 
  10168.  
  10169. Definition einer Datumseingabemaske
  10170.  
  10171. Syntax 
  10172.  
  10173. DEF_INPUT_DATE id_string, x, y, len,vorgabe, range
  10174.  
  10175. Eingabe 
  10176.  
  10177. id_string    Objektkennung
  10178. x, y         Position der Maske
  10179. len          Laenge der Maske
  10180. vorgabe      Datumsvorgabe (erscheint bei Aufruf der Maske)
  10181. range        Einschraenkung des Datumszeitraums
  10182.  
  10183. Ausgabe 
  10184.  
  10185. keine
  10186.  
  10187. Beschreibung 
  10188.  
  10189. Dieses Objekt ermoeglicht die Eingabe eines Datums in der Form
  10190. TT/MM/YY oder TT.MM.JJ. Ist die Vorgabe leer, wird das aktuelle
  10191. Tagesdatum eingetragen. Mit dem Inhalt der Variablen "range"
  10192. koennen Sie einen Eingabezeitraum festlegen (z.B. 03/09/93..03/12/93).
  10193.  
  10194.  
  10195. Bespiel    DEF_INPUT_DATE 
  10196.  
  10197. Siehe 
  10198.  
  10199. DEF_INPUT
  10200. DEF_INPUT_TIME
  10201. DEF_NUMBER
  10202.  
  10203.  
  10204. ΓòÉΓòÉΓòÉ 169. DEF_INPUT_TIME ΓòÉΓòÉΓòÉ
  10205.  
  10206. Funktion 
  10207.  
  10208. Definiert Eingabemaske fuer Zeitangaben.
  10209.  
  10210. Syntax 
  10211.  
  10212. DEF_INPUT_TIME id_string,x,y,len,vorgabe$,intervall$
  10213.  
  10214. Eingabe 
  10215.  
  10216. id_string     Objektkennung
  10217. x,y           x,y-Position der Maske im zugewiesenen Fenster
  10218. len           Laenge der Eingabezone
  10219. vorgabe$      Vorgabe im Eingabefeld (erscheint bei Aufruf der Maske)
  10220. intervall$    Zeitintervall, das eingegeben werden kann.
  10221.               (z.B. 12.00..14.45)
  10222.  
  10223. Ausgabe 
  10224.  
  10225. keine
  10226.  
  10227. Beschreibung 
  10228.  
  10229. Dieses Objekt ermoeglicht die Eingabe einer Zeitangabe.
  10230.  
  10231. Bespiel    DEF_INPUT_TIME 
  10232.  
  10233. Siehe 
  10234.  
  10235. DEF_INPUT_DATE
  10236. DEF_INPUT
  10237.  
  10238.  
  10239. ΓòÉΓòÉΓòÉ 170. DEF_LIST ΓòÉΓòÉΓòÉ
  10240.  
  10241. Funktion 
  10242.  
  10243. Definiert ein Listenobjekt
  10244.  
  10245. Syntax 
  10246.  
  10247. DEF_LIST id_string,flag,x,y,xl,yl,cellwidth,cellheight
  10248.  
  10249. Eingabe 
  10250.  
  10251. id_string     Objektkennung
  10252. flag          Definiert den Listentyp:
  10253.               flag=0:       Vertikale Liste
  10254.               flag=1:       Horizontale Liste
  10255. x,y           x/y-Position der Liste im zugewiesenen Fenster
  10256. xl,yl         Relative Breite/Hoehe der Liste
  10257. cellwidth     Zellenbreite (nur bei horizontalen Listen)
  10258. cellheight    Zellenhoehe (nur bei horizontalen Listen)
  10259.  
  10260. Ausgabe 
  10261.  
  10262. keine
  10263.  
  10264. Beschreibung 
  10265.  
  10266. Die Zellenbreite/hoehe ist nur bei einer horizontalen Listbox wichtig.
  10267. Bei einer vertikalen Listbox geben Sie fuer die beiden Variablen je-
  10268. weils den Wert Null vor.
  10269.  
  10270. Bespiel    DEF_LIST 
  10271.  
  10272. Siehe 
  10273.  
  10274. DEF_COMBO
  10275.  
  10276.  
  10277. ΓòÉΓòÉΓòÉ 171. DEF_MAX_BUTTON ΓòÉΓòÉΓòÉ
  10278.  
  10279. Funktion 
  10280.  
  10281. Definition eines Vergroesserungsdruckknopfs.
  10282.  
  10283. Syntax 
  10284.  
  10285. DEF_MAX_BUTTON id_string
  10286.  
  10287. Eingabe 
  10288.  
  10289. id_string           Kennung des Objekts
  10290.  
  10291. Ausgabe 
  10292.  
  10293. keine
  10294.  
  10295. Beschreibung 
  10296.  
  10297. Dieses Objekt stellt ein Fenster auf Klick als Vollbild dar.
  10298.  
  10299. Bespiel    DEF_MAX_BUTTON 
  10300.  
  10301. Siehe 
  10302.  
  10303. DEF_MIN_BUTTON
  10304.  
  10305.  
  10306. ΓòÉΓòÉΓòÉ 172. DEF_MIN_BUTTON ΓòÉΓòÉΓòÉ
  10307.  
  10308. Funktion 
  10309.  
  10310. Definition eines Verkleinerungsdruckknopfs.
  10311.  
  10312. Syntax 
  10313.  
  10314. DEF_MIN_BUTTON id_string
  10315.  
  10316. Eingabe 
  10317.  
  10318. id_string      Kennung des Objekts
  10319.  
  10320. Ausgabe 
  10321.  
  10322. keine
  10323.  
  10324. Beschreibung 
  10325.  
  10326. Dieses Objekt reduziert ein Fenster durch Klick auf ICON-Groesse.
  10327.  
  10328. Bespiel    DEF_MIN_BUTTON 
  10329.  
  10330. Siehe 
  10331.  
  10332. DEF_MAX_BUTTON
  10333.  
  10334.  
  10335. ΓòÉΓòÉΓòÉ 173. DEF_NUMBER ΓòÉΓòÉΓòÉ
  10336.  
  10337. Funktion 
  10338.  
  10339. Erstellt eine Eingabemaske fuer eine Zahl.
  10340.  
  10341. Syntax 
  10342.  
  10343. DEF_NUMBER id_zahl  ,x,y,len,vorgabe$, bereich ; flags
  10344.  
  10345. Eingabe 
  10346.  
  10347. id_zahl      Objektkennung
  10348. x,y          x/y-Position der Maske im zugewiesenen Fenster
  10349. len          maximale Eingabelaenge fuer das Objekt
  10350. vorgabe      Vorgabezahl (erscheint bei Aufruf der Maske)
  10351. bereich      Auf dem Bildschirm angezeigte Objektlaenge
  10352.  
  10353. Ausgabe 
  10354.  
  10355. keine
  10356.  
  10357. Beschreibung 
  10358.  
  10359. Hiermit wird eine Numerische-Eingabemaske erstellt.
  10360. Es wird ein Objekt mit der in wert vorgegebenen Laenge erstellt.
  10361.  
  10362. commas        Es werden Kommas und Punkt f╨ær Trennung
  10363.                 von Dezimal und Tausender-Stellen verwendet
  10364.              (Verwendung wie Einstellung des Systems)
  10365.  
  10366. currency        W╨öhrungssymbol wird mit angezeigt.
  10367.  
  10368. decimal x      x=0..6 Anzahl der Nachkommastellen
  10369.  
  10370. percent            Zeigt Zahl mit Prozentzeichen
  10371.  
  10372. scientific      Zeigt Zahl in wissenschaftlicher Form (z.B. 10 E+10)
  10373.  
  10374.  
  10375. Bespiel    DEF_NUMBER 
  10376.  
  10377. Siehe 
  10378.  
  10379. DEF_INPUT_DATE
  10380. DEF_INPUT_TIME
  10381. DEF_INPUT
  10382.  
  10383.  
  10384. ΓòÉΓòÉΓòÉ 174. DEF_PALETTE ΓòÉΓòÉΓòÉ
  10385.  
  10386. Funktion 
  10387.  
  10388. Eine Farbpalette"Farbpalette" ~ wird definiert.
  10389.  
  10390. Syntax 
  10391.  
  10392. DEF_PALETTE nr, fv, fh
  10393.  
  10394. Eingabe 
  10395.  
  10396. nr          Kennummer der Farbpalette
  10397. fv          Codenummer der gewuenschten Vordergrundfarbe
  10398. fh          Codenummer der gewuenschten Hintergrundfarbe
  10399.  
  10400. Ausgabe 
  10401.  
  10402. keine
  10403.  
  10404. Beschreibung 
  10405.  
  10406. Mit diesem Befehl definieren Sie eine Farbpalette mit je einer
  10407. selektierten Vordergrund- und Hintergrundfarbe. Die Codenummern
  10408. fuer die entsprechenden Farben entnehmen Sie bitte der Farbtabelle
  10409. im Anhang dieses Buches. ueber Farbpaletten koennen Sie die Farbge-
  10410. bung von Objekten direkt von KIM aus steuern (normalerweise ueber-
  10411. nimmt diese Aufgabe das jeweilige Betriebssystem). Damit Objekte
  10412. mit den Farben der entsprechenden Palette versehen werden koennen,
  10413. muss ihnen das FLAG "COLOR ON" angefuegt werden.
  10414.  
  10415. Bespiel    DEF_PALETTE 
  10416.  
  10417. Siehe 
  10418.  
  10419. COLOR_ITEM
  10420.  
  10421.  
  10422. ΓòÉΓòÉΓòÉ 175. DEF_POPUP_ITEM ΓòÉΓòÉΓòÉ
  10423.  
  10424. Funktion 
  10425.  
  10426. Eine Popup-Element wird definiert.
  10427.  
  10428. Syntax 
  10429.  
  10430. DEF_POPUP_ITEM id_string,text$
  10431.  
  10432. Eingabe 
  10433.  
  10434. id_string      Objektkennung
  10435. text$          Im Objekt zu erscheinender Text
  10436.  
  10437. Ausgabe 
  10438.  
  10439. keine
  10440.  
  10441. Beschreibung 
  10442.  
  10443. Ein Popup-Element kann nur einem Pulldown- oder Popupmenue
  10444. zugeordnet werden.
  10445.  
  10446. Bespiel    DEF_POPUP_ITEM 
  10447.  
  10448. Siehe 
  10449.  
  10450. DEF_PULLDOWN_ITEM
  10451.  
  10452.  
  10453. ΓòÉΓòÉΓòÉ 176. DEF_POPUP_MENU ΓòÉΓòÉΓòÉ
  10454.  
  10455. Funktion 
  10456.  
  10457. Eine Popup-Menue wird definiert.
  10458.  
  10459. Syntax 
  10460.  
  10461. DEF_POPUP_MENU id_string,x,y
  10462.  
  10463. Eingabe 
  10464.  
  10465. id_string     Objektkennung
  10466. x,y           Position des Objekts im zugewiesenen Fenster
  10467.  
  10468. Ausgabe 
  10469.  
  10470. keine
  10471.  
  10472. Beschreibung 
  10473.  
  10474. Hiermit erstellen Sie ein Pop-Up-Menue mit den ueber Pop-Up-item
  10475. zugewiesenen Menuepunkten (durch ADD_ITEM anzufuegen).
  10476.  
  10477. Bespiel    DEF_POPUP_MENU 
  10478.  
  10479. Siehe 
  10480.  
  10481. DEF_POPUP_ITEM
  10482.  
  10483.  
  10484. ΓòÉΓòÉΓòÉ 177. DEF_PROMPT ΓòÉΓòÉΓòÉ
  10485.  
  10486. Funktion 
  10487.  
  10488. Definition einer Ausgabemarke
  10489.  
  10490. Syntax 
  10491.  
  10492. DEF_PROMPT id_string, x, y, "Text A",...
  10493.  
  10494. Eingabe 
  10495.  
  10496. id_string      Kennung des Objekts
  10497. x, y           Position der Marke im zugewiesenen Fenster
  10498. "Text A"       Ausgabetext
  10499.  
  10500. Ausgabe 
  10501.  
  10502. keine
  10503.  
  10504. Beschreibung 
  10505.  
  10506. Mit diesem Objekttyp wird ein Textobjekt definiert, das nicht
  10507. selektierbar ist. Dieser Befehl wird benutzt, um Text im Fenster
  10508. darzustellen (z.B. als Feldbezeichnung).
  10509. Es gibt nun die M╨ñglichkeit an einen DEF_PROMPT Ausgabe eine bestimmte
  10510. Menge von Leerzeichen anzuh╨öngen.
  10511. Definieren Sie die numerische Variable DEF_PROMPT_LEN.
  10512. Weisen Sie dieser Variable die Anzahl der Leerzeichen zu.
  10513. Der Wert -1 bedeutet, da╤ü die DEF_PROMPT Routine vom Betriebssystem
  10514. genutzt wird.
  10515.  
  10516. Bespiel    DEF_PROMPT 
  10517.  
  10518. Siehe 
  10519.  
  10520.  
  10521. ΓòÉΓòÉΓòÉ 178. DEF_PULLDOWN_ITEM ΓòÉΓòÉΓòÉ
  10522.  
  10523. Funktion 
  10524.  
  10525. Eine Pulldown-Element wird definiert.
  10526.  
  10527. Syntax 
  10528.  
  10529. DEF_PULLDOWN_ITEM id_string,text$[,flag]
  10530.  
  10531. Eingabe 
  10532.  
  10533. id_string      Objektkennung
  10534. text$          Im Objekt zu erscheinender Text
  10535. flag           Gilt nur unter DOS. Besitzt das Menue noch Unterpunkte,
  10536.                muss flag=1 sein. Ansonsten geben Sie flag=0 ein.
  10537.  
  10538. Ausgabe 
  10539.  
  10540. keine
  10541.  
  10542. Beschreibung 
  10543.  
  10544. Ein Pulldown-Element wird nur einem Pulldown- oder Popupmenue zugeordnet.
  10545.  
  10546. Bespiel    DEF_PULLDOWN_ITEM 
  10547.  
  10548. Siehe 
  10549.  
  10550. DEF_POPUP_ITEM
  10551.  
  10552.  
  10553. ΓòÉΓòÉΓòÉ 179. DEF_PULLDOWN_MENU ΓòÉΓòÉΓòÉ
  10554.  
  10555. Funktion 
  10556.  
  10557. Eine Pulldown-Menue wird definiert.
  10558.  
  10559. Syntax 
  10560.  
  10561. DEF_PULLDOWN_MENU id_string,level
  10562.  
  10563. Eingabe 
  10564.  
  10565. id_string    Objektkennung
  10566. level        Position des Menues im Menuebalken beim Start
  10567.  
  10568. Ausgabe 
  10569.  
  10570. keine
  10571.  
  10572. Beschreibung 
  10573.  
  10574. Ein Pulldown-Menue erscheint in der Regel am oberen Fensterrand.
  10575. Es enthaelt als Menuepunkte die definierten und ueber ADD_ITEM
  10576. zugefuegten Pulldown-Items.
  10577.  
  10578. Bespiel    DEF_PULLDOWN_MENU 
  10579.  
  10580. Siehe 
  10581.  
  10582. DEF_PULLDOWN_ITEM
  10583.  
  10584.  
  10585. ΓòÉΓòÉΓòÉ 180. DEF_SCROLLBAR ΓòÉΓòÉΓòÉ
  10586.  
  10587. Funktion 
  10588.  
  10589. Definiert einen Schieberegler zum schnellen Durchlaufen eines
  10590. Textfensters.
  10591.  
  10592. Syntax 
  10593.  
  10594. DEF_SCROLLBAR id_string,flag,x,y,len,height
  10595.  
  10596. Eingabe 
  10597.  
  10598. id_string      Objektkennung
  10599. flag           Legt den Typ des Scrollbars"Scrollbars" ~ fest:
  10600.                flag = 0:      Horizontaler Balken
  10601.                flag = 1:      Vertikaler Balken
  10602.                flag = 2:      Balkenecke
  10603. x,y            x/y-Position des Balkens im zugewiesenen Fenster
  10604. len            Laenge des Balkens
  10605. height         Hoehe des Balkens
  10606.  
  10607. Ausgabe 
  10608.  
  10609. keine
  10610.  
  10611. Beschreibung 
  10612.  
  10613. Wenn Sie die Balken an den raendern des zugewiesenen Fensters anzeigen
  10614. moechten, geben sie einfach fuer die Variablen x, y, len und height
  10615. jeweils den Wert Null an.
  10616.  
  10617. Bespiel    DEF_SCROLLBAR 
  10618.  
  10619. Siehe 
  10620.  
  10621.  
  10622. ΓòÉΓòÉΓòÉ 181. DEF_SLIDER ΓòÉΓòÉΓòÉ
  10623.  
  10624. Funktion 
  10625.  
  10626. Es wir ein Sliderobjekt definiert. (dt. SLIDER = bewegender Balken)
  10627.  
  10628. Syntax 
  10629.  
  10630. DEF_SLIDER id_string,x,y,len,update
  10631.  
  10632. Eingabe 
  10633.  
  10634. id_string      Objektkennung
  10635. x,y            x/y-Position des Objekts im zugewiesenen Fenster
  10636. len            Laenge des Objekts
  10637. update         Anzahl der Prozentschritte, bis der Balken auf 100% ist
  10638.  
  10639. Ausgabe 
  10640.  
  10641. keine
  10642.  
  10643. Beschreibung 
  10644.  
  10645. Dieses Objekt wird genutzt, um eine fortschreitende Taetigkeit am
  10646. Bildschirm graphisch darzustellen (z.B. Formatieren von Disketten).
  10647.  
  10648. Bespiel    DEF_SLIDER 
  10649.  
  10650. Siehe 
  10651.  
  10652.  
  10653. ΓòÉΓòÉΓòÉ 182. DEF_SPIN ΓòÉΓòÉΓòÉ
  10654.  
  10655. Funktion 
  10656.  
  10657. ************************ UNBEKANNT **********************
  10658.  
  10659. Syntax 
  10660.  
  10661.  
  10662. Eingabe 
  10663.  
  10664.  
  10665.  
  10666. Ausgabe 
  10667.  
  10668.  
  10669.  
  10670. Beschreibung 
  10671.  
  10672. ************************ UNBEKANNT **********************
  10673.  
  10674. Bespiel    DEF_SPIN 
  10675.  
  10676. Siehe 
  10677.  
  10678.  
  10679. ΓòÉΓòÉΓòÉ 183. DEF_STATUSBAR ΓòÉΓòÉΓòÉ
  10680.  
  10681. Funktion 
  10682.  
  10683.  
  10684.  
  10685. Syntax 
  10686.  
  10687. DEF_STATUSBAR "id" , hoehe
  10688.  
  10689. Eingabe 
  10690.  
  10691. "id"          Objektkennung
  10692. hoehe         Zeilenzahl fuer die Statusbar
  10693.  
  10694. Ausgabe 
  10695.  
  10696.  
  10697.  
  10698. Beschreibung 
  10699.  
  10700. Definiert eine Statuszeile am unteren Fensterrand.
  10701. An die Statuszeile k╨ñnnen folgende Objekte addiert
  10702. werden:
  10703. String-, Datums-, Zeit- und Nummernfelder.
  10704. Weiterhin k╨ñnnen Buttons und Icons addiert werden.
  10705. Die Statuszeile dient als Meldefenster und liefert
  10706. keine R╨æckgabewerte.
  10707.  
  10708. Bespiel    DEF_STATUSBAR 
  10709.  
  10710. Siehe 
  10711.  
  10712. DEF_TOOLBAR
  10713. DEF_WINDOW
  10714. DEF_WINDOW_ST
  10715.  
  10716.  
  10717. ΓòÉΓòÉΓòÉ 184. DEF_STRING ΓòÉΓòÉΓòÉ
  10718.  
  10719. Funktion 
  10720.  
  10721. Erstellt eine Eingabemaske fuer einen Text.
  10722.  
  10723. Syntax 
  10724.  
  10725. DEF_STRING id_string,x,y,eingabelaenge, text, anzeigelaenge
  10726.  
  10727. Eingabe 
  10728.  
  10729. id_string      Objektkennung
  10730. x,y            x/y-Position der Maske im zugewiesenen Fenster
  10731. eingabelaenge  maximale Eingabelaenge fuer das Objekt
  10732. text           Vorgabetext (erscheint bei Aufruf der Maske)
  10733. anzeigelaenge  Auf dem Bildschirm angezeigte Objektlaenge, und
  10734.                mu╤ü kleiner als  {eingabelaenge}  sein.
  10735.  
  10736. Ausgabe 
  10737.  
  10738. keine
  10739.  
  10740. Beschreibung 
  10741.  
  10742. Hiermit wird eine Text-Eingabemaske erstellt. Es erfolgt aber keine
  10743. automatische Formatierung wie bei DEF_INPUT. Es wird nur ein Objekt
  10744. mit der in wert vorgegebenen Laenge erstellt. Sollte die maximale
  10745. Eingabelaenge (ueber LEN definiert) laenger sein als dieser Wert, so
  10746. wird der Objektinhalt gegebenenfallls durch das Eingabefeld gescrollt.
  10747.  
  10748.  
  10749. Bespiel    DEF_STRING 
  10750.  
  10751. Siehe 
  10752.  
  10753. DEF_INPUT_DATE
  10754. DEF_INPUT_TIME
  10755. DEF_INPUT
  10756. DEF_NUMBER
  10757.  
  10758.  
  10759. ΓòÉΓòÉΓòÉ 185. DEF_SYSTEM_BUTTON ΓòÉΓòÉΓòÉ
  10760.  
  10761. Funktion 
  10762.  
  10763. Definition eines Systemdruckknopfs.
  10764.  
  10765. Syntax 
  10766.  
  10767. DEF_SYSTEM_BUTTON id_string, Flag
  10768.  
  10769. Eingabe 
  10770.  
  10771. id_string      Kennung des Objekts
  10772. Flag           Art des Systemmenues:
  10773.                flag = 0:  Automatische Definition der Menuepunkte.
  10774.                flag <>0:  Menuepunkte sind noch nicht definiert.
  10775.  
  10776. Ausgabe 
  10777.  
  10778. keine
  10779.  
  10780. Beschreibung 
  10781.  
  10782. Das Objekt Systembutton dient dazu, die Operationen fuer ein Fenster
  10783. (z.B. Groesse, Verschieben, Verkleinern, Schlie_en) ueber ein Popup-
  10784. Menue aufzurufen. Das Objekt befindet sich immer in der linken oberen
  10785. Ecke eines Fensters. Mit einen Doppelklick auf dem Systembutton
  10786. schliesst man das Fenster.
  10787.  
  10788. Bespiel    DEF_SYSTEM_BUTTON 
  10789.  
  10790. Siehe 
  10791.  
  10792.  
  10793. ΓòÉΓòÉΓòÉ 186. DEF_TABLE ΓòÉΓòÉΓòÉ
  10794.  
  10795. Funktion 
  10796.  
  10797. ************************ UNBEKANNT **********************
  10798.  
  10799. Syntax 
  10800.  
  10801.  
  10802. Eingabe 
  10803.  
  10804.  
  10805.  
  10806. Ausgabe 
  10807.  
  10808.  
  10809.  
  10810. Beschreibung 
  10811.  
  10812. ************************ UNBEKANNT **********************
  10813.  
  10814. Bespiel    DEF_TABLE 
  10815.  
  10816. Siehe 
  10817.  
  10818.  
  10819. ΓòÉΓòÉΓòÉ 187. DEF_TABLE_REC ΓòÉΓòÉΓòÉ
  10820.  
  10821. Funktion 
  10822.  
  10823. ************************ UNBEKANNT **********************
  10824.  
  10825. Syntax 
  10826.  
  10827.  
  10828. Eingabe 
  10829.  
  10830.  
  10831.  
  10832. Ausgabe 
  10833.  
  10834.  
  10835.  
  10836. Beschreibung 
  10837.  
  10838. ************************ UNBEKANNT **********************
  10839.  
  10840. Bespiel    DEF_TABLE_REC 
  10841.  
  10842. Siehe 
  10843.  
  10844.  
  10845. ΓòÉΓòÉΓòÉ 188. DEF_TEXT ΓòÉΓòÉΓòÉ
  10846.  
  10847. Funktion 
  10848.  
  10849. Eingabe mehrerer Zeilen Text.
  10850.  
  10851. Syntax 
  10852.  
  10853. DEF_TEXT id_string, x,y,breite,hoehe,anzahl,array
  10854.  
  10855. Eingabe 
  10856.  
  10857. id_string       Objektidentifikation
  10858. x,y             x-y Position des Objektes
  10859. breite,hoehe    Breite/Hoehe des Objekts
  10860. anzahl          Anzahl der Bytes der Eingabe
  10861. array           Zeichenketten array mit Vorgabe fuer den Inhalt
  10862.  
  10863. Ausgabe 
  10864.  
  10865. keine
  10866.  
  10867. Beschreibung 
  10868.  
  10869. Mit diesem Befehl definieren Sie eine Texteingabebox. Die max.
  10870. zulaessigen Eingabezeichen betragen 64 KB pro Textbox. Die Editier-
  10871. funktionen in der Textbox entsprechen den Funktionen der Zwischen-
  10872. ablage unter Windows oder dem Systemeditor unter OS/2.
  10873.  
  10874. Bespiel    DEF_TEXT 
  10875.  
  10876. Siehe 
  10877.  
  10878.  
  10879. ΓòÉΓòÉΓòÉ 189. DEF_TITEL ΓòÉΓòÉΓòÉ
  10880.  
  10881. Funktion 
  10882.  
  10883. Definition eines Titels fuer ein Fenster etc.
  10884.  
  10885. Syntax 
  10886.  
  10887. DEF_TITEL Id_string, "Titel"
  10888.  
  10889. Eingabe 
  10890.  
  10891. Id_string     Kennung fuer Objekt
  10892. "Titel"       ueberschrift
  10893.  
  10894. Ausgabe 
  10895.  
  10896. keine
  10897.  
  10898. Beschreibung 
  10899.  
  10900. Es wird ein Objekt definiert, welches einem anderen Objekt
  10901. eine Ueberschrift hinzufuegt.
  10902.  
  10903. Bespiel    DEF_TITEL 
  10904.  
  10905. Siehe 
  10906.  
  10907. DEF_WINDOW
  10908.  
  10909.  
  10910. ΓòÉΓòÉΓòÉ 190. DEF_TOOLBAR ΓòÉΓòÉΓòÉ
  10911.  
  10912. Funktion 
  10913.  
  10914. Definition einer Objektleiste fuer Push-Buttons
  10915.  
  10916. Syntax 
  10917.  
  10918. DEF_TOOLBAR Id_string, x, y, xr, yr
  10919.  
  10920. Eingabe 
  10921.  
  10922. Id_string   Kennung des Objekts
  10923. x, y        Position des linken oberen Ecks des Objekts im Fenster
  10924. xr, yr      Laenge und Breite der Toolbar
  10925.  
  10926. Ausgabe 
  10927.  
  10928.  
  10929. Beschreibung 
  10930.  
  10931. Eine Toolbar wird direkt unter dem oberen Fensterrand angeordnet.
  10932. Es koennen mehrere Toolbar-Objekte an ein Fenster angefuegt werden.
  10933. Objekte, die an ein Toolbar-Objekt angefuegt werden, werden auto-
  10934. matisch in das Toolbar-Objekt eingepasst.
  10935.  
  10936. Bespiel    DEF_TOOLBAR 
  10937.  
  10938. Siehe 
  10939.  
  10940. DEF_STATUSBAR
  10941.  
  10942.  
  10943. ΓòÉΓòÉΓòÉ 191. DEF_WINDOW ΓòÉΓòÉΓòÉ
  10944.  
  10945. Funktion 
  10946.  
  10947. Definition eines Fensters
  10948.  
  10949. Syntax 
  10950.  
  10951. def_window id_string, x, y, xr, yr [,icon,icontext,timerwert]
  10952.  
  10953. Eingabe 
  10954.  
  10955. id_string    Kennung des Objekts (max. 50 Zeichen)
  10956. x, y         linke x, y Position des Fensters auf dem Monitor
  10957. xr, yr       Relative Groesse des Fensters (Laenge/Breite)
  10958. icon         Name eines aus einer Dat-Datei
  10959. icontext     Text des Fensters bei Symbolgr╨ñ╤üe.
  10960. timerwert    Anzahl Ticks, wann Timerevent aufgerufen wird.
  10961.  
  10962. Ausgabe 
  10963.  
  10964. keine
  10965.  
  10966. Beschreibung 
  10967.  
  10968. Definiert ein Fensterobjekt. Diesem Objekt muessen aber noch weitere
  10969. Objekte wie Fensterrand, Systembutton und Titel zugeordnet werden,
  10970. um ein funktionsfaehiges Fenster zu erhalten. Dabei ist die Reihenfolge
  10971. der Unterobjekte wichtig.
  10972.  
  10973. TIMER-Funktion :
  10974.  
  10975. Als Beispiel siehe TIMER.KIM.
  10976. Unter KIM ist es nun m╨ñglich in einen bestimmten Intervall auf ein
  10977. Ereignis zu reagieren. Hierf╨ær wurde der Befehl DEF_WINDOW erweitert.
  10978. Als Zeitintervall dient ein Tick. (18.2 Ticks in der Sekunde)
  10979. Wird der Zeitwert erreicht, wird die Funktion id_string_timer()
  10980. aufgerufen. Die Timerfunktion kann man ╨æber
  10981. EVENT_ON_ITEM id_string,"timer off" ausschalten und ╨æber
  10982. EVENT_ON_ITEM id_string,"timer on" anschalten.
  10983.  
  10984. ICON-Funktion :
  10985.  
  10986. Wenn ein Fenster auf Symbolgr╨ñ╤üe verkleinert wird, kann man ein Icon aus
  10987. einer DAT-Datei angeben. Dieses wird mit dem entsprechenden <iconText>
  10988. dargestellt.
  10989.  
  10990. Bespiel    DEF_WINDOW 
  10991.  
  10992. Siehe 
  10993.  
  10994. DEF_WINDOW_ST
  10995.  
  10996.  
  10997. ΓòÉΓòÉΓòÉ 192. DEF_WINDOW_ST ΓòÉΓòÉΓòÉ
  10998.  
  10999. Funktion 
  11000.  
  11001. Erstellt ein Standardfenster mit System-, Maximierungs-,
  11002. Minimierungsbutton und Rahmen sowie Fensterueberschrift.
  11003.  
  11004. Syntax 
  11005.  
  11006. DEF_WINDOW_ST id_string, x, y, xr, yr, titel$
  11007.  
  11008. Eingabe 
  11009.  
  11010. id_string    Bezeichnung des Fensters
  11011. x, y         linke x, y Position des Fensters auf dem Monitor
  11012. xr, yr       Relative Groesse des Fensters (Laenge/Breite)
  11013. titel$       ueberschrift des Fensters
  11014.  
  11015. Ausgabe 
  11016.  
  11017. keine
  11018.  
  11019. Beschreibung 
  11020.  
  11021. Es wird ein Fenster mit obigen Objekten erstellt, ohne dass diese
  11022. gesondert hinzugefuegt werden muessen. Dadurch verlieren Sie aber
  11023. die Moeglichkeit der individuellen Erstellung eines Fensters.
  11024.  
  11025. Bespiel    DEF_WINDOW_ST 
  11026.  
  11027. Siehe 
  11028.  
  11029. DEF_WINDOW
  11030.  
  11031.  
  11032. ΓòÉΓòÉΓòÉ 193. DESTROY ΓòÉΓòÉΓòÉ
  11033.  
  11034. Funktion 
  11035.  
  11036. Loescht allle Elemente eines Objekts.
  11037.  
  11038. Syntax 
  11039.  
  11040. DESTROY "id"
  11041.  
  11042. Eingabe 
  11043.  
  11044. "id"            Objekt
  11045.  
  11046. Ausgabe 
  11047.  
  11048. nil
  11049.  
  11050. Beschreibung 
  11051.  
  11052. Alle Objekte einer Liste werden gel╨ñscht. Dabei ist "id" die
  11053. Objekt-ID der Liste.
  11054. Achtung !
  11055. ---------
  11056. Wenn Elemente eines Objekts (z.B. Liste) gel╨ñscht werden,
  11057. dann k╨ñnnen diese Elemente nicht mehr an ein Objekt addiert
  11058. werden, ohne das Sie vorher neu deklariert wurden. (DEF_...)
  11059. Wird dies trotzdem versucht, erhalten Sie eine Systemfehler-
  11060. meldung.
  11061.  
  11062. Bespiel    DESTROY 
  11063.  
  11064. Siehe 
  11065.  
  11066.  
  11067. ΓòÉΓòÉΓòÉ 194. DRAWTEXT ΓòÉΓòÉΓòÉ
  11068.  
  11069. Funktion 
  11070.  
  11071. Erstellt einen Text im Graphikmodus.
  11072.  
  11073. Syntax 
  11074.  
  11075. DRAWTEXT id_string, x, y, fcolor, hcolor, fill, width, xor, fontname
  11076.  
  11077. Eingabe 
  11078.  
  11079. id_string            Kennung des Objekts
  11080. x,y        Position der linken oberen Objektecke auf dem Bildschirm
  11081. fcolor     Nummer der Farbe der Textlinien (aus Farbpalette)
  11082. hcolor     Nummer der Fnllfarbe fuer das Objekt (aus Farbpalette)
  11083. fill       Angabe, ob das Objekt ausgefuellt werden soll:
  11084.            fill=1: Objekt wird gefuellt
  11085.            fill=0: Objekt bleibt leer
  11086. width      Strichdicke  der Objektlinien
  11087. xor        Angabe, ob sich das Objekt von gleichfabrigem
  11088.            Hintergrund abheben soll:
  11089.            xor=1: ja
  11090.            xor=0: nein
  11091. fontname   Name des zu verwendenen Textfonts (""=Systemfont)
  11092.  
  11093. Ausgabe 
  11094.  
  11095. keine
  11096.  
  11097. Beschreibung 
  11098.  
  11099. Es kann ein Text im Graphikmodus erstellt werden. Dieser ist flexibler
  11100. zu bearbeiten und kann daher zur optischen Verschoenerung Ihrer Ober-
  11101. flaeche herangezogen werden. Unter OS/2 besitzen Sie die Moeglichkeit,
  11102. einen zuvor ueber LOADFONT geladenenen Textfont anstelle des System-
  11103. fonts des Betriebssystemes zu verwenden. Das Graphikobjekt verschwindet
  11104. bei einer Fensteraktualisierung (Repositionierung, Neuzeichnung) und
  11105. muss dann manuell neu erstellt werden.
  11106.  
  11107. Bespiel    DRAWTEXT 
  11108.  
  11109. Siehe 
  11110.  
  11111.  
  11112. ΓòÉΓòÉΓòÉ 195. ELLIPSE ΓòÉΓòÉΓòÉ
  11113.  
  11114. Funktion 
  11115.  
  11116. Zeichnet eine Ellipse auf dem Bildschirm.
  11117.  
  11118. Syntax 
  11119.  
  11120. ELLIPSE id,x,y, sW, eW, xR, yR, fcolor, hcolor, fill, width, xor
  11121.  
  11122. Eingabe 
  11123.  
  11124. id            Kennung des Objekts
  11125. x,y           Position der linken oberen Objektecke auf dem Bildschirm
  11126. sW            Winkelwert, bei dem das Objekt beginnen soll
  11127. eW            Winkelwert, bei dem das Objekt enden soll
  11128. xR            Objektradius in Richtung der x-Koordinate
  11129. yR            Objektradius in Richtung der y-Koordinate
  11130. fcolor        Nummer der Farbe der Objektlinien (aus Farbpalette)
  11131. hcolor        Nummer der Fuellfarbe fuer das Objekt (aus Farbpalette)
  11132. fill          Angabe, ob das Objekt ausgefuellt werden soll:
  11133.               fill=1: Objekt wird gefuellt;
  11134.               fill=0: Objekt bleibt leer
  11135. width         Strichdicke  der Objektlinien
  11136. xor           Angabe, ob sich das Objekt von gleichfabrigem Hintergrund
  11137.  abheben soll: xor=1: ja; xor=0: nein
  11138.  
  11139. Ausgabe 
  11140.  
  11141. keine
  11142.  
  11143. Beschreibung 
  11144.  
  11145. Es kann eine Ellipse, ein Kreis oder ein Teil von diesen Objekten
  11146. erstellt werden:
  11147. xRadius=yRadius,  startAngle=0, endAngle=360:  Vollkreis
  11148. xRadius<>yRadius, startAngle=0, endAngle=360:  Vollellipse
  11149. xRadius=yRadius,  startAngle=0, endAngle<>360: Teil eines Kreises
  11150. xRadius<>yRadius, startAngle=0, endAngle<>360: Teil einer Ellipse
  11151. Das Graphikobjekt verschwindet bei einer Fensteraktualisierung
  11152. (Repositionierung, Neuzeichnung) und muss dann manuell neu erstellt
  11153. werden.
  11154.  
  11155. Bespiel    ELLIPSE 
  11156.  
  11157. Siehe 
  11158.  
  11159.  
  11160. ΓòÉΓòÉΓòÉ 196. FIND_ITEM ΓòÉΓòÉΓòÉ
  11161.  
  11162. Funktion 
  11163.  
  11164. Such nach Objekten
  11165.  
  11166. Syntax 
  11167.  
  11168. FIND_ITEM
  11169.  
  11170. Eingabe 
  11171.  
  11172.  
  11173.  
  11174. Ausgabe 
  11175.  
  11176.  
  11177.  
  11178. Beschreibung 
  11179.  
  11180. ************************ UNBEKANNT **********************
  11181.  
  11182. Bespiel    FIND_ITEM 
  11183.  
  11184. Siehe 
  11185.  
  11186.  
  11187. ΓòÉΓòÉΓòÉ 197. GET_COUNT ΓòÉΓòÉΓòÉ
  11188.  
  11189. Funktion 
  11190.  
  11191. Anzahl von Objekten ermitteln.
  11192.  
  11193. Syntax 
  11194.  
  11195. GET_COUNT  id_string,anzahl
  11196.  
  11197. Eingabe 
  11198.  
  11199. id_string     Objektkennung
  11200.  
  11201. Ausgabe 
  11202.  
  11203. anzahl        Anzahl der Objekte
  11204.  
  11205. Beschreibung 
  11206.  
  11207. Ermittelt die Anzahl der Elemente in einem Fenster, Listbox oder Combobox.
  11208. Wird die Funktion auf ein Objekt ohne Listeigenschaft angewendet,
  11209. erh╨ölt man den Wert -1 als R╨æckgabe.
  11210.  
  11211. Bespiel    GET_COUNT 
  11212.  
  11213. Siehe 
  11214.  
  11215. ADD_ITEM_ARRAY
  11216. GET_ITEM_ARRAY
  11217. SUB_ITEM
  11218. SUB_ITEM_ARRAY
  11219.  
  11220.  
  11221. ΓòÉΓòÉΓòÉ 198. GET_ITEM ΓòÉΓòÉΓòÉ
  11222.  
  11223. Funktion 
  11224.  
  11225. Inhalt eines Objekts wird gelesen.
  11226.  
  11227. Syntax 
  11228.  
  11229. GET_ITEM id_string,inhalt$ [,index]
  11230.  
  11231. Eingabe 
  11232.  
  11233. id_string     Objektkennung
  11234. index         Position in einer Combobox oder Liste
  11235.  
  11236. Ausgabe 
  11237.  
  11238. inhalt$       Variable, welcher der Inhalt des Objekts uebergeben wird
  11239.  
  11240. Beschreibung 
  11241.  
  11242. Sie koennen hiermit den Inhalt eines Objekts ermitteln.
  11243. Es ist m╨ñglich den Inhalt des n-ten Element einer Listbox oder Combox
  11244. zu ermitteln. ( Ab Basis 1 )
  11245.  
  11246. Bespiel    GET_ITEM 
  11247.  
  11248. Siehe 
  11249.  
  11250. ADD_ITEM_ARRAY
  11251. GET_ITEM_ARRAY
  11252. SUB_ITEM
  11253. SUB_ITEM_ARRAY
  11254.  
  11255.  
  11256. ΓòÉΓòÉΓòÉ 199. GET_ITEM_ARRAY ΓòÉΓòÉΓòÉ
  11257.  
  11258. Funktion 
  11259.  
  11260. Aus Gruppe von Objekten wird der Inhalt ausgelesen.
  11261.  
  11262. Syntax 
  11263.  
  11264. GET_ITEM_ARRAY id_string,array,start,ende
  11265.  
  11266. Eingabe 
  11267.  
  11268. id_string     Objektkennung(gilt hier fuer IDstart bis IDende)
  11269. array         Feldarray mit Werten fuer IDstart...IDende
  11270. start         Erstes zu fuellendes Feld im Array
  11271. ende          Letztes zu fuellendes Feld im Array
  11272.  
  11273. Ausgabe 
  11274.  
  11275. keine
  11276.  
  11277. Beschreibung 
  11278.  
  11279. Wird genutzt, um mehrere Werte schnell aus einem Objektarray auszulesen.
  11280.  
  11281. Bespiel    GET_ITEM_ARRAY 
  11282.  
  11283. Siehe 
  11284.  
  11285. SET_ITEM_ARRAY
  11286.  
  11287.  
  11288. ΓòÉΓòÉΓòÉ 200. GET_ITEM_XY ΓòÉΓòÉΓòÉ
  11289.  
  11290. Funktion 
  11291.  
  11292. Ermittelt die exakte Position eines Objekts auf der Oberflaeche.
  11293.  
  11294. Syntax 
  11295.  
  11296. GET_ITEM_XY id_string$, x, y, breite, hoehe
  11297.  
  11298. Eingabe 
  11299.  
  11300. id_string$     Kennung des zu ueberpruefenden Objekts
  11301.  
  11302. Ausgabe 
  11303.  
  11304. x,y            Variablen mit x- und y-Werten fuer die linke
  11305.                obere Objektecke
  11306. breite         Variable mit der Objektbreite
  11307. hoehe          Variable mit der Objekthoehe
  11308.  
  11309. Beschreibung 
  11310.  
  11311. Die Anweisung dient zur exakten Bestimmung der Position eines Objektes.
  11312. Die Werte werden in normalen Koordinaten zurueckgegeben (nicht in Pixel-
  11313. koordinaten).
  11314.  
  11315. Bespiel    GET_ITEM_XY 
  11316.  
  11317. Siehe 
  11318.  
  11319.  
  11320. ΓòÉΓòÉΓòÉ 201. GETCLIP ΓòÉΓòÉΓòÉ
  11321.  
  11322. Funktion 
  11323.  
  11324. GETCLIP liest den Inhalt des Clipboards
  11325.  
  11326. Syntax 
  11327.  
  11328. GETCLIP var$
  11329.  
  11330. Eingabe 
  11331.  
  11332.  
  11333.  
  11334. Ausgabe 
  11335.  
  11336. var$    Variable in die, der Inhalt geschrieben wird.
  11337.  
  11338. Beschreibung 
  11339.  
  11340. F╨ær das Lesen des Clipboardinhalts sollten Sie
  11341. eine Memovariable benutzen, da andere Variablen
  11342. auf 255 Zeichen beschr╨önkt sind !
  11343.  
  11344. Bespiel    GETCLIP 
  11345.  
  11346. Siehe 
  11347.  
  11348. SETCLIP
  11349.  
  11350.  
  11351. ΓòÉΓòÉΓòÉ 202. LINE ΓòÉΓòÉΓòÉ
  11352.  
  11353. Funktion 
  11354.  
  11355. Zeichnet eine Linie auf dem Bildschirm.
  11356.  
  11357. Syntax 
  11358.  
  11359. LINE id,x,y, xr, yr, color, width
  11360.  
  11361. Eingabe 
  11362.  
  11363. id       Kennung des Objekts
  11364. x,y      Position des Anfangspunktes der Linie
  11365. xr, yr   Position des Endpunktes der Linie
  11366. color    Nummer der Fnllfarbe fuer das Objekt (aus Farbpalette)
  11367. width    Strichdicke  der Objektlinie
  11368.  
  11369. Ausgabe 
  11370.  
  11371. keine
  11372.  
  11373. Beschreibung 
  11374.  
  11375. Es kann eine Linie erstellt werden. Das Graphikobjekt geht bei
  11376. jeder Fensteraktualisierung (Repositionierung, Neuzeichnung)
  11377. verloren und muss dann manuell neu definiert werden.
  11378.  
  11379. Bespiel    LINE 
  11380.  
  11381. Siehe 
  11382.  
  11383. ELLIPSE
  11384.  
  11385.  
  11386. ΓòÉΓòÉΓòÉ 203. LOAD_DAT ΓòÉΓòÉΓòÉ
  11387.  
  11388. Funktion 
  11389.  
  11390. Es wird eine Objekt-Bibliothek geladen.
  11391.  
  11392. Syntax 
  11393.  
  11394. LOAD_DAT datei,  a
  11395.  
  11396. Eingabe 
  11397.  
  11398. datei     Name der zu ladenden Datei, Pfadangabe moeglich.
  11399.  
  11400. Ausgabe 
  11401.  
  11402. a         Variable, die das Ergebnis des Vorgangs enthaelt:
  11403.           a=1:   ok
  11404.           a=-1:  Datei nicht gefunden.
  11405.  
  11406. Beschreibung 
  11407.  
  11408. Es wird eine Objekt-Bibliothek geladen. Eine Objekt-Bibliothek
  11409. beinhaltet mehrere Objekte wie Comboboxen, ICONS, STRINGEINGABEN usw..
  11410.  
  11411. Bespiel    LOAD_DAT 
  11412.  
  11413. Siehe 
  11414.  
  11415.  
  11416. ΓòÉΓòÉΓòÉ 204. LOAD_FROM_DAT ΓòÉΓòÉΓòÉ
  11417.  
  11418. Funktion 
  11419.  
  11420. ************************ UNBEKANNT **********************
  11421.  
  11422. Syntax 
  11423.  
  11424. LOAD_FROM_DAT datei,  ???
  11425.  
  11426. Eingabe 
  11427.  
  11428. datei     Name der zu ladenden Datei, Pfadangabe moeglich.
  11429.  
  11430. Ausgabe 
  11431.  
  11432.  
  11433.  
  11434.  
  11435.  
  11436. Beschreibung 
  11437.  
  11438. ************************ UNBEKANNT **********************
  11439.  
  11440.  
  11441. Bespiel    LOAD_FROM_DAT 
  11442.  
  11443. Siehe 
  11444.  
  11445. STORE_IN_DAT
  11446.  
  11447.  
  11448. ΓòÉΓòÉΓòÉ 205. LOADFONT ΓòÉΓòÉΓòÉ
  11449.  
  11450. Funktion 
  11451.  
  11452. Definiert einen neuen Textfont.
  11453.  
  11454. Syntax 
  11455.  
  11456. LOADFONT id_string$, fontname$, size
  11457.  
  11458. Eingabe 
  11459.  
  11460. id_string$           Kennung des Fontobjekts
  11461. fontname$            Name des gewuenschten Textfonts
  11462. size                 Groesse des gewuenschten Textfonts
  11463.  
  11464. Ausgabe 
  11465.  
  11466. keine
  11467.  
  11468. Beschreibung 
  11469.  
  11470. Mit diesem Befehl wird ein neuer Textfont definiert.
  11471. Zur Auswahl stehen beispielsweise unter OS/2 folgende
  11472. Fonts in folgenden Groessen:
  11473.  
  11474. TMS RMN                      8,10,12,14,18,24
  11475. HELV                         8,10,12,14,18,24
  11476. COURIER                      8,10,12
  11477. SYSTEM MONOSPACE               10
  11478.  
  11479. Weitere zur Verfuegung stehende Fonts entnehmen Sie bitte
  11480. ihren Handbuechern zum entsprechenden Betriebssystem.
  11481. Um einen Objekt den so definierten Textfont zuzuweisen,
  11482. muessen Sie die id-Kennung des Fontobjekts als FLAG an den
  11483. Definitionsbefehl fuer das entsprechende Objekt anfuegen.
  11484.  
  11485. Bespiel    LOADFONT 
  11486.  
  11487. Siehe 
  11488.  
  11489.  
  11490. ΓòÉΓòÉΓòÉ 206. MSGBOX ΓòÉΓòÉΓòÉ
  11491.  
  11492. Funktion 
  11493.  
  11494. Erstellt ein MeldungsfensterMeldungsfenster mit entsprechenden Buttons.
  11495.  
  11496. Syntax 
  11497.  
  11498. MSGBOX text$, flag, rueck, Iconname
  11499.  
  11500. Eingabe 
  11501.  
  11502. text$        Text, der im MeldungsfensterMeldungsfenster erscheinen soll
  11503. flag         Definiert die Art und Anzahl der Kontrollschalter:
  11504. flag=1:      Es werden sowohl ein OK- als auch ein ABBRUCH-                              Button automatisch erstellt
  11505. flag=0:      Es wird nur ein OK-Button definiert
  11506. Iconname     Name des Icons aus der DAT-Datei, welches in das Fenster
  11507.              eingefuegt werden soll.
  11508.  
  11509. Ausgabe 
  11510.  
  11511. rueck        Gibt dem Programm zurueck, welcher Button gedrueckt wurde:
  11512.              rueck=1:     Der OK-Button wurde gedrueckt
  11513.              rueck=2      DER ABBRUCH-Button wurde betaetigt
  11514.  
  11515. Beschreibung 
  11516.  
  11517. Mit diesem Befehl erstellen Sie ein Meldungsfenster. Dieses ist bereits
  11518. vorgefertigt. Sie fuegen lediglich den entsprechenden Meldungstext ueber
  11519. text$ sowie falls gewnuescht ueber Iconname ein Icon aus einer DAT-Datei
  11520. ein. Des weiteren koennen Sie festlegen, ob nur ein OK-Button oder ein
  11521. OK- und ein ABBRUCH-Button erzeugt werden soll.
  11522.  
  11523. Bespiel    MSGBOX 
  11524.  
  11525. Siehe 
  11526.  
  11527.  
  11528. ΓòÉΓòÉΓòÉ 207. RECTANGLE ΓòÉΓòÉΓòÉ
  11529.  
  11530. Funktion 
  11531.  
  11532. Zeichnet ein Viereck auf dem Bildschirm.
  11533.  
  11534. Syntax 
  11535.  
  11536. RECTANGLE id,x,y, xr, yr, fcolor, hcolor, fill, width, xor
  11537.  
  11538. Eingabe 
  11539.  
  11540. id         Kennung des Objekts
  11541. x,y        Position der linken oberen Objektecke auf dem Bildschirm
  11542. xr         Breite des Vierecks
  11543. yr         Hoehe des Vierecks
  11544. fcolor     Nummer der Farbe der Objektlinien (aus Farbpalette)
  11545. hcolor     Nummer der Fnllfarbe fuer das Objekt (aus Farbpalette)
  11546. fill       Angabe, ob das Objekt ausgefuellt werden soll:
  11547.            fill=1: Objekt wird gefuellt;
  11548.            fill=0: Objekt bleibt leer
  11549. width      Strichdicke  der Objektlinien
  11550. xor        Angabe, ob sich das Objekt von gleichfabrigem
  11551.            Hintergrundabheben soll:
  11552.            xor=1: ja
  11553.            xor=0: nein
  11554.  
  11555. Ausgabe 
  11556.  
  11557. keine
  11558.  
  11559. Beschreibung 
  11560.  
  11561. Es kann ein Rechteck oder ein Quadrat erstellt werden:
  11562. xr=yr:      Quadrat
  11563. xr<>yr:     Rechteck
  11564. Das Graphikobjekt geht bei jeder Fensteraktualisierung (Repositionierung,
  11565. Neuzeichnung) verloren und muss dann manuell neu definiert werden.
  11566.  
  11567. Bespiel    RECTANGLE 
  11568.  
  11569. Siehe 
  11570.  
  11571.  
  11572. ΓòÉΓòÉΓòÉ 208. SEARCH_MLE ΓòÉΓòÉΓòÉ
  11573.  
  11574. Funktion 
  11575.  
  11576.  
  11577.  
  11578. Syntax 
  11579.  
  11580. SEARCH_MLE id$,suchtext$,mark,case,start,zeile$,pos
  11581.  
  11582. Eingabe 
  11583.  
  11584. id$        ID eines DEF_TEXT Objekts
  11585. suchtext$    Text der gesucht wird
  11586. mark        0 = gefundenen Text markieren
  11587.             1 = Text nicht markieren
  11588. case        0 = Gro╤ü/Kleinschreibung beachten
  11589.             1 = nicht beachten
  11590. start        -1 = aktuelle Cursorposition
  11591.             sonst Position
  11592. zeile$       Aktuelle Zeile nach Suche
  11593. pos        Aktuelle Position nach Suche
  11594.             wird -1 ╨æbergeben vor Suchbeginn, dann erfolgt
  11595.             nur eine Suche ohne jeweilige Textpositionierung
  11596.  
  11597. Ausgabe 
  11598.  
  11599. keine
  11600.  
  11601. Beschreibung 
  11602.  
  11603. keine
  11604.  
  11605. Bespiel    SEARCH_MLE 
  11606.  
  11607. Siehe 
  11608.  
  11609.  
  11610. ΓòÉΓòÉΓòÉ 209. SET_ITEM ΓòÉΓòÉΓòÉ
  11611.  
  11612. Funktion 
  11613.  
  11614. Ein Text /Wert wird einem Objekt zugeordnet.
  11615.  
  11616. Syntax 
  11617.  
  11618. SET_ITEM id_string,text$
  11619.  
  11620. Eingabe 
  11621.  
  11622. id_string         Objektkennung
  11623. text$             Zuzuordnender Text
  11624.  
  11625. Ausgabe 
  11626.  
  11627. keine
  11628.  
  11629. Beschreibung 
  11630.  
  11631. Ein beliebiger Text kann einem geeigneten Objekt zugewiesen werden.
  11632.  
  11633. Bespiel    SET_ITEM 
  11634.  
  11635. Siehe 
  11636.  
  11637. SET_ITEM_ARRAY
  11638. SET_ITEM_STATUS
  11639.  
  11640.  
  11641. ΓòÉΓòÉΓòÉ 210. SET_ITEM_ARRAY ΓòÉΓòÉΓòÉ
  11642.  
  11643. Funktion 
  11644.  
  11645. Einer Gruppe von Objekten wird ein Inhalt zugewiesen.
  11646.  
  11647. Syntax 
  11648.  
  11649. SET_ITEM_ARRAY id_string,array,start,ende
  11650.  
  11651. Eingabe 
  11652.  
  11653. id_string     Objektkennung(gilt hier fuer IDstart bis IDende)
  11654. array         Feldarray mit Werten fuer IDstart...IDende
  11655. start         Erstes zu fuellendes Feld im Array
  11656. ende          Letztes zu fuellendes Feld im Array
  11657.  
  11658. Ausgabe 
  11659.  
  11660. keine
  11661.  
  11662. Beschreibung 
  11663.  
  11664. Wird genutzt, um mehrere Werte schnell einem Objektarray zuzuordnen.
  11665.  
  11666. Bespiel    SET_ITEM_ARRAY 
  11667.  
  11668. Siehe 
  11669.  
  11670. SET_ITEM
  11671. SET_ITEM_STATUS
  11672.  
  11673.  
  11674. ΓòÉΓòÉΓòÉ 211. SET_ITEM_STATUS ΓòÉΓòÉΓòÉ
  11675.  
  11676. Funktion 
  11677.  
  11678. Der Status eines Objekts wird veraendert.
  11679.  
  11680. Syntax 
  11681.  
  11682. SET_ITEM_STATUS id_string, status,...
  11683.  
  11684. Eingabe 
  11685.  
  11686. id_string      Objektkennung
  11687. status         Variable mit zuzuweisendem Statusflag
  11688.  
  11689. Ausgabe 
  11690.  
  11691. keine
  11692.  
  11693. Beschreibung 
  11694.  
  11695. Veraendert oder setzt den Status eines Objekts durch Hinzufuegen oder
  11696. Entfernen eines FLAGS.
  11697.  
  11698. Bespiel    SET_ITEM_STATUS 
  11699.  
  11700. Siehe 
  11701.  
  11702. SET_ITEM
  11703. SET_ITEM_ARRAY
  11704.  
  11705.  
  11706. ΓòÉΓòÉΓòÉ 212. SETCLIP ΓòÉΓòÉΓòÉ
  11707.  
  11708. Funktion 
  11709.  
  11710. SETCLIP schreibt den Inhalt von var$ in das Clipboard
  11711.  
  11712. Syntax 
  11713.  
  11714. SETCLIP var$
  11715.  
  11716. Eingabe 
  11717.  
  11718. var$    Variable aus der, der Inhalt gelesen wird.
  11719.  
  11720. Ausgabe 
  11721.  
  11722.  
  11723.  
  11724. Beschreibung 
  11725.  
  11726.  
  11727.  
  11728. Bespiel    SETCLIP 
  11729.  
  11730. Siehe 
  11731.  
  11732. GETCLIP
  11733.  
  11734.  
  11735. ΓòÉΓòÉΓòÉ 213. SETFOCUS ΓòÉΓòÉΓòÉ
  11736.  
  11737. Funktion 
  11738.  
  11739. Steuert die Reihenfolge von Eingabefeldern.
  11740.  
  11741. Syntax 
  11742.  
  11743. SETFOCUS "id"
  11744.  
  11745. Eingabe 
  11746.  
  11747. "id"           Objektkennung
  11748.  
  11749. Ausgabe 
  11750.  
  11751.  
  11752.  
  11753. Beschreibung 
  11754.  
  11755. Mit diesem Befehl kann der Cursor auf ein Eingabefeld
  11756. gesetzt werden.
  11757. Beispiel:  Ein Datensatz wurde ge╨öndert, der Benutzer
  11758. speichert die ╨₧nderung, hat jedoch in einem Feld einen
  11759. falschen Wert eingetragen. Nun wird der Cursor auf das
  11760. Objekt gestellt.
  11761.  
  11762.  
  11763. Bespiel    SETFOCUS 
  11764.  
  11765. Siehe 
  11766.  
  11767.  
  11768. ΓòÉΓòÉΓòÉ 214. STORE_IN_DAT ΓòÉΓòÉΓòÉ
  11769.  
  11770. Funktion 
  11771.  
  11772. ************************ UNBEKANNT **********************
  11773.  
  11774. Syntax 
  11775.  
  11776. STORE_IN_DAT
  11777.  
  11778. Eingabe 
  11779.  
  11780.  
  11781.  
  11782. Ausgabe 
  11783.  
  11784.  
  11785. ************************ UNBEKANNT **********************
  11786.  
  11787.  
  11788. Beschreibung 
  11789.  
  11790.  
  11791.  
  11792.  
  11793. Bespiel    STORE_IN_DAT 
  11794.  
  11795. Siehe 
  11796.  
  11797. LOAD_FROM_DAT
  11798.  
  11799.  
  11800. ΓòÉΓòÉΓòÉ 215. SUB_ITEM ΓòÉΓòÉΓòÉ
  11801.  
  11802. Funktion 
  11803.  
  11804. Ein Element wird von einem Objekt entfernt.
  11805.  
  11806. Syntax 
  11807.  
  11808. SUB_ITEM "id1","id2"
  11809.  
  11810. Eingabe 
  11811.  
  11812. "id1"            Master-Objektkennung
  11813. "id2"            Slave-Objektkennung
  11814.  
  11815. Ausgabe 
  11816.  
  11817. keine
  11818.  
  11819. Beschreibung 
  11820.  
  11821. Umgekehrte Funktion von ADD_ITEM !
  11822.  
  11823. Bespiel    SUB_ITEM 
  11824.  
  11825. Siehe 
  11826.  
  11827. ADD_ITEM
  11828. ADD_ITEM_ARRAY
  11829. SUB_ITEM_ARRAY
  11830.  
  11831.  
  11832. ΓòÉΓòÉΓòÉ 216. SUB_ITEM_ARRAY ΓòÉΓòÉΓòÉ
  11833.  
  11834. Funktion 
  11835.  
  11836. Entfernt ein Array von Elementen von einen Objekt
  11837.  
  11838. Syntax 
  11839.  
  11840. SUB_ITEM_ARRAY "id","entfernen",von,bis
  11841.  
  11842. Eingabe 
  11843.  
  11844. "id"         Mutterobjekt
  11845. "entfernen   Kindobjekt
  11846. von          Erstes Objekt (Zahl)
  11847. bis          Letztes Objekt (Zahl)
  11848.  
  11849. Ausgabe 
  11850.  
  11851. keine
  11852.  
  11853. Beschreibung 
  11854.  
  11855. Mit diesem Befehl entfernen Sie schnell mehrere Objekt
  11856. von einem Objekt.
  11857.  
  11858. Bespiel    SUB_ITEM_ARRAY 
  11859.  
  11860. Siehe 
  11861.  
  11862.  
  11863. ΓòÉΓòÉΓòÉ 217. TEXTHEIGHT ΓòÉΓòÉΓòÉ
  11864.  
  11865. Funktion 
  11866.  
  11867. Ermittelt die maximale Hoehe eines in ein Objekt passendes Textfonts.
  11868.  
  11869. Syntax 
  11870.  
  11871. TEXTHEIGHT id_string$, text$, hoehe
  11872.  
  11873. Eingabe 
  11874.  
  11875. id_string$   Kennung des zu ueberpruefenden Objekts
  11876. text$        Variable mit der zur ueberpruefung verwendeten Zeichenkette
  11877.  
  11878. Ausgabe 
  11879.  
  11880. hoehe        Variable mit dem ermittelten Fontwert
  11881.  
  11882. Beschreibung 
  11883.  
  11884. Dieser Befehl dient zur Ermittlung des maximal in ein Objekt passenden
  11885. Textfonts. Als Ueberpruefungszeichenkette gibt man in text$ am besten
  11886. "Tyg" vor.
  11887.  
  11888. Bespiel    TEXTHEIGHT 
  11889.  
  11890. Siehe 
  11891.  
  11892. TEXTWIDTH
  11893.  
  11894.  
  11895. ΓòÉΓòÉΓòÉ 218. TEXTWIDTH ΓòÉΓòÉΓòÉ
  11896.  
  11897. Funktion 
  11898.  
  11899. Ermittelt die maximale Breite eines in ein Objekt passendes Textfonts.
  11900.  
  11901. Syntax 
  11902.  
  11903. TEXTWIDTH id_string$, text$, breite
  11904.  
  11905. Eingabe 
  11906.  
  11907. id_string$        Kennung des zu ueberpruefenden Objekts
  11908. text$             Variable mit der zur ueberpruefung verwendeten
  11909.                   Zeichenkette.
  11910.  
  11911. Ausgabe 
  11912.  
  11913. breite            Variable mit dem ermittelten Fontwert
  11914.  
  11915. Beschreibung 
  11916.  
  11917. Dieser Befehl dient zur Ermittlung des maximal in ein Objekt passenden
  11918. Textfonts. Als Ueberpruefungszeichenkette gibt man in text$ am besten
  11919. "Tyg" vor.
  11920.  
  11921. Bespiel    TEXTWIDTH 
  11922.  
  11923. Siehe 
  11924.  
  11925. TEXTHEIGHT
  11926.  
  11927.  
  11928. ΓòÉΓòÉΓòÉ 219. WINSENTMSG ΓòÉΓòÉΓòÉ
  11929.  
  11930. Funktion 
  11931.  
  11932. Alle Funktionen unter OS/2 werden ╨æber Nachrichten gesteuert.
  11933. Mit diesem Befehl besteht die M╨ñglichkeit eine Nachricht an ein
  11934. Objekt zu schicken.
  11935.  
  11936. Syntax 
  11937.  
  11938. WINSENTMSG id$,MessageID,param1,param2,rueck
  11939.  
  11940. Eingabe 
  11941.  
  11942. id$            Objekt-ID$
  11943. MessageID      Beispiel : MLM_SETBACKCOLOR  = 468
  11944. param1/param2  Parameter, k╨ñnnen Zahlen oder Strings sein.
  11945.                Bei Zahlen sollte man den Wert in einer Variablen
  11946.                ╨æbergeben, wenn er negativ ist z.b -1
  11947.  
  11948. Ausgabe 
  11949.  
  11950. rueck          R╨æckgabewert
  11951.  
  11952. Beschreibung 
  11953.  
  11954. Verschiedene Nachrichten liefern als R╨æckgabewert, Zeiger auf
  11955. Stringfelder. So ein R╨æckgabetyp kann noch nicht verarbeitet
  11956. werden. Wichtig ! Nachrichten k╨ñnnen nur empfangen werden,
  11957. wenn das Objekt am Bildschirm ist (also ╨æber WIN_PAINT)
  11958.  
  11959. Bespiel    WINSENTMSG 
  11960.  
  11961. Siehe 
  11962.  
  11963.  
  11964. ΓòÉΓòÉΓòÉ 220. XCONV ΓòÉΓòÉΓòÉ
  11965.  
  11966. Funktion 
  11967.  
  11968. Umwandlung in Pixelkordinaten
  11969.  
  11970. Syntax 
  11971.  
  11972. XCONV xpos, xpixelpos
  11973.  
  11974. Eingabe 
  11975.  
  11976. xpos
  11977.  
  11978. Ausgabe 
  11979.  
  11980. xpixelpos
  11981.  
  11982. Beschreibung 
  11983.  
  11984. Ermittelt X-Position 0-80 als Pixelkoordinaten
  11985. Graphische Befehle
  11986. ------------------
  11987. Koordinaten  sind  Pixelkoordinaten  und  k╨ñnnen
  11988. ╨æber die Funktionen  XCONV und YCON von normalen
  11989. Koordinaten in Pixelkoordinaten ermittelt werden.
  11990. werden. Ausgangssystem f╨ær das Pixelkoordinaten-
  11991. system ist die linke obere Ecke eines Fensters.
  11992. Diese Befehle haben den Nachteil, da╤ü beim Neu-
  11993. zeichnen des Fensters, z.B durch eine Ver╨önderung
  11994. der Gr╨ñ╤üe des Fensters, die Zeichnung nicht mehr
  11995. am Bildschirm ist. Ein Neuzeichnen mu╤ü manuell
  11996. durchgef╨æhrt werden.
  11997.  
  11998. Bespiel    XCONV 
  11999.  
  12000. Siehe 
  12001.  
  12002. YCONV
  12003.  
  12004.  
  12005. ΓòÉΓòÉΓòÉ 221. YCONV ΓòÉΓòÉΓòÉ
  12006.  
  12007. Funktion 
  12008.  
  12009. Umwandlung in Pixelkordinaten
  12010.  
  12011. Syntax 
  12012.  
  12013. YCONV ypos, ypixelpos
  12014.  
  12015. Eingabe 
  12016.  
  12017. ypos
  12018.  
  12019. Ausgabe 
  12020.  
  12021. ypixelpos
  12022.  
  12023. Beschreibung 
  12024.  
  12025. Ermittelt Y-Position 0-24 als Pixelkoordinaten
  12026.  
  12027. Bespiel    YCONV 
  12028.  
  12029. Siehe 
  12030.  
  12031. XCONV
  12032.  
  12033.  
  12034. ΓòÉΓòÉΓòÉ 222. DEF_HEADER ΓòÉΓòÉΓòÉ
  12035.  
  12036. Funktion 
  12037.  
  12038. ************************ UNBEKANNT **********************
  12039.  
  12040. Syntax 
  12041.  
  12042.  
  12043. Eingabe 
  12044.  
  12045.  
  12046.  
  12047. Ausgabe 
  12048.  
  12049.  
  12050.  
  12051. Beschreibung 
  12052.  
  12053. ************************ UNBEKANNT **********************
  12054.  
  12055. Bespiel    DEF_HEADER 
  12056.  
  12057. Siehe 
  12058.  
  12059.  
  12060. ΓòÉΓòÉΓòÉ 223. DEF_NOTEBOOK ΓòÉΓòÉΓòÉ
  12061.  
  12062. Funktion 
  12063.  
  12064. Mit dieser Funktion kann ein Notebook-Objekt definiert werden.
  12065. An ein Notebook-Objekt werden Fensterobjekte addiert.
  12066. Diese ergeben mit Ihren ╨¬berschriften die Notebook-Seiten.
  12067. Ein Notebook-Objekt wird dann zum Hauptfenster addiert.
  12068.  
  12069. Syntax 
  12070.  
  12071. DEF_NOTEBOOK <id>
  12072.  
  12073. Eingabe 
  12074.  
  12075. "id"           Objektkennung
  12076.  
  12077. Ausgabe 
  12078.  
  12079.  
  12080.  
  12081. Beschreibung 
  12082.  
  12083. Ein Notebook-Objekt passt sich in das Hauptfenster
  12084. ein. Wechseln der Ordnerseiten erfolgt ╨æber die
  12085. Tastatur mit den Tasten am Zehnerblock: Bild hoch
  12086. und Bild runter. Wird die NUM-LOCK Taste einge-
  12087. schaltet, werden die Zahlen 9 und 3 wiedergegeben.
  12088.  
  12089. Bespiel    DEF_NOTEBOOK 
  12090.  
  12091. Siehe 
  12092.  
  12093. DEF_WINDOW
  12094. DEF_WINDOW_ST
  12095.  
  12096.  
  12097. ΓòÉΓòÉΓòÉ 224. DUMMY_EVENT ΓòÉΓòÉΓòÉ
  12098.  
  12099. Funktion 
  12100.  
  12101. Ein Eventmanager ohne Rueckgabewerte wird gestartet.
  12102.  
  12103. Syntax 
  12104.  
  12105. Dummy_event
  12106.  
  12107. Eingabe 
  12108.  
  12109. keine
  12110.  
  12111. Ausgabe 
  12112.  
  12113. keine
  12114.  
  12115. Beschreibung 
  12116.  
  12117. Diese Funktion kann zum Testen von Bildschirmausgaben dienen. Der
  12118. Befehl uebergibt die Steuerung an den WINDOW-MANAGER. Sobald das
  12119. letzte Fenster geschlossen ist, wird das Programm beendet.
  12120.  
  12121. Bespiel    DUMMY_EVENT 
  12122.  
  12123. Siehe 
  12124.  
  12125.  
  12126. ΓòÉΓòÉΓòÉ 225. EVENT_ON_ITEM ΓòÉΓòÉΓòÉ
  12127.  
  12128. Funktion 
  12129.  
  12130. Aendert den Zustand eines Objekts
  12131.  
  12132. Syntax 
  12133.  
  12134. EVENT_ON_ITEM id_string,event$
  12135.  
  12136. Eingabe 
  12137.  
  12138. id_string        Objektkennung
  12139. event$           Event, welches ausgefuehrt werden soll.
  12140.  
  12141. Ausgabe 
  12142.  
  12143. keine
  12144.  
  12145. Beschreibung 
  12146.  
  12147. Ein Beispiel fuer einen Event ist das Neuzeichnen eines Objekts.
  12148. Events muessen klein geschrieben werden.
  12149. Beispiele fuer Events:
  12150. "current"                Objekt wird aktuelles Objekt
  12151. "not_current"            Gegenteil von "current"
  12152. "redisplay"              Objekt wird neu gezeichnet
  12153. "select"                 Objekt erhaelt den Eingabefokus
  12154. "slider update",prozent  Slider wird mit Prozentzahl neugezeichnet
  12155. "end"                    Fensterobjekt wird fuer beendet erklaert
  12156. "create"                 Mit diesem Event wird veranlasst, das ein
  12157.                          Objekt neu erstellt wird. Als Beispiel
  12158.                          m╨ñchte ich die Combo-Box nennen. Es werden
  12159.                          Elemente an  das Combo-Box-Objekt addiert
  12160.                          und entfernt. Damit das Objekt aktualisiert
  12161.                          wird, kann es ╨æber den Event "create" neu
  12162.                          erstellt werden.
  12163.  
  12164. Bespiel    EVENT_ON_ITEM 
  12165.  
  12166. Siehe 
  12167.  
  12168. ADD_ITEM
  12169. SUB_ITEM
  12170.  
  12171.  
  12172. ΓòÉΓòÉΓòÉ 226. GET_ITEM_POS ΓòÉΓòÉΓòÉ
  12173.  
  12174. Funktion 
  12175.  
  12176. Liefert aktuelles Objekt und Tastatur/Maus-Status zurueck.
  12177.  
  12178. Syntax 
  12179.  
  12180. GET_ITEM_POS objektid_neu$,taste [,objektid_alt$]
  12181.  
  12182. Eingabe 
  12183.  
  12184. keine
  12185.  
  12186. Ausgabe 
  12187.  
  12188. objektid_neu$    Variable mit der Objektkennungdes neu selektierten
  12189.                  Elements
  12190. taste            ASCII-Wert der gedrueckten Taste
  12191. objektid_alt$    Variable mit der Kennung des zuvor selektierten
  12192.                  Objekts
  12193.  
  12194. Beschreibung 
  12195.  
  12196. Wenn ein Objekt mit der linken Maustaste selektiert wird, liefert der
  12197. Befehl die ID-Kennung des gewaehlten Objekts zurueck. Falls die linke
  12198. Maustaste gedrueckt wurde, wird in der Variablen <taste> der Wert 13
  12199. zurueckgegeben. Optional kann auch die Kennung des davor ausgewaehlten
  12200. Objekts abgefragt werden (z.B. um dieses nach vollzogener Operation
  12201. zu aktualisieren oder zu formatieren = LOST FOCUS). Wird in diesem
  12202. Fall der Wert taste=1 zurueckgegeben, so bedeutet dies, dass das alte
  12203. Objekt verlassen wurde und nicht mehr aktiviert ist.
  12204.  
  12205. Bespiel    GET_ITEM_POS 
  12206.  
  12207. Siehe 
  12208.  
  12209. WIN_EV
  12210.  
  12211.  
  12212. ΓòÉΓòÉΓòÉ 227. GET_ITEM_STATUS ΓòÉΓòÉΓòÉ
  12213.  
  12214. Funktion 
  12215.  
  12216. Ermittelt, ob ein Objekt einen bestimmten Status besitzt.
  12217.  
  12218. Syntax 
  12219.  
  12220. GET_ITEM_STATUS id_string$, status$, ok
  12221.  
  12222. Eingabe 
  12223.  
  12224. id_string$    Kennung des zu ueberpruefenden Objekts
  12225. status$       Variable mit dem Status, dessen Existenz ueberprueft
  12226.               werden soll
  12227.  
  12228. Ausgabe 
  12229.  
  12230. ok            Flag mit dem Ergebnis der ueberpruefung:
  12231.               ok=1: Der Status ist bei dem Objekt gesetzt
  12232.               ok=-1: Der Status ist bei dem Objekt nicht gesetzt
  12233.  
  12234. Beschreibung 
  12235.  
  12236. Es wird ueberprueft, ob ein Objekt einen bestimmten Status besitzt.
  12237. Wird bei Checkbox- oder Radiobuttons der Status "SET" angegeben,
  12238. so wird ueberprueft, ob der Button aktiviert ist.
  12239.  
  12240. Bespiel    GET_ITEM_STATUS 
  12241.  
  12242. Siehe 
  12243.  
  12244.  
  12245. ΓòÉΓòÉΓòÉ 228. SET_KEYMAP ΓòÉΓòÉΓòÉ
  12246.  
  12247. Funktion 
  12248.  
  12249. Liest eine Tastenkombination zur weiteren Verwendung in KIM ein.
  12250.  
  12251. Syntax 
  12252.  
  12253. SET_KEYMAP key$, rueckgabenr,pos
  12254.  
  12255. Eingabe 
  12256.  
  12257. key$          Einzulesende Tastenkombination
  12258. rueckgabenr   Kennzahl der Tastenkombination (zwischen 10000 und 10010)
  12259.  
  12260. Ausgabe 
  12261.  
  12262. pos           Position der Tastenkombination in der Key-Tabelle
  12263.  
  12264. Beschreibung 
  12265.  
  12266. Mit diesem Befehl koennen Sie zusaetzlich zu den in KIM vordefinierten
  12267. Tasten weitere Tasten oder Tastenkombinationen in eine Key-Tabelle
  12268. eintragen, von wo aus diese zur Verwendung in KIM (sie sind dann von
  12269. allen selektierbaren Objekten ansprechbar) zur Verfuegung stehen. Im
  12270. Anhang (Abs. 9.2.) finden Sie eine Liste aller einlesbaren Tasten und
  12271. genauere Erlaeuterungen zu diesem Befehl.
  12272.  
  12273. Bespiel    SET_KEYMAP 
  12274.  
  12275. Siehe 
  12276.  
  12277.  
  12278. ΓòÉΓòÉΓòÉ 229. WAIT ΓòÉΓòÉΓòÉ
  12279.  
  12280. Funktion 
  12281.  
  12282. Haelt das Programm fuer einen beliebigen Zeitraum an.
  12283.  
  12284. Syntax 
  12285.  
  12286. WAIT anzahl
  12287.  
  12288. Eingabe 
  12289.  
  12290. anzahl           Anzahl der Sekunden, die das Programm warten soll
  12291.  
  12292. Ausgabe 
  12293.  
  12294. Keine
  12295.  
  12296. Beschreibung 
  12297.  
  12298. Sie koennen das Programm veranlassen, an der betreffenden Position im
  12299. Programmcode eine von Ihnen bestimmte Zeitspanne anzuhalten, ehe der
  12300. naechste Befehl bearbeitet wird. Diese Zeitspanne muessen Sie in
  12301. Sekunden angeben.
  12302.  
  12303. Bespiel    WAIT 
  12304.  
  12305. Siehe 
  12306.  
  12307.  
  12308. ΓòÉΓòÉΓòÉ 230. WIN_EV ΓòÉΓòÉΓòÉ
  12309.  
  12310. Funktion 
  12311.  
  12312. Aufruf des Event-Managers.
  12313.  
  12314. Syntax 
  12315.  
  12316. WIN_EV event
  12317.  
  12318. Eingabe 
  12319.  
  12320. keine
  12321.  
  12322. Ausgabe 
  12323.  
  12324. event           Numerischer Wert  (z.B. 1000 = Applikation beendet)
  12325.  
  12326. Beschreibung 
  12327.  
  12328. Der Event-Manager knmmert sich um die Steuerung der Oberflaechenelemente.
  12329. Falls ein Event eintritt, wird er von diesem Befehl in Form eines
  12330. numerischen Werts an das Programm uebergeben. Der Event-Manager ist nur
  12331. funktionell in einer Schleife. Wird eine Applikation beendet, d.h alle
  12332. Fenster der Applikation wurden geschlossen, steht in der Variablen
  12333. <event> der Wert 1000.
  12334.  
  12335. Bespiel    WIN_EV 
  12336.  
  12337. Siehe 
  12338.  
  12339. DUMMY_EVENT
  12340.  
  12341.  
  12342. ΓòÉΓòÉΓòÉ 231. WIN_PAINT ΓòÉΓòÉΓòÉ
  12343.  
  12344. Funktion 
  12345.  
  12346. Ein Fenster wird an die Steuerung des Systems uebergeben.
  12347.  
  12348. Syntax 
  12349.  
  12350. win_paint   "Fenster _id"
  12351.  
  12352. Eingabe 
  12353.  
  12354. "Fenster _id"         Kennung des Fensterobjekts
  12355.  
  12356. Ausgabe 
  12357.  
  12358. keine
  12359.  
  12360. Beschreibung 
  12361.  
  12362. Das Fensterobjekt wird am Bildschirm dargestellt. Wird dieser Befehl
  12363. mehrmals aufgerufen, erfolgt ein Neuzeichnen des Fensters. Um einzelne
  12364. Elemente eines Fensters neu zu zeichnen, verwenden Sie den Befehl
  12365. event_on_item "id$", "redisplay".
  12366. Bereich, in dem Variablen definiert werden (z.B. mit DEFFLOAT, DEFSTRING,
  12367. DEFINE, DIM usw.)
  12368.  
  12369. Bespiel    WIN_PAINT 
  12370.  
  12371. Siehe 
  12372.  
  12373. DEF_WINDOW
  12374. DEF_WINDOW_ST
  12375.  
  12376.  
  12377. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12378.  
  12379. rem {******************************************}
  12380. rem {MCD (c) 1994-1995   Beispiel              }
  12381. rem {                                          }
  12382. rem {Version:  KIM2 ab 1.0                     }
  12383. rem {******************************************}
  12384.  
  12385.  
  12386. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12387.  
  12388. rem {******************************************}
  12389. rem {MCD (c) 1994-1995   Beispiel              }
  12390. rem {                                          }
  12391. rem {Version:  KIM2 ab 1.0                     }
  12392. rem {******************************************}
  12393.  
  12394.  
  12395. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12396.  
  12397. rem {******************************************}
  12398. rem {MCD (c) 1994-1995   Beispiel              }
  12399. rem {                                          }
  12400. rem {Version:  KIM2 ab 1.0                     }
  12401. rem {******************************************}
  12402.  
  12403.  
  12404. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12405.  
  12406. rem {******************************************}
  12407. rem {MCD (c) 1994-1995   Beispiel              }
  12408. rem {                                          }
  12409. rem {Version:  KIM2 ab 1.0                     }
  12410. rem {******************************************}
  12411.  
  12412.  
  12413. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12414.  
  12415. rem {******************************************}
  12416. rem {MCD (c) 1994-1995   Beispiel              }
  12417. rem {                                          }
  12418. rem {Version:  KIM2 ab 1.0                     }
  12419. rem {******************************************}
  12420.  
  12421.  
  12422. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12423.  
  12424. rem {******************************************}
  12425. rem {MCD (c) 1994-1995   Beispiel              }
  12426. rem {                                          }
  12427. rem {Version:  KIM2 ab 1.0                     }
  12428. rem {******************************************}
  12429. *** siehe DATUM ****
  12430.  
  12431.  
  12432. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12433.  
  12434. rem {******************************************}
  12435. rem {MCD (c) 1994-1995   Beispiel              }
  12436. rem {                                          }
  12437. rem {Version:  KIM2 ab 1.0                     }
  12438. rem {******************************************}
  12439. *** siehe DATUM ****
  12440.  
  12441.  
  12442. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12443.  
  12444. rem {******************************************}
  12445. rem {MCD (c) 1994-1995   Beispiel              }
  12446. rem {                                          }
  12447. rem {Version:  KIM2 ab 1.0                     }
  12448. rem {******************************************}
  12449. *** siehe DATUM ****
  12450.  
  12451.  
  12452. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12453.  
  12454. rem {******************************************}
  12455. rem {MCD (c) 1994-1995   Beispiel              }
  12456. rem {                                          }
  12457. rem {Version:  KIM2 ab 1.0                     }
  12458. rem {******************************************}
  12459. defstring date1,date2
  12460. deffloat zeit1,zeit2
  12461. deffloat tag
  12462. DIM text,1,8
  12463. rem Wandelt CCYYMMTT  ---> Julianische Zahl
  12464. date1="19940402"
  12465. datetoju date1, zeit1
  12466. zeit1=zeit1+10
  12467. text1=date1
  12468. form zeit1, text2, 0, 12
  12469. rem Wandelt Julianische Zahl --->  CCYYMMTT
  12470. jutodate zeit1, date1
  12471. text3=date1
  12472. rem Ermittelt Wochentag 1=Sonntag ... 7=Samstag
  12473. datetow date1,tag
  12474. form tag,text4, 0, 2
  12475. text4=" TAG: " + text4
  12476. rem Wandelt 10.12.94 --> 19941210
  12477. date1="10.12.94"
  12478. rem {Datum lesen}
  12479. datum date1
  12480. dateformat 0,"DD.MM.YY", date1, date2
  12481. mid date2, date2, 1, 8
  12482. text5=date2
  12483. rem {Datum in Deutsches Format umwandeln}
  12484. rem {Wandelt 19941210 ---> 10.12.94     }
  12485. dateformat 1,"DD.MM.YY", date2, date1
  12486. text6=date1
  12487. rem {Datum lesen und 14 Tage hinzu und  }
  12488. rem {in Deutsches Format umwandeln      }
  12489. datum date1
  12490. dateformat 0,"DD.MM.YY", date1, date2
  12491. mid date2, date2, 1, 8
  12492. datetoju date2, zeit1
  12493. zeit1=zeit1+30
  12494. text7="+ 30 Tage"
  12495. jutodate zeit1, date2
  12496. dateformat 1,"DD.MM.YY", date2, date1
  12497. text8=date1
  12498. def_window_st "window",  001,001,098, 10, "Beispiel:  DATUMSFUNKTIONEN "
  12499. def_string "status_Info1", 000,0,012,Text1, 012; "border","select off"
  12500. def_string "status_Info2", 012,0,012,Text2, 012; "border","select off"
  12501. def_string "status_Info3", 024,0,012,Text3, 012; "border","select off"
  12502. def_string "status_Info4", 036,0,012,Text4, 012; "border","select off"
  12503. def_string "status_Info5", 048,0,012,Text5, 012; "border","select off"
  12504. def_string "status_Info6", 060,0,012,Text6, 012; "border","select off"
  12505. def_string "status_Info7", 072,0,012,Text7, 012; "border","select off"
  12506. def_string "status_Info8", 084,0,012,Text8, 012; "border","select off"
  12507. def_statusbar "status", 2
  12508. add_item_array "status", "status_Info", 1,8
  12509. add_item "window", "status"
  12510. win_paint "window"
  12511.  dummy_event
  12512. end
  12513.  
  12514.  
  12515. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12516.  
  12517. rem {******************************************}
  12518. rem {MCD (c) 1994-1995   Beispiel              }
  12519. rem {                                          }
  12520. rem {Version:  KIM2 ab 1.0                     }
  12521. rem {******************************************}
  12522.  
  12523.  
  12524. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12525.  
  12526. rem {******************************************}
  12527. rem {MCD (c) 1994-1995   Beispiel              }
  12528. rem {                                          }
  12529. rem {Version:  KIM2 ab 1.0                     }
  12530. rem {******************************************}
  12531.  
  12532.  
  12533. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12534.  
  12535. rem {******************************************}
  12536. rem {MCD (c) 1994-1995   Beispiel              }
  12537. rem {                                          }
  12538. rem {Version:  KIM2 ab 1.0                     }
  12539. rem {******************************************}
  12540.  
  12541.  
  12542. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12543.  
  12544. rem {******************************************}
  12545. rem {MCD (c) 1994-1995   Beispiel              }
  12546. rem {                                          }
  12547. rem {Version:  KIM2 ab 1.0                     }
  12548. rem {******************************************}
  12549.  
  12550.  
  12551. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12552.  
  12553. rem {******************************************}
  12554. rem {MCD (c) 1994-1995   Beispiel              }
  12555. rem {                                          }
  12556. rem {Version:  KIM2 ab 1.0                     }
  12557. rem {******************************************}
  12558.  
  12559.  
  12560. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12561.  
  12562. rem {******************************************}
  12563. rem {MCD (c) 1994-1995   Beispiel              }
  12564. rem {                                          }
  12565. rem {Version:  KIM2 ab 1.0                     }
  12566. rem {******************************************}
  12567.  
  12568.  
  12569. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12570.  
  12571. rem {******************************************}
  12572. rem {MCD (c) 1994-1995   Beispiel              }
  12573. rem {                                          }
  12574. rem {Version:  KIM2 ab 1.0                     }
  12575. rem {******************************************}
  12576. deffloat zahl
  12577. defstring text1
  12578. filelen "Dkim", zahl
  12579. form zahl, text1, 0, 16
  12580. def_window_st "window",  001,001,095, 10, "Beispiel:  FILELEN "
  12581. def_string "status_Info1", 000,0,016, Text1,  016; "border","select off"
  12582. def_string "status_Info2", 016,0,016,"Text2", 016; "border","select off"
  12583. def_statusbar "status", 2
  12584. add_item_array "status", "status_Info", 1,2
  12585. add_item "window", "status"
  12586. win_paint "window"
  12587.  dummy_event
  12588. end
  12589.  
  12590.  
  12591. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12592.  
  12593. rem {******************************************}
  12594. rem {MCD (c) 1994-1995   Beispiel              }
  12595. rem {                                          }
  12596. rem {Version:  KIM2 ab 1.0                     }
  12597. rem {******************************************}
  12598.  
  12599.  
  12600. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12601.  
  12602. rem {******************************************}
  12603. rem {MCD (c) 1994-1995   Beispiel              }
  12604. rem {                                          }
  12605. rem {Version:  KIM2 ab 1.0                     }
  12606. rem {******************************************}
  12607.  
  12608.  
  12609. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12610.  
  12611. rem {******************************************}
  12612. rem {MCD (c) 1994-1995   Beispiel              }
  12613. rem {                                          }
  12614. rem {Version:  KIM2 ab 1.0                     }
  12615. rem {******************************************}
  12616.  
  12617.  
  12618. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12619.  
  12620. rem {******************************************}
  12621. rem {MCD (c) 1994-1995   Beispiel              }
  12622. rem {                                          }
  12623. rem {Version:  KIM2 ab 1.0                     }
  12624. rem {******************************************}
  12625.  
  12626.  
  12627. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12628.  
  12629. rem {******************************************}
  12630. rem {MCD (c) 1994-1995   Beispiel              }
  12631. rem {                                          }
  12632. rem {Version:  KIM2 ab 1.0                     }
  12633. rem {******************************************}
  12634.  
  12635.  
  12636. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12637.  
  12638. rem {******************************************}
  12639. rem {MCD (c) 1994-1995   Beispiel              }
  12640. rem {                                          }
  12641. rem {Version:  KIM2 ab 1.0                     }
  12642. rem {******************************************}
  12643.  
  12644.  
  12645. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12646.  
  12647. rem {******************************************}
  12648. rem {MCD (c) 1994-1995   Beispiel              }
  12649. rem {                                          }
  12650. rem {Version:  KIM2 ab 1.0                     }
  12651. rem {******************************************}
  12652.  
  12653.  
  12654. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12655.  
  12656. rem {******************************************}
  12657. rem {MCD (c) 1994-1995   Beispiel              }
  12658. rem {                                          }
  12659. rem {Version:  KIM2 ab 1.0                     }
  12660. rem {******************************************}
  12661. deffloat  alt
  12662. deffloat  neu
  12663. neu=999.9990000
  12664. int alt, neu
  12665. rem neu enthaelt  999
  12666.  
  12667.  
  12668. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12669.  
  12670. rem {******************************************}
  12671. rem {MCD (c) 1994-1995   Beispiel              }
  12672. rem {                                          }
  12673. rem {Version:  KIM2 ab 1.0                     }
  12674. rem {******************************************}
  12675. nil
  12676.  
  12677.  
  12678. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12679.  
  12680. rem {******************************************}
  12681. rem {MCD (c) 1994-1995   Beispiel              }
  12682. rem {                                          }
  12683. rem {Version:  KIM2 ab 1.0                     }
  12684. rem {******************************************}
  12685. *** siehe DATUM ****
  12686.  
  12687.  
  12688. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12689.  
  12690. rem {******************************************}
  12691. rem {MCD (c) 1994-1995   Beispiel              }
  12692. rem {                                          }
  12693. rem {Version:  KIM2 ab 1.0                     }
  12694. rem {******************************************}
  12695.  
  12696.  
  12697. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12698.  
  12699. rem {******************************************}
  12700. rem {MCD (c) 1994-1995   Beispiel              }
  12701. rem {                                          }
  12702. rem {Version:  KIM2 ab 1.0                     }
  12703. rem {******************************************}
  12704.  
  12705.  
  12706. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12707.  
  12708. rem {******************************************}
  12709. rem {MCD (c) 1994-1995   Beispiel              }
  12710. rem {                                          }
  12711. rem {Version:  KIM2 ab 1.0                     }
  12712. rem {******************************************}
  12713.  
  12714.  
  12715. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12716.  
  12717. rem {******************************************}
  12718. rem {MCD (c) 1994-1995   Beispiel              }
  12719. rem {                                          }
  12720. rem {Version:  KIM2 ab 1.0                     }
  12721. rem {******************************************}
  12722.  
  12723.  
  12724. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12725.  
  12726. rem {******************************************}
  12727. rem {MCD (c) 1994-1995   Beispiel              }
  12728. rem {                                          }
  12729. rem {Version:  KIM2 ab 1.0                     }
  12730. rem {******************************************}
  12731.  
  12732.  
  12733. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12734.  
  12735. rem {******************************************}
  12736. rem {MCD (c) 1994-1995   Beispiel              }
  12737. rem {                                          }
  12738. rem {Version:  KIM2 ab 1.0                     }
  12739. rem {******************************************}
  12740.  
  12741.  
  12742. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12743.  
  12744. rem {******************************************}
  12745. rem {MCD (c) 1994-1995   Beispiel              }
  12746. rem {                                          }
  12747. rem {Version:  KIM2 ab 1.0                     }
  12748. rem {******************************************}
  12749.  
  12750.  
  12751. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12752.  
  12753. rem {******************************************}
  12754. rem {MCD (c) 1994-1995   Beispiel              }
  12755. rem {                                          }
  12756. rem {Version:  KIM2 ab 1.0                     }
  12757. rem {******************************************}
  12758.  
  12759.  
  12760. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12761.  
  12762. rem {******************************************}
  12763. rem {MCD (c) 1994-1995   Beispiel              }
  12764. rem {                                          }
  12765. rem {Version:  KIM2 ab 1.0                     }
  12766. rem {******************************************}
  12767.  
  12768.  
  12769. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12770.  
  12771. rem {******************************************}
  12772. rem {MCD (c) 1994-1995   Beispiel              }
  12773. rem {                                          }
  12774. rem {Version:  KIM2 ab 1.0                     }
  12775. rem {******************************************}
  12776.  
  12777.  
  12778. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12779.  
  12780. rem {******************************************}
  12781. rem {MCD (c) 1994-1995   Beispiel              }
  12782. rem {                                          }
  12783. rem {Version:  KIM2 ab 1.0                     }
  12784. rem {******************************************}
  12785.  
  12786.  
  12787. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12788.  
  12789. rem {******************************************}
  12790. rem {MCD (c) 1994-1995   Beispiel              }
  12791. rem {                                          }
  12792. rem {Version:  KIM2 ab 1.0                     }
  12793. rem {******************************************}
  12794.  
  12795.  
  12796. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12797.  
  12798. rem {******************************************}
  12799. rem {MCD (c) 1994-1995   Beispiel              }
  12800. rem {                                          }
  12801. rem {Version:  KIM2 ab 1.0                     }
  12802. rem {******************************************}
  12803.  
  12804.  
  12805. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12806.  
  12807. rem {******************************************}
  12808. rem {MCD (c) 1994-1995   Beispiel              }
  12809. rem {                                          }
  12810. rem {Version:  KIM2 ab 1.0                     }
  12811. rem {******************************************}
  12812.  
  12813.  
  12814. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12815.  
  12816. rem {******************************************}
  12817. rem {MCD (c) 1994-1995   Beispiel              }
  12818. rem {                                          }
  12819. rem {Version:  KIM2 ab 1.0                     }
  12820. rem {******************************************}
  12821.  
  12822.  
  12823. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12824.  
  12825. rem {******************************************}
  12826. rem {MCD (c) 1994-1995   Beispiel              }
  12827. rem {                                          }
  12828. rem {Version:  KIM2 ab 1.0                     }
  12829. rem {******************************************}
  12830.  
  12831.  
  12832. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12833.  
  12834. rem {******************************************}
  12835. rem {MCD (c) 1994-1995   Beispiel              }
  12836. rem {                                          }
  12837. rem {Version:  KIM2 ab 1.0                     }
  12838. rem {******************************************}
  12839.  
  12840.  
  12841. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12842.  
  12843. rem {******************************************}
  12844. rem {MCD (c) 1994-1995   Beispiel              }
  12845. rem {                                          }
  12846. rem {Version:  KIM2 ab 1.0                     }
  12847. rem {******************************************}
  12848.  
  12849.  
  12850. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12851.  
  12852. rem {******************************************}
  12853. rem {MCD (c) 1994-1995   Beispiel              }
  12854. rem {                                          }
  12855. rem {Version:  KIM2 ab 1.0                     }
  12856. rem {******************************************}
  12857.  
  12858.  
  12859. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12860.  
  12861. rem {******************************************}
  12862. rem {MCD (c) 1994-1995   Beispiel              }
  12863. rem {                                          }
  12864. rem {Version:  KIM2 ab 1.0                     }
  12865. rem {******************************************}
  12866.  
  12867.  
  12868. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12869.  
  12870. rem {******************************************}
  12871. rem {MCD (c) 1994-1995   Beispiel              }
  12872. rem {                                          }
  12873. rem {Version:  KIM2 ab 1.0                     }
  12874. rem {******************************************}
  12875.  
  12876.  
  12877. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12878.  
  12879. rem {******************************************}
  12880. rem {MCD (c) 1994-1995   Beispiel              }
  12881. rem {                                          }
  12882. rem {Version:  KIM2 ab 1.0                     }
  12883. rem {******************************************}
  12884.  
  12885.  
  12886. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12887.  
  12888. rem {******************************************}
  12889. rem {MCD (c) 1994-1995   Beispiel              }
  12890. rem {                                          }
  12891. rem {Version:  KIM2 ab 1.0                     }
  12892. rem {******************************************}
  12893.  
  12894.  
  12895. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12896.  
  12897. rem {******************************************}
  12898. rem {MCD (c) 1994-1995   Beispiel              }
  12899. rem {                                          }
  12900. rem {Version:  KIM2 ab 1.0                     }
  12901. rem {******************************************}
  12902. defstring zeichen
  12903. deffloat  zahl
  12904.    zeichen="K"
  12905.    ASC zeichen,zahl
  12906.    print zahl        rem  zahl=075
  12907. end
  12908.  
  12909.  
  12910. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12911.  
  12912. rem {******************************************}
  12913. rem {MCD (c) 1994-1995   Beispiel              }
  12914. rem {                                          }
  12915. rem {Version:  KIM2 ab 1.0                     }
  12916. rem {******************************************}
  12917.  
  12918.  
  12919. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12920.  
  12921. rem {******************************************}
  12922. rem {MCD (c) 1994-1995   Beispiel              }
  12923. rem {                                          }
  12924. rem {Version:  KIM2 ab 1.0                     }
  12925. rem {******************************************}
  12926.  
  12927.  
  12928. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12929.  
  12930. rem {******************************************}
  12931. rem {MCD (c) 1994-1995   Beispiel              }
  12932. rem {                                          }
  12933. rem {Version:  KIM2 ab 1.0                     }
  12934. rem {******************************************}
  12935.  
  12936.  
  12937. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12938.  
  12939. rem {******************************************}
  12940. rem {MCD (c) 1994-1995   Beispiel              }
  12941. rem {                                          }
  12942. rem {Version:  KIM2 ab 1.0                     }
  12943. rem {******************************************}
  12944.  
  12945.  
  12946. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12947.  
  12948. rem {******************************************}
  12949. rem {MCD (c) 1994-1995   Beispiel              }
  12950. rem {                                          }
  12951. rem {Version:  KIM2 ab 1.0                     }
  12952. rem {******************************************}
  12953.  
  12954.  
  12955. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12956.  
  12957. rem {******************************************}
  12958. rem {MCD (c) 1994-1995   Beispiel              }
  12959. rem {                                          }
  12960. rem {Version:  KIM2 ab 1.0                     }
  12961. rem {******************************************}
  12962.  
  12963.  
  12964. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12965.  
  12966. rem {******************************************}
  12967. rem {MCD (c) 1994-1995   Beispiel              }
  12968. rem {                                          }
  12969. rem {Version:  KIM2 ab 1.0                     }
  12970. rem {******************************************}
  12971.  
  12972.  
  12973. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12974.  
  12975. rem {******************************************}
  12976. rem {MCD (c) 1994-1995   Beispiel              }
  12977. rem {                                          }
  12978. rem {Version:  KIM2 ab 1.0                     }
  12979. rem {******************************************}
  12980.  
  12981.  
  12982. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12983.  
  12984. rem {******************************************}
  12985. rem {MCD (c) 1994-1995   Beispiel              }
  12986. rem {                                          }
  12987. rem {Version:  KIM2 ab 1.0                     }
  12988. rem {******************************************}
  12989.  
  12990.  
  12991. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  12992.  
  12993. rem {******************************************}
  12994. rem {MCD (c) 1994-1995   Beispiel              }
  12995. rem {                                          }
  12996. rem {Version:  KIM2 ab 1.0                     }
  12997. rem {******************************************}
  12998. deffloat  alt
  12999. deffloat  neu
  13000. neu=999.9990000
  13001. ganz alt, neu
  13002. rem neu enthaelt  1000
  13003.  
  13004.  
  13005. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13006.  
  13007. rem {******************************************}
  13008. rem {MCD (c) 1994-1995   Beispiel              }
  13009. rem {                                          }
  13010. rem {Version:  KIM2 ab 1.0                     }
  13011. rem {******************************************}
  13012. nil
  13013.  
  13014.  
  13015. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13016.  
  13017. rem {******************************************}
  13018. rem {MCD (c) 1994-1995   Beispiel              }
  13019. rem {                                          }
  13020. rem {Version:  KIM2 ab 1.0                     }
  13021. rem {******************************************}
  13022. nil
  13023.  
  13024.  
  13025. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13026.  
  13027. rem {******************************************}
  13028. rem {MCD (c) 1994-1995   Beispiel              }
  13029. rem {                                          }
  13030. rem {Version:  KIM2 ab 1.0                     }
  13031. rem {******************************************}
  13032.  
  13033.  
  13034. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13035.  
  13036. rem {******************************************}
  13037. rem {MCD (c) 1994-1995   Beispiel              }
  13038. rem {                                          }
  13039. rem {Version:  KIM2 ab 1.0                     }
  13040. rem {******************************************}
  13041.  
  13042.  
  13043. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13044.  
  13045. rem {******************************************}
  13046. rem {MCD (c) 1994-1995   Beispiel              }
  13047. rem {                                          }
  13048. rem {Version:  KIM2 ab 1.0                     }
  13049. rem {******************************************}
  13050.  
  13051.  
  13052. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13053.  
  13054. rem {******************************************}
  13055. rem {MCD (c) 1994-1995   Beispiel              }
  13056. rem {                                          }
  13057. rem {Version:  KIM2 ab 1.0                     }
  13058. rem {******************************************}
  13059.  
  13060.  
  13061. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13062.  
  13063. rem {******************************************}
  13064. rem {MCD (c) 1994-1995   Beispiel              }
  13065. rem {                                          }
  13066. rem {Version:  KIM2 ab 1.0                     }
  13067. rem {******************************************}
  13068.  
  13069.  
  13070. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13071.  
  13072. rem {******************************************}
  13073. rem {MCD (c) 1994-1995   Beispiel              }
  13074. rem {                                          }
  13075. rem {Version:  KIM2 ab 1.0                     }
  13076. rem {******************************************}
  13077. nil
  13078.  
  13079.  
  13080. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13081.  
  13082. rem {******************************************}
  13083. rem {MCD (c) 1994-1995   Beispiel              }
  13084. rem {                                          }
  13085. rem {Version:  KIM2 ab 1.0                     }
  13086. rem {******************************************}
  13087.  
  13088.  
  13089. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13090.  
  13091. rem {******************************************}
  13092. rem {MCD (c) 1994-1995   Beispiel              }
  13093. rem {                                          }
  13094. rem {Version:  KIM2 ab 1.0                     }
  13095. rem {******************************************}
  13096.  
  13097.  
  13098. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13099.  
  13100. rem {******************************************}
  13101. rem {MCD (c) 1994-1995   Beispiel              }
  13102. rem {                                          }
  13103. rem {Version:  KIM2 ab 1.0                     }
  13104. rem {******************************************}
  13105.  
  13106.  
  13107. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13108.  
  13109. rem {******************************************}
  13110. rem {MCD (c) 1994-1995   Beispiel              }
  13111. rem {                                          }
  13112. rem {Version:  KIM2 ab 1.0                     }
  13113. rem {******************************************}
  13114.  
  13115.  
  13116. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13117.  
  13118. rem {******************************************}
  13119. rem {MCD (c) 1994-1995   Beispiel              }
  13120. rem {                                          }
  13121. rem {Version:  KIM2 ab 1.0                     }
  13122. rem {******************************************}
  13123. DEFSTRING eingabe, ausgabe
  13124. eingabe="1234567890"
  13125. REVERS eingabe, ausgabe
  13126. <inhalt von ausgabe> "0987654321"
  13127.  
  13128.  
  13129. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13130.  
  13131. rem {******************************************}
  13132. rem {MCD (c) 1994-1995   Beispiel              }
  13133. rem {                                          }
  13134. rem {Version:  KIM2 ab 1.0                     }
  13135. rem {******************************************}
  13136.  
  13137.  
  13138. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13139.  
  13140. rem {******************************************}
  13141. rem {MCD (c) 1994-1995   Beispiel              }
  13142. rem {                                          }
  13143. rem {Version:  KIM2 ab 1.0                     }
  13144. rem {******************************************}
  13145. nil
  13146.  
  13147.  
  13148. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13149.  
  13150. rem {******************************************}
  13151. rem {MCD (c) 1994-1995   Beispiel              }
  13152. rem {                                          }
  13153. rem {Version:  KIM2 ab 1.0                     }
  13154. rem {******************************************}
  13155.  
  13156.  
  13157. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13158.  
  13159. rem {******************************************}
  13160. rem {MCD (c) 1994-1995   Beispiel              }
  13161. rem {                                          }
  13162. rem {Version:  KIM2 ab 1.0                     }
  13163. rem {******************************************}
  13164.  
  13165.  
  13166. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13167.  
  13168. rem {******************************************}
  13169. rem {MCD (c) 1994-1995   Beispiel              }
  13170. rem {                                          }
  13171. rem {Version:  KIM2 ab 1.0                     }
  13172. rem {******************************************}
  13173.  
  13174.  
  13175. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13176.  
  13177. rem {******************************************}
  13178. rem {MCD (c) 1994-1995   Beispiel              }
  13179. rem {                                          }
  13180. rem {Version:  KIM2 ab 1.0                     }
  13181. rem {******************************************}
  13182.  
  13183.  
  13184. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13185.  
  13186. rem {******************************************}
  13187. rem {MCD (c) 1994-1995   Beispiel              }
  13188. rem {                                          }
  13189. rem {Version:  KIM2 ab 1.0                     }
  13190. rem {******************************************}
  13191.  
  13192.  
  13193. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13194.  
  13195. rem {******************************************}
  13196. rem {MCD (c) 1994-1995   Beispiel              }
  13197. rem {                                          }
  13198. rem {Version:  KIM2 ab 1.0                     }
  13199. rem {******************************************}
  13200.  
  13201.  
  13202. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13203.  
  13204. rem {******************************************}
  13205. rem {MCD (c) 1994-1995   Beispiel              }
  13206. rem {                                          }
  13207. rem {Version:  KIM2 ab 1.0                     }
  13208. rem {******************************************}
  13209.  
  13210.  
  13211. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13212.  
  13213. rem {******************************************}
  13214. rem {MCD (c) 1994-1995   Beispiel              }
  13215. rem {                                          }
  13216. rem {Version:  KIM2 ab 1.0                     }
  13217. rem {******************************************}
  13218.  
  13219.  
  13220. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13221.  
  13222. rem {******************************************}
  13223. rem {MCD (c) 1994-1995   Beispiel              }
  13224. rem {                                          }
  13225. rem {Version:  KIM2 ab 1.0                     }
  13226. rem {******************************************}
  13227. NIL
  13228.  
  13229.  
  13230. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13231.  
  13232. rem {******************************************}
  13233. rem {MCD (c) 1994-1995   Beispiel              }
  13234. rem {                                          }
  13235. rem {Version:  KIM2 ab 1.0                     }
  13236. rem {******************************************}
  13237.  
  13238.  
  13239. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13240.  
  13241. rem {******************************************}
  13242. rem {MCD (c) 1994-1995   Beispiel              }
  13243. rem {                                          }
  13244. rem {Version:  KIM2 ab 1.0                     }
  13245. rem {******************************************}
  13246.  
  13247.  
  13248. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13249.  
  13250. rem {******************************************}
  13251. rem {MCD (c) 1994-1995   Beispiel              }
  13252. rem {                                          }
  13253. rem {Version:  KIM2 ab 1.0                     }
  13254. rem {******************************************}
  13255.  
  13256.  
  13257. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13258.  
  13259. rem {******************************************}
  13260. rem {MCD (c) 1994-1995   Beispiel              }
  13261. rem {                                          }
  13262. rem {Version:  KIM2 ab 1.0                     }
  13263. rem {******************************************}
  13264.  
  13265.  
  13266. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13267.  
  13268. rem {******************************************}
  13269. rem {MCD (c) 1994-1995   Beispiel              }
  13270. rem {                                          }
  13271. rem {Version:  KIM2 ab 1.0                     }
  13272. rem {******************************************}
  13273.  
  13274.  
  13275. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13276.  
  13277. rem {******************************************}
  13278. rem {MCD (c) 1994-1995   Beispiel              }
  13279. rem {                                          }
  13280. rem {Version:  KIM2 ab 1.0                     }
  13281. rem {******************************************}
  13282.  
  13283.  
  13284. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13285.  
  13286. rem {******************************************}
  13287. rem {MCD (c) 1994-1995   Beispiel              }
  13288. rem {                                          }
  13289. rem {Version:  KIM2 ab 1.0                     }
  13290. rem {******************************************}
  13291.  
  13292.  
  13293. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13294.  
  13295. rem {******************************************}
  13296. rem {MCD (c) 1994-1995   Beispiel              }
  13297. rem {                                          }
  13298. rem {Version:  KIM2 ab 1.0                     }
  13299. rem {******************************************}
  13300.  
  13301.  
  13302. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13303.  
  13304.  
  13305. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13306.  
  13307. rem {******************************************}
  13308. rem {MCD (c) 1994-1995   Beispiel              }
  13309. rem {                                          }
  13310. rem {Version:  KIM2 ab 1.0                     }
  13311. rem {******************************************}
  13312.  
  13313.  
  13314. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13315.  
  13316. rem {******************************************}
  13317. rem {MCD (c) 1994-1995   Beispiel              }
  13318. rem {                                          }
  13319. rem {Version:  KIM2 ab 1.0                     }
  13320. rem {******************************************}
  13321.  
  13322.  
  13323. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13324.  
  13325. rem {******************************************}
  13326. rem {MCD (c) 1994-1995   Beispiel              }
  13327. rem {                                          }
  13328. rem {Version:  KIM2 ab 1.0                     }
  13329. rem {******************************************}
  13330.  
  13331.  
  13332. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13333.  
  13334. rem {******************************************}
  13335. rem {MCD (c) 1994-1995   Beispiel              }
  13336. rem {                                          }
  13337. rem {Version:  KIM2 ab 1.0                     }
  13338. rem {******************************************}
  13339.  
  13340.  
  13341. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13342.  
  13343. rem {******************************************}
  13344. rem {MCD (c) 1994-1995   Beispiel              }
  13345. rem {                                          }
  13346. rem {Version:  KIM2 ab 1.0                     }
  13347. rem {******************************************}
  13348.  
  13349.  
  13350. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13351.  
  13352. rem {******************************************}
  13353. rem {MCD (c) 1994-1995   Beispiel              }
  13354. rem {                                          }
  13355. rem {Version:  KIM2 ab 1.0                     }
  13356. rem {******************************************}
  13357.  
  13358.  
  13359. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13360.  
  13361. rem {******************************************}
  13362. rem {MCD (c) 1994-1995   Beispiel              }
  13363. rem {                                          }
  13364. rem {Version:  KIM2 ab 1.0                     }
  13365. rem {******************************************}
  13366. NIL
  13367.  
  13368.  
  13369. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13370.  
  13371. rem {******************************************}
  13372. rem {MCD (c) 1994-1995   Beispiel              }
  13373. rem {                                          }
  13374. rem {Version:  KIM2 ab 1.0                     }
  13375. rem {******************************************}
  13376.  
  13377.  
  13378. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13379.  
  13380. rem {******************************************}
  13381. rem {MCD (c) 1994-1995   Beispiel              }
  13382. rem {                                          }
  13383. rem {Version:  KIM2 ab 1.0                     }
  13384. rem {******************************************}
  13385.  
  13386.  
  13387. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13388.  
  13389. rem {******************************************}
  13390. rem {MCD (c) 1994-1995   Beispiel              }
  13391. rem {                                          }
  13392. rem {Version:  KIM2 ab 1.0                     }
  13393. rem {******************************************}
  13394.  
  13395.  
  13396. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13397.  
  13398. rem {******************************************}
  13399. rem {MCD (c) 1994-1995   Beispiel              }
  13400. rem {                                          }
  13401. rem {Version:  KIM2 ab 1.0                     }
  13402. rem {******************************************}
  13403. nil
  13404.  
  13405.  
  13406. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13407.  
  13408. rem {******************************************}
  13409. rem {MCD (c) 1994-1995   Beispiel              }
  13410. rem {                                          }
  13411. rem {Version:  KIM2 ab 1.0                     }
  13412. rem {******************************************}
  13413.  
  13414.  
  13415. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13416.  
  13417. rem {******************************************}
  13418. rem {MCD (c) 1994-1995   Beispiel              }
  13419. rem {                                          }
  13420. rem {Version:  KIM2 ab 1.0                     }
  13421. rem {******************************************}
  13422.  
  13423.  
  13424. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13425.  
  13426. rem {******************************************}
  13427. rem {MCD (c) 1994-1995   Beispiel              }
  13428. rem {                                          }
  13429. rem {Version:  KIM2 ab 1.0                     }
  13430. rem {******************************************}
  13431.  
  13432.  
  13433. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13434.  
  13435. rem {******************************************}
  13436. rem {MCD (c) 1994-1995   Beispiel              }
  13437. rem {                                          }
  13438. rem {Version:  KIM2 ab 1.0                     }
  13439. rem {******************************************}
  13440.  
  13441.  
  13442. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13443.  
  13444. rem {******************************************}
  13445. rem {MCD (c) 1994-1995   Beispiel              }
  13446. rem {                                          }
  13447. rem {Version:  KIM2 ab 1.0                     }
  13448. rem {******************************************}
  13449.  
  13450.  
  13451. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13452.  
  13453. rem {******************************************}
  13454. rem {MCD (c) 1994-1995   Beispiel              }
  13455. rem {                                          }
  13456. rem {Version:  KIM2 ab 1.0                     }
  13457. rem {******************************************}
  13458.  
  13459.  
  13460. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13461.  
  13462. rem {******************************************}
  13463. rem {MCD (c) 1994-1995   Beispiel              }
  13464. rem {                                          }
  13465. rem {Version:  KIM2 ab 1.0                     }
  13466. rem {******************************************}
  13467.  
  13468.  
  13469. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13470.  
  13471. rem {******************************************}
  13472. rem {MCD (c) 1994-1995   Beispiel              }
  13473. rem {                                          }
  13474. rem {Version:  KIM2 ab 1.0                     }
  13475. rem {******************************************}
  13476.  
  13477.  
  13478. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13479.  
  13480. rem {******************************************}
  13481. rem {MCD (c) 1994-1995   Beispiel              }
  13482. rem {                                          }
  13483. rem {Version:  KIM2 ab 1.0                     }
  13484. rem {******************************************}
  13485.  
  13486.  
  13487. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13488.  
  13489. rem {******************************************}
  13490. rem {MCD (c) 1994-1995   Beispiel              }
  13491. rem {                                          }
  13492. rem {Version:  KIM2 ab 1.0                     }
  13493. rem {******************************************}
  13494.  
  13495.  
  13496. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13497.  
  13498. rem {******************************************}
  13499. rem {MCD (c) 1994-1995   Beispiel              }
  13500. rem {                                          }
  13501. rem {Version:  KIM2 ab 1.0                     }
  13502. rem {******************************************}
  13503.  
  13504.  
  13505. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13506.  
  13507. rem {******************************************}
  13508. rem {MCD (c) 1994-1995   Beispiel              }
  13509. rem {                                          }
  13510. rem {Version:  KIM2 ab 1.0                     }
  13511. rem {******************************************}
  13512.  
  13513.  
  13514. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13515.  
  13516. rem {******************************************}
  13517. rem {MCD (c) 1994-1995   Beispiel              }
  13518. rem {                                          }
  13519. rem {Version:  KIM2 ab 1.0                     }
  13520. rem {******************************************}
  13521.  
  13522.  
  13523. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13524.  
  13525. rem {******************************************}
  13526. rem {MCD (c) 1994-1995   Beispiel              }
  13527. rem {                                          }
  13528. rem {Version:  KIM2 ab 1.0                     }
  13529. rem {******************************************}
  13530.  
  13531.  
  13532. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13533.  
  13534. rem {******************************************}
  13535. rem {MCD (c) 1994-1995   Beispiel              }
  13536. rem {                                          }
  13537. rem {Version:  KIM2 ab 1.0                     }
  13538. rem {******************************************}
  13539.  
  13540.  
  13541. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13542.  
  13543. rem {******************************************}
  13544. rem {MCD (c) 1994-1995   Beispiel              }
  13545. rem {                                          }
  13546. rem {Version:  KIM2 ab 1.0                     }
  13547. rem {******************************************}
  13548.  
  13549.  
  13550. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13551.  
  13552. rem {******************************************}
  13553. rem {MCD (c) 1994-1995   Beispiel              }
  13554. rem {                                          }
  13555. rem {Version:  KIM2 ab 1.0                     }
  13556. rem {******************************************}
  13557.  
  13558.  
  13559. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13560.  
  13561. rem {******************************************}
  13562. rem {MCD (c) 1994-1995   Beispiel              }
  13563. rem {                                          }
  13564. rem {Version:  KIM2 ab 1.0                     }
  13565. rem {******************************************}
  13566.  
  13567.  
  13568. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13569.  
  13570. rem {******************************************}
  13571. rem {MCD (c) 1994-1995   Beispiel              }
  13572. rem {                                          }
  13573. rem {Version:  KIM2 ab 1.0                     }
  13574. rem {******************************************}
  13575.  
  13576.  
  13577. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13578.  
  13579. rem {******************************************}
  13580. rem {MCD (c) 1994-1995   Beispiel              }
  13581. rem {                                          }
  13582. rem {Version:  KIM2 ab 1.0                     }
  13583. rem {******************************************}
  13584.  
  13585.  
  13586. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13587.  
  13588. rem {******************************************}
  13589. rem {MCD (c) 1994-1995   Beispiel              }
  13590. rem {                                          }
  13591. rem {Version:  KIM2 ab 1.0                     }
  13592. rem {******************************************}
  13593.  
  13594.  
  13595. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13596.  
  13597. rem {******************************************}
  13598. rem {MCD (c) 1994-1995   Beispiel              }
  13599. rem {                                          }
  13600. rem {Version:  KIM2 ab 1.0                     }
  13601. rem {******************************************}
  13602.  
  13603.  
  13604. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13605.  
  13606. rem {******************************************}
  13607. rem {MCD (c) 1994-1995   Beispiel              }
  13608. rem {                                          }
  13609. rem {Version:  KIM2 ab 1.0                     }
  13610. rem {******************************************}
  13611.  
  13612.  
  13613. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13614.  
  13615. rem {******************************************}
  13616. rem {MCD (c) 1994-1995   Beispiel              }
  13617. rem {                                          }
  13618. rem {Version:  KIM2 ab 1.0                     }
  13619. rem {******************************************}
  13620.  
  13621.  
  13622. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13623.  
  13624. rem {******************************************}
  13625. rem {MCD (c) 1994-1995   Beispiel              }
  13626. rem {                                          }
  13627. rem {Version:  KIM2 ab 1.0                     }
  13628. rem {******************************************}
  13629.  
  13630.  
  13631. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13632.  
  13633. rem {******************************************}
  13634. rem {MCD (c) 1994-1995   Beispiel              }
  13635. rem {                                          }
  13636. rem {Version:  KIM2 ab 1.0                     }
  13637. rem {******************************************}
  13638.  
  13639.  
  13640. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13641.  
  13642. rem {******************************************}
  13643. rem {MCD (c) 1994-1995   Beispiel              }
  13644. rem {                                          }
  13645. rem {Version:  KIM2 ab 1.0                     }
  13646. rem {******************************************}
  13647.  
  13648.  
  13649. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13650.  
  13651. rem {******************************************}
  13652. rem {MCD (c) 1994-1995   Beispiel              }
  13653. rem {                                          }
  13654. rem {Version:  KIM2 ab 1.0                     }
  13655. rem {******************************************}
  13656.  
  13657.  
  13658. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13659.  
  13660. rem {******************************************}
  13661. rem {MCD (c) 1994-1995   Beispiel              }
  13662. rem {                                          }
  13663. rem {Version:  KIM2 ab 1.0                     }
  13664. rem {******************************************}
  13665.  
  13666.  
  13667. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13668.  
  13669. rem {******************************************}
  13670. rem {MCD (c) 1994-1995   Beispiel              }
  13671. rem {                                          }
  13672. rem {Version:  KIM2 ab 1.0                     }
  13673. rem {******************************************}
  13674.  
  13675.  
  13676. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13677.  
  13678. rem {******************************************}
  13679. rem {MCD (c) 1994-1995   Beispiel              }
  13680. rem {                                          }
  13681. rem {Version:  KIM2 ab 1.0                     }
  13682. rem {******************************************}
  13683. nil
  13684.  
  13685.  
  13686. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13687.  
  13688. rem {******************************************}
  13689. rem {MCD (c) 1994-1995   Beispiel              }
  13690. rem {                                          }
  13691. rem {Version:  KIM2 ab 1.0                     }
  13692. rem {******************************************}
  13693.  
  13694.  
  13695. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13696.  
  13697. rem {******************************************}
  13698. rem {MCD (c) 1994-1995   Beispiel              }
  13699. rem {                                          }
  13700. rem {Version:  KIM2 ab 1.0                     }
  13701. rem {******************************************}
  13702.  
  13703.  
  13704. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13705.  
  13706. rem {******************************************}
  13707. rem {MCD (c) 1994-1995   Beispiel              }
  13708. rem {                                          }
  13709. rem {Version:  KIM2 ab 1.0                     }
  13710. rem {******************************************}
  13711.  
  13712.  
  13713. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13714.  
  13715. rem {******************************************}
  13716. rem {MCD (c) 1994-1995   Beispiel              }
  13717. rem {                                          }
  13718. rem {Version:  KIM2 ab 1.0                     }
  13719. rem {******************************************}
  13720.  
  13721.  
  13722. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13723.  
  13724. rem {******************************************}
  13725. rem {MCD (c) 1994-1995   Beispiel              }
  13726. rem {                                          }
  13727. rem {Version:  KIM2 ab 1.0                     }
  13728. rem {******************************************}
  13729.  
  13730.  
  13731. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13732.  
  13733. rem {******************************************}
  13734. rem {MCD (c) 1994-1995   Beispiel              }
  13735. rem {                                          }
  13736. rem {Version:  KIM2 ab 1.0                     }
  13737. rem {******************************************}
  13738. nil
  13739.  
  13740.  
  13741. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13742.  
  13743. rem {******************************************}
  13744. rem {MCD (c) 1994-1995   Beispiel              }
  13745. rem {                                          }
  13746. rem {Version:  KIM2 ab 1.0                     }
  13747. rem {******************************************}
  13748.  
  13749.  
  13750. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13751.  
  13752.     def_pulldown_item "p_db",  "
  13753.     def_popup_item "db_2" , "F2"
  13754.     def_popup_item "db_3" , "F3"
  13755.     def_popup_item "db_4" , "F4"
  13756.     def_popup_item "db_5" , "F5"
  13757.     def_popup_item "db_6" , "F6"
  13758.     def_popup_item "db_7" , "F7"
  13759.     def_popup_item "db_8" , "F8"
  13760.     def_popup_item "db_9" , "F9"
  13761.     add_item_array "p_db", "db_", 2, 9
  13762.  
  13763.  
  13764. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13765.  
  13766. rem {******************************************}
  13767. rem {MCD (c) 1994-1995   Beispiel              }
  13768. rem {                                          }
  13769. rem {Version:  KIM2 ab 1.0                     }
  13770. rem {******************************************}
  13771.  
  13772.  
  13773. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13774.  
  13775. rem {******************************************}
  13776. rem {MCD (c) 1994-1995   Beispiel              }
  13777. rem {                                          }
  13778. rem {Version:  KIM2 ab 1.0                     }
  13779. rem {******************************************}
  13780.  
  13781.  
  13782. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13783.  
  13784. rem {******************************************}
  13785. rem {MCD (c) 1994-1995   Beispiel              }
  13786. rem {                                          }
  13787. rem {Version:  KIM2 ab 1.0                     }
  13788. rem {******************************************}
  13789.  
  13790.  
  13791. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13792.  
  13793. rem {******************************************}
  13794. rem {MCD (c) 1994-1995   Beispiel              }
  13795. rem {                                          }
  13796. rem {Version:  KIM2 ab 1.0                     }
  13797. rem {******************************************}
  13798.  
  13799.  
  13800. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13801.  
  13802. rem {******************************************}
  13803. rem {MCD (c) 1994-1995   Beispiel              }
  13804. rem {                                          }
  13805. rem {Version:  KIM2 ab 1.0                     }
  13806. rem {******************************************}
  13807.  
  13808.  
  13809. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13810.  
  13811. rem {******************************************}
  13812. rem {MCD (c) 1994-1995   Beispiel              }
  13813. rem {                                          }
  13814. rem {Version:  KIM2 ab 1.0                     }
  13815. rem {******************************************}
  13816.  
  13817.  
  13818. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13819.  
  13820. rem {******************************************}
  13821. rem {MCD (c) 1994-1995   Beispiel              }
  13822. rem {                                          }
  13823. rem {Version:  KIM2 ab 1.0                     }
  13824. rem {******************************************}
  13825.  
  13826.  
  13827. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13828.  
  13829. rem {******************************************}
  13830. rem {MCD (c) 1994-1995   Beispiel              }
  13831. rem {                                          }
  13832. rem {Version:  KIM2 ab 1.0                     }
  13833. rem {******************************************}
  13834.  
  13835.  
  13836. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13837.  
  13838. rem {******************************************}
  13839. rem {MCD (c) 1994-1995   Beispiel              }
  13840. rem {                                          }
  13841. rem {Version:  KIM2 ab 1.0                     }
  13842. rem {******************************************}
  13843.  
  13844.  
  13845. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13846.  
  13847. rem {******************************************}
  13848. rem {MCD (c) 1994-1995   Beispiel              }
  13849. rem {                                          }
  13850. rem {Version:  KIM2 ab 1.0                     }
  13851. rem {******************************************}
  13852.  
  13853.  
  13854. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13855.  
  13856. rem {******************************************}
  13857. rem {MCD (c) 1994-1995   Beispiel              }
  13858. rem {                                          }
  13859. rem {Version:  KIM2 ab 1.0                     }
  13860. rem {******************************************}
  13861.  
  13862.  
  13863. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13864.  
  13865. rem {******************************************}
  13866. rem {MCD (c) 1994-1995   Beispiel              }
  13867. rem {                                          }
  13868. rem {Version:  KIM2 ab 1.0                     }
  13869. rem {******************************************}
  13870.  
  13871.  
  13872. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13873.  
  13874. rem {******************************************}
  13875. rem {MCD (c) 1994-1995   Beispiel              }
  13876. rem {                                          }
  13877. rem {Version:  KIM2 ab 1.0                     }
  13878. rem {******************************************}
  13879. Zahleneingabe rechtsb╨ændig, zwei Stellen nach dem Komma und
  13880. M╨ñglichkeit Feldinhalt zu ╨æberschreiben.
  13881. DEF_NUMBER "num1",2,2,10,"200.50","100..3000";
  13882.                    "decimal 2","right","clear"
  13883.  
  13884.  
  13885. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13886.  
  13887. rem {******************************************}
  13888. rem {MCD (c) 1994-1995   Beispiel              }
  13889. rem {                                          }
  13890. rem {Version:  KIM2 ab 1.0                     }
  13891. rem {******************************************}
  13892.  
  13893.  
  13894. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13895.  
  13896. rem {******************************************}
  13897. rem {MCD (c) 1994-1995   Beispiel              }
  13898. rem {                                          }
  13899. rem {Version:  KIM2 ab 1.0                     }
  13900. rem {******************************************}
  13901.  
  13902.  
  13903. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13904.  
  13905. rem {******************************************}
  13906. rem {MCD (c) 1994-1995   Beispiel              }
  13907. rem {                                          }
  13908. rem {Version:  KIM2 ab 1.0                     }
  13909. rem {******************************************}
  13910.  
  13911.  
  13912. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13913.  
  13914. rem {******************************************}
  13915. rem {MCD (c) 1994-1995   Beispiel              }
  13916. rem {                                          }
  13917. rem {Version:  KIM2 ab 1.0                     }
  13918. rem {******************************************}
  13919.  
  13920.  
  13921. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13922.  
  13923. rem {******************************************}
  13924. rem {MCD (c) 1994-1995   Beispiel              }
  13925. rem {                                          }
  13926. rem {Version:  KIM2 ab 1.0                     }
  13927. rem {******************************************}
  13928.  
  13929.  
  13930. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13931.  
  13932. rem {******************************************}
  13933. rem {MCD (c) 1994-1995   Beispiel              }
  13934. rem {                                          }
  13935. rem {Version:  KIM2 ab 1.0                     }
  13936. rem {******************************************}
  13937.  
  13938.  
  13939. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13940.  
  13941. rem {******************************************}
  13942. rem {MCD (c) 1994-1995   Beispiel              }
  13943. rem {                                          }
  13944. rem {Version:  KIM2 ab 1.0                     }
  13945. rem {******************************************}
  13946.  
  13947.  
  13948. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13949.  
  13950. rem {******************************************}
  13951. rem {MCD (c) 1994-1995   Beispiel              }
  13952. rem {                                          }
  13953. rem {Version:  KIM2 ab 1.0                     }
  13954. rem {******************************************}
  13955.  
  13956.  
  13957. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13958.  
  13959. rem {******************************************}
  13960. rem {MCD (c) 1994-1995   Beispiel              }
  13961. rem {                                          }
  13962. rem {Version:  KIM2 ab 1.0                     }
  13963. rem {******************************************}
  13964. nil
  13965.  
  13966.  
  13967. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13968.  
  13969. rem {******************************************}
  13970. rem {MCD (c) 1994-1995   Beispiel              }
  13971. rem {                                          }
  13972. rem {Version:  KIM2 ab 1.0                     }
  13973. rem {******************************************}
  13974.  def_window_st "window",  001,001,095, 10, "ProgrammInfo"
  13975.  def_string "status_Info1", 000,0,010,"Text",10;"border", "select off"
  13976.  def_string "status_Info2", 010,0,010,"Text",10;"border", "select off"
  13977.  def_statusbar "status", 2
  13978.  add_item_array "status", "status_Info", 1, 2
  13979.  add_item "window",  "status"
  13980.  win_paint "window"
  13981.    dummy_event
  13982.  end
  13983.  
  13984.  
  13985. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13986.  
  13987. rem {******************************************}
  13988. rem {MCD (c) 1994-1995   Beispiel              }
  13989. rem {                                          }
  13990. rem {Version:  KIM2 ab 1.0                     }
  13991. rem {******************************************}
  13992.  
  13993.  
  13994. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  13995.  
  13996. rem {******************************************}
  13997. rem {MCD (c) 1994-1995   Beispiel              }
  13998. rem {                                          }
  13999. rem {Version:  KIM2 ab 1.0                     }
  14000. rem {******************************************}
  14001.  
  14002.  
  14003. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14004.  
  14005. rem {******************************************}
  14006. rem {MCD (c) 1994-1995   Beispiel              }
  14007. rem {                                          }
  14008. rem {Version:  KIM2 ab 1.0                     }
  14009. rem {******************************************}
  14010. nil
  14011.  
  14012.  
  14013. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14014.  
  14015. rem {******************************************}
  14016. rem {MCD (c) 1994-1995   Beispiel              }
  14017. rem {                                          }
  14018. rem {Version:  KIM2 ab 1.0                     }
  14019. rem {******************************************}
  14020. nil
  14021.  
  14022.  
  14023. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14024.  
  14025. rem {******************************************}
  14026. rem {MCD (c) 1994-1995   Beispiel              }
  14027. rem {                                          }
  14028. rem {Version:  KIM2 ab 1.0                     }
  14029. rem {******************************************}
  14030.  
  14031.  
  14032. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14033.  
  14034. rem {******************************************}
  14035. rem {MCD (c) 1994-1995   Beispiel              }
  14036. rem {                                          }
  14037. rem {Version:  KIM2 ab 1.0                     }
  14038. rem {******************************************}
  14039.  
  14040.  
  14041. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14042.  
  14043. rem {******************************************}
  14044. rem {MCD (c) 1994-1995   Beispiel              }
  14045. rem {                                          }
  14046. rem {Version:  KIM2 ab 1.0                     }
  14047. rem {******************************************}
  14048.  
  14049.  
  14050. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14051.  
  14052. rem {******************************************}
  14053. rem {MCD (c) 1994-1995   Beispiel              }
  14054. rem {                                          }
  14055. rem {Version:  KIM2 ab 1.0                     }
  14056. rem {******************************************}
  14057.  
  14058.  
  14059. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14060.  
  14061. rem {******************************************}
  14062. rem {MCD (c) 1994-1995   Beispiel              }
  14063. rem {                                          }
  14064. rem {Version:  KIM2 ab 1.0                     }
  14065. rem {******************************************}
  14066.  
  14067.  
  14068. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14069.  
  14070. rem {******************************************}
  14071. rem {MCD (c) 1994-1995   Beispiel              }
  14072. rem {                                          }
  14073. rem {Version:  KIM2 ab 1.0                     }
  14074. rem {******************************************}
  14075. nil
  14076.  
  14077.  
  14078. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14079.  
  14080. rem {******************************************}
  14081. rem {MCD (c) 1994-1995   Beispiel              }
  14082. rem {                                          }
  14083. rem {Version:  KIM2 ab 1.0                     }
  14084. rem {******************************************}
  14085.  
  14086.  
  14087. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14088.  
  14089. rem {******************************************}
  14090. rem {MCD (c) 1994-1995   Beispiel              }
  14091. rem {                                          }
  14092. rem {Version:  KIM2 ab 1.0                     }
  14093. rem {******************************************}
  14094.  
  14095.  
  14096. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14097.  
  14098. rem {******************************************}
  14099. rem {MCD (c) 1994-1995   Beispiel              }
  14100. rem {                                          }
  14101. rem {Version:  KIM2 ab 1.0                     }
  14102. rem {******************************************}
  14103. nil
  14104.  
  14105.  
  14106. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14107.  
  14108. rem {******************************************}
  14109. rem {MCD (c) 1994-1995   Beispiel              }
  14110. rem {                                          }
  14111. rem {Version:  KIM2 ab 1.0                     }
  14112. rem {******************************************}
  14113.  
  14114.  
  14115. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14116.  
  14117. rem {******************************************}
  14118. rem {MCD (c) 1994-1995   Beispiel              }
  14119. rem {                                          }
  14120. rem {Version:  KIM2 ab 1.0                     }
  14121. rem {******************************************}
  14122.  
  14123.  
  14124. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14125.  
  14126. rem {******************************************}
  14127. rem {MCD (c) 1994-1995   Beispiel              }
  14128. rem {                                          }
  14129. rem {Version:  KIM2 ab 1.0                     }
  14130. rem {******************************************}
  14131.  
  14132.  
  14133. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14134.  
  14135. rem {******************************************}
  14136. rem {MCD (c) 1994-1995   Beispiel              }
  14137. rem {                                          }
  14138. rem {Version:  KIM2 ab 1.0                     }
  14139. rem {******************************************}
  14140.  
  14141.  
  14142. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14143.  
  14144. rem {******************************************}
  14145. rem {MCD (c) 1994-1995   Beispiel              }
  14146. rem {                                          }
  14147. rem {Version:  KIM2 ab 1.0                     }
  14148. rem {******************************************}
  14149. nil
  14150.  
  14151.  
  14152. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14153.  
  14154. rem {******************************************}
  14155. rem {MCD (c) 1994-1995   Beispiel              }
  14156. rem {                                          }
  14157. rem {Version:  KIM2 ab 1.0                     }
  14158. rem {******************************************}
  14159.  
  14160.  
  14161. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14162.  
  14163. rem {******************************************}
  14164. rem {MCD (c) 1994-1995   Beispiel              }
  14165. rem {                                          }
  14166. rem {Version:  KIM2 ab 1.0                     }
  14167. rem {******************************************}
  14168.  
  14169.  
  14170. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14171.  
  14172. rem {******************************************}
  14173. rem {MCD (c) 1994-1995   Beispiel              }
  14174. rem {                                          }
  14175. rem {Version:  KIM2 ab 1.0                     }
  14176. rem {******************************************}
  14177.  
  14178.  
  14179. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14180.  
  14181. rem {******************************************}
  14182. rem {MCD (c) 1994-1995   Beispiel              }
  14183. rem {                                          }
  14184. rem {Version:  KIM2 ab 1.0                     }
  14185. rem {******************************************}
  14186.  
  14187.  
  14188. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14189.  
  14190. rem {******************************************}
  14191. rem {MCD (c) 1994-1995   Beispiel              }
  14192. rem {                                          }
  14193. rem {Version:  KIM2 ab 1.0                     }
  14194. rem {******************************************}
  14195.  
  14196.  
  14197. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14198.  
  14199. rem {******************************************}
  14200. rem {MCD (c) 1994-1995   Beispiel              }
  14201. rem {                                          }
  14202. rem {Version:  KIM2 ab 1.0                     }
  14203. rem {******************************************}
  14204.  
  14205.  
  14206. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14207.  
  14208. rem {******************************************}
  14209. rem {MCD (c) 1994-1995   Beispiel              }
  14210. rem {                                          }
  14211. rem {Version:  KIM2 ab 1.0                     }
  14212. rem {******************************************}
  14213. NIL
  14214.  
  14215.  
  14216. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14217.  
  14218. rem {******************************************}
  14219. rem {MCD (c) 1994-1995   Beispiel              }
  14220. rem {                                          }
  14221. rem {Version:  KIM2 ab 1.0                     }
  14222. rem {******************************************}
  14223.  
  14224.  
  14225. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14226.  
  14227. rem {******************************************}
  14228. rem {MCD (c) 1994-1995   Beispiel              }
  14229. rem {                                          }
  14230. rem {Version:  KIM2 ab 1.0                     }
  14231. rem {******************************************}
  14232.  
  14233.  
  14234. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14235.  
  14236. rem {******************************************}
  14237. rem {MCD (c) 1994-1995   Beispiel              }
  14238. rem {                                          }
  14239. rem {Version:  KIM2 ab 1.0                     }
  14240. rem {******************************************}
  14241.  
  14242.  
  14243. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14244.  
  14245. rem {******************************************}
  14246. rem {MCD (c) 1994-1995   Beispiel              }
  14247. rem {                                          }
  14248. rem {Version:  KIM2 ab 1.0                     }
  14249. rem {******************************************}
  14250. nil
  14251.  
  14252.  
  14253. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14254.  
  14255. rem {******************************************}
  14256. rem {MCD (c) 1994-1995   Beispiel              }
  14257. rem {                                          }
  14258. rem {Version:  KIM2 ab 1.0                     }
  14259. rem {******************************************}
  14260. nil
  14261.  
  14262.  
  14263. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14264.  
  14265. rem {******************************************}
  14266. rem {MCD (c) 1994-1995   Beispiel              }
  14267. rem {                                          }
  14268. rem {Version:  KIM2 ab 1.0                     }
  14269. rem {******************************************}
  14270.  
  14271.  
  14272. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14273.  
  14274. rem {******************************************}
  14275. rem {MCD (c) 1994-1995   Beispiel              }
  14276. rem {                                          }
  14277. rem {Version:  KIM2 ab 1.0                     }
  14278. rem {******************************************}
  14279.  
  14280.  
  14281. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14282.  
  14283. rem {******************************************}
  14284. rem {MCD (c) 1994-1995   Beispiel              }
  14285. rem {                                          }
  14286. rem {Version:  KIM2 ab 1.0                     }
  14287. rem {******************************************}
  14288.     def_pulldown_item "p_db",  "
  14289.     def_popup_item "db_2" , "F2"
  14290.     def_popup_item "db_3" , "F3"
  14291.     def_popup_item "db_4" , "F4"
  14292.     def_popup_item "db_5" , "F5"
  14293.     def_popup_item "db_6" , "F6"
  14294.     def_popup_item "db_7" , "F7"
  14295.     def_popup_item "db_8" , "F8"
  14296.     def_popup_item "db_9" , "F9"
  14297.     add_item_array "p_db", "db_", 2, 9
  14298. rem {Objekte db_6, db_7 und db_8 werden entfernt}
  14299.     sub_item_array "p_db", "db_", 6, 8
  14300.  
  14301.  
  14302. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14303.  
  14304. rem {******************************************}
  14305. rem {MCD (c) 1994-1995   Beispiel              }
  14306. rem {                                          }
  14307. rem {Version:  KIM2 ab 1.0                     }
  14308. rem {******************************************}
  14309.  
  14310.  
  14311. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14312.  
  14313. rem {******************************************}
  14314. rem {MCD (c) 1994-1995   Beispiel              }
  14315. rem {                                          }
  14316. rem {Version:  KIM2 ab 1.0                     }
  14317. rem {******************************************}
  14318.  
  14319.  
  14320. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14321.  
  14322. rem {******************************************}
  14323. rem {MCD (c) 1994-1995   Beispiel              }
  14324. rem {                                          }
  14325. rem {Version:  KIM2 ab 1.0                     }
  14326. rem {******************************************}
  14327. NIL
  14328.  
  14329.  
  14330. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14331.  
  14332. rem {******************************************}
  14333. rem {MCD (c) 1994-1995   Beispiel              }
  14334. rem {                                          }
  14335. rem {Version:  KIM2 ab 1.0                     }
  14336. rem {******************************************}
  14337. nil
  14338.  
  14339.  
  14340. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14341.  
  14342. rem {******************************************}
  14343. rem {MCD (c) 1994-1995   Beispiel              }
  14344. rem {                                          }
  14345. rem {Version:  KIM2 ab 1.0                     }
  14346. rem {******************************************}
  14347. nil
  14348.  
  14349.  
  14350. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14351.  
  14352. rem {******************************************}
  14353. rem {MCD (c) 1994-1995   Beispiel              }
  14354. rem {                                          }
  14355. rem {Version:  KIM2 ab 1.0                     }
  14356. rem {******************************************}
  14357. nil
  14358.  
  14359.  
  14360. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14361.  
  14362. rem {******************************************}
  14363. rem {MCD (c) 1994-1995   Beispiel              }
  14364. rem {                                          }
  14365. rem {Version:  KIM2 ab 1.0                     }
  14366. rem {******************************************}
  14367. def_window "haupt",...
  14368.   def_notebook "note"
  14369.   def_window "Seite 1",..
  14370.   def_window "Seite 2",..
  14371.   def_window "Seite 3",..
  14372. rem {Windows an das Notebook addieren ...}
  14373.   add_item "note","Seite 1","Seite 2","Seite 3"
  14374. rem {Notebook an das Hauptfenster addieren ...}
  14375.   add_item "haupt","note"
  14376.  
  14377.  
  14378. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14379.  
  14380. rem {******************************************}
  14381. rem {MCD (c) 1994-1995   Beispiel              }
  14382. rem {                                          }
  14383. rem {Version:  KIM2 ab 1.0                     }
  14384. rem {******************************************}
  14385.  
  14386.  
  14387. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14388.  
  14389. rem {******************************************}
  14390. rem {MCD (c) 1994-1995   Beispiel              }
  14391. rem {                                          }
  14392. rem {Version:  KIM2 ab 1.0                     }
  14393. rem {******************************************}
  14394.  
  14395.  
  14396. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14397.  
  14398. rem {******************************************}
  14399. rem {MCD (c) 1994-1995   Beispiel              }
  14400. rem {                                          }
  14401. rem {Version:  KIM2 ab 1.0                     }
  14402. rem {******************************************}
  14403.  
  14404.  
  14405. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14406.  
  14407. rem {******************************************}
  14408. rem {MCD (c) 1994-1995   Beispiel              }
  14409. rem {                                          }
  14410. rem {Version:  KIM2 ab 1.0                     }
  14411. rem {******************************************}
  14412.  
  14413.  
  14414. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14415.  
  14416. rem {******************************************}
  14417. rem {MCD (c) 1994-1995   Beispiel              }
  14418. rem {                                          }
  14419. rem {Version:  KIM2 ab 1.0                     }
  14420. rem {******************************************}
  14421.  
  14422.  
  14423. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14424.  
  14425. rem {******************************************}
  14426. rem {MCD (c) 1994-1995   Beispiel              }
  14427. rem {                                          }
  14428. rem {Version:  KIM2 ab 1.0                     }
  14429. rem {******************************************}
  14430.  
  14431.  
  14432. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14433.  
  14434. rem {******************************************}
  14435. rem {MCD (c) 1994-1995   Beispiel              }
  14436. rem {                                          }
  14437. rem {Version:  KIM2 ab 1.0                     }
  14438. rem {******************************************}
  14439.  
  14440.  
  14441. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  14442.  
  14443. rem {******************************************}
  14444. rem {MCD (c) 1994-1995   Beispiel              }
  14445. rem {                                          }
  14446. rem {Version:  KIM2 ab 1.0                     }
  14447. rem {******************************************}
  14448.  
  14449.