home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
dtx9203
/
driver
/
drvpop.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-06
|
2KB
|
81 lines
/* DRVPOP.C */
#include <stdio.h>
#include <dos.h>
#include <ctype.h>
#include <stdlib.h>
#include "drvlib.inc"
#include "doslib.h"
/* Entfernt Zeichentreiber zu beliebigen Zeitpunkten
Aufruf: DRVPOP <Gerätename>
*/
int main(int argc, char *argv[])
{ DriverPointer p, pLast; /* aktueller Treiber, Vorgänger in der Liste */
int x;
Boolean Found;
char DriverName[9]; /* Name des zu entfernenden Treibers */
char Ans[2]; /* für Rückfragen */
printf("DRVPOP - (c) 6/91 as\n");
if (argc < 2 || (argv[1][0] == '/' && argv[1][1] == '?'))
{ printf("Aufruf: DRVPOP <Name des Zeichentreibers>\n"
"Wirft den angegebenen Treiber aus dem Speicher.\n");
return 0;
}
/* Umsetzen des Treibernamens in Großbuchstaben und Auffüllen
mit Leerzeichen, soweit notwendig */
for (x = 0; x < 8; x++)
DriverName[x] = x >= strlen(argv[1]) ? ' ' : toupper(argv[1][x]);
DriverName[8] = '\0';
if (!strcmp(DriverName,"NUL ")) /* NUL + 5 Leerzeichen */
{ printf("Gerät NUL läßt sich nicht entfernen!\n");
return 1;
}
/* Suche nach dem Treiberkopf sowie seinem Vorgänger in der Liste */
for (pLast = GetFirstHeader(), p = pLast->DNext, Found = FALSE;
!Found && FP_OFF(p) != 0xFFFF; )
{ if (p->DAttr & 0x8000) /* Zeichentreiber? */
for (Found = TRUE, x = 0; x < 8 && Found; x++)
if (p->NameOrUnits[x] != DriverName[x]) Found = FALSE;
if (!Found)
{ pLast = p; p = p->DNext;
}
}
if (!Found)
{ printf("Treiber '%s' nicht gefunden!", argv[1]);
return 1;
}
/* Geht dem Treiber-Segment ein MCB voraus? */
if (peek(FP_SEG(p)-1,1) != FP_SEG(p))
{ printf("'%s' ist ein fest installierter "
"Treiber von DOS - Entfernen sinnlos.\n",argv[1]);
return 0;
}
freemem(FP_SEG(p)); /* den Speicherblock freigeben */
if (_doserrno)
{ printf("Treiber befindet sich in einem 'Subblock' von DOS.\n"
"Trotzdem entfernen (J/N)? "); gets(Ans);
if (toupper(Ans[0]) != 'J')
{ printf("Programm abgebrochen.\n");
return 1;
}
else printf("Treiber '%s' aus der Kette entfernt.\n",DriverName);
}
else printf("Treiber '%s' aus der Kette und "
"aus dem Speicher entfernt.\n",DriverName);
/* Der letzte Schritt: die Kette um den hinauszuwerfenden
Treiber herum schließen */
pLast->DNext = p->DNext; /* A -> B -> C => A -> C */
return 0;
}