home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9202 / dbase / service.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-02  |  3.4 KB  |  106 lines

  1. #include <dos.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "serv.h"
  5.  
  6. /* Modul clockh.c */
  7. void clockhandler (int subfunc, unsigned dx, unsigned bx);
  8. /* Modul screenh.c: */
  9. void screenhandler (int subfunc, unsigned dx, unsigned bx);
  10. /* Modul printh.c: */
  11. void printhandler (unsigned dx, unsigned bx);
  12.  
  13. /* service : ---
  14.    Die Funktion service() stellt die Verteilerzentrale für
  15.    alle Funktionsaufrufe dar. Der Parameterstring wird in
  16.    den Variablen ds und dx (während das Interruptaufrufs
  17.    stehen die Parameter wirklich in den Prozessorregistern
  18.    DS und DX), die Funktionsnummern stehen in ax mit der
  19.    Hauptfunktionsnummer im oberen und der Unterfunktions-
  20.    nummer im unteren Byte. */
  21. void service (unsigned ds, unsigned bx, unsigned ax)
  22. {
  23.  int func,subfunc; /* Haupt- und Unterfunktionsnummer */
  24.  char *cmdstr;       /* Zeiger auf den Kommandostring */
  25.  
  26.  func=ax>>8;       /* Auseinanderfusseln der Nummern */
  27.  subfunc=ax&0xFF;
  28.  switch (func)     /* Hauptfunktionen,
  29.               falls die Hauptfunktionen weitere
  30.               Unterfunktionen haben, wird deren
  31.               Nummer duch subfunc übergeben (siehe
  32.               clockhandler() und screenhandler()).
  33.               */
  34.  {
  35.   /******************************************************/
  36.   /*            Uhr - ScrSaver            */
  37.   /*    siehe Modul clockh.c                */
  38.   /******************************************************/
  39.   case 0 :
  40.    clockhandler(subfunc,ds,bx);
  41.    break;
  42.   /******************************************************/
  43.   /*         Manipulationen des Bildschirms         */
  44.   /*    siehe Modul screenh.c                */
  45.   /******************************************************/
  46.   case 1 :
  47.    screenhandler(subfunc,ds,bx);
  48.    break;
  49.   /******************************************************/
  50.   /*            Drucker-Steuerung        */
  51.   /*    siehe Modul printh.c                */
  52.   /******************************************************/
  53.   case 2 :
  54.    printhandler(ds,bx);
  55.    break;
  56.   /******************************************************/
  57.   /*                Cursor-Form        */
  58.   /*    Format vom cmdstr : <u>,<l>                 */
  59.   /*        wobei    <u> :    dezimale Zahl für       */
  60.   /*                die Startzeile         */
  61.   /*                des Cursorscan             */
  62.   /*            <l> :    dezimale Zahl für       */
  63.   /*                die Endzeile             */
  64.   /*        Aufruf aus dBASE/FoxBASE :             */
  65.   /*        call utility with "30:0,13"        */
  66.   /*        Ergibt bei Monokarten einen             */
  67.   /*        Blockcursor                */
  68.   /******************************************************/
  69.   case 3 :
  70.   {
  71.    int u,l;        /* upper line, lower line der
  72.                Cursordarstellung */
  73.    char *pos;        /* Zeiger auf Kommandostring */
  74.    cmdstr=MK_FP(ds,bx);
  75.    pos=cmdstr;
  76.    u=atoi(pos)+1;        /* Lese aus der Kommando-
  77.                    zeile u ein */
  78.    pos=strchr(pos,',')+1;    /* Finde Komma */
  79.    l=atoi(pos)+1;        /* Lese l ein */
  80.    setcurshape((u<<8)|(l&0xFF)); /* siehe Modul serv.c */
  81.    break;
  82.   }
  83.   /******************************************************/
  84.   /*            Delay                 */
  85.   /*    Format vom cmdstr : <d>                */
  86.   /*        wobei    <d> :    dezimale Zahl für       */
  87.   /*                die Zeit in          */
  88.   /*                Millisekunden (siehe    */
  89.   /*                TURBO C    Reference       */
  90.   /*                Guide            */
  91.   /*        Aufruf aus dBASE/FoxBASE :        */
  92.   /*        call utility with "40:2500"        */
  93.   /*        Ergibt eine Pause von ca. zweieinhalb   */
  94.   /*        Sekunden                     */
  95.   /******************************************************/
  96.   case 4 :
  97.    cmdstr=MK_FP(ds,bx);
  98.    {
  99.     int z;
  100.     z=atoi(cmdstr);
  101.     delay(z);
  102.    }
  103.    break;
  104.  }
  105.  return;
  106. }