home *** CD-ROM | disk | FTP | other *** search
- #include <dos.h>
- #include <stdlib.h>
- #include <string.h>
- #include "serv.h"
-
- /* Modul clockh.c */
- void clockhandler (int subfunc, unsigned dx, unsigned bx);
- /* Modul screenh.c: */
- void screenhandler (int subfunc, unsigned dx, unsigned bx);
- /* Modul printh.c: */
- void printhandler (unsigned dx, unsigned bx);
-
- /* service : ---
- Die Funktion service() stellt die Verteilerzentrale für
- alle Funktionsaufrufe dar. Der Parameterstring wird in
- den Variablen ds und dx (während das Interruptaufrufs
- stehen die Parameter wirklich in den Prozessorregistern
- DS und DX), die Funktionsnummern stehen in ax mit der
- Hauptfunktionsnummer im oberen und der Unterfunktions-
- nummer im unteren Byte. */
- void service (unsigned ds, unsigned bx, unsigned ax)
- {
- int func,subfunc; /* Haupt- und Unterfunktionsnummer */
- char *cmdstr; /* Zeiger auf den Kommandostring */
-
- func=ax>>8; /* Auseinanderfusseln der Nummern */
- subfunc=ax&0xFF;
- switch (func) /* Hauptfunktionen,
- falls die Hauptfunktionen weitere
- Unterfunktionen haben, wird deren
- Nummer duch subfunc übergeben (siehe
- clockhandler() und screenhandler()).
- */
- {
- /******************************************************/
- /* Uhr - ScrSaver */
- /* siehe Modul clockh.c */
- /******************************************************/
- case 0 :
- clockhandler(subfunc,ds,bx);
- break;
- /******************************************************/
- /* Manipulationen des Bildschirms */
- /* siehe Modul screenh.c */
- /******************************************************/
- case 1 :
- screenhandler(subfunc,ds,bx);
- break;
- /******************************************************/
- /* Drucker-Steuerung */
- /* siehe Modul printh.c */
- /******************************************************/
- case 2 :
- printhandler(ds,bx);
- break;
- /******************************************************/
- /* Cursor-Form */
- /* Format vom cmdstr : <u>,<l> */
- /* wobei <u> : dezimale Zahl für */
- /* die Startzeile */
- /* des Cursorscan */
- /* <l> : dezimale Zahl für */
- /* die Endzeile */
- /* Aufruf aus dBASE/FoxBASE : */
- /* call utility with "30:0,13" */
- /* Ergibt bei Monokarten einen */
- /* Blockcursor */
- /******************************************************/
- case 3 :
- {
- int u,l; /* upper line, lower line der
- Cursordarstellung */
- char *pos; /* Zeiger auf Kommandostring */
- cmdstr=MK_FP(ds,bx);
- pos=cmdstr;
- u=atoi(pos)+1; /* Lese aus der Kommando-
- zeile u ein */
- pos=strchr(pos,',')+1; /* Finde Komma */
- l=atoi(pos)+1; /* Lese l ein */
- setcurshape((u<<8)|(l&0xFF)); /* siehe Modul serv.c */
- break;
- }
- /******************************************************/
- /* Delay */
- /* Format vom cmdstr : <d> */
- /* wobei <d> : dezimale Zahl für */
- /* die Zeit in */
- /* Millisekunden (siehe */
- /* TURBO C Reference */
- /* Guide */
- /* Aufruf aus dBASE/FoxBASE : */
- /* call utility with "40:2500" */
- /* Ergibt eine Pause von ca. zweieinhalb */
- /* Sekunden */
- /******************************************************/
- case 4 :
- cmdstr=MK_FP(ds,bx);
- {
- int z;
- z=atoi(cmdstr);
- delay(z);
- }
- break;
- }
- return;
- }