# Para desempaquetar sh este archivo
echo desig.c 1>&2
cat >desig.c <<'Fin de desig.c'
/*  desig returns a pointer to the designation of a person
    with the given log ID  */

#include "header.h"

char *get_desig(char l_id[]) {
int i;
for(i = 0; i < size; i++)
        if(strcmp(db[i]->logid, l_id) == 0)
                return(strsave(db[i]->desig));
return NULL;
}
Fin de desig.c
echo dos2unix.c 1>&2
cat >dos2unix.c <<'Fin de dos2unix.c'
/*
* Convierte archivos de texto en formato DOS (\r\n)
* a formato UNIX (\n)
*  Ignacio Vargas
*/

#include 

void main(int argc, char **argv)
{
FILE *in;
int c;

if(argc < 2)
	{
	printf("Uso: %s \n", argv[0]);
	exit(1);
	}

in = fopen (argv[1], "r+"); 
if(in == NULL)
	{
	printf("Error abriendo archivo %s\n", argv[1]);
	exit(1);
	}
c = fgetc(in);
while(c != EOF)
	{
	if(c != '\r')
		putchar(c);
/*	else
		{
		c = fgetc(in);
		if(c != '\n')
			putchar(c);
		}*/
	c = fgetc(in);
	}
close(in);
}

Fin de dos2unix.c
echo ext.c 1>&2
cat >ext.c <<'Fin de ext.c'
/* ext calls search_db seeking a pointer to the designation
   of the person named */

#include "header.h"

char *emp_ext(char n[]) {
        return(search_db(n) ? strsave(db[cur]->ext) : NULL);
}


Fin de ext.c
echo init.c 1>&2
cat >init.c <<'Fin de init.c'
/* open the data base file  */

#include "header.h"

initialize_db(char *db_file) {
FILE *open(), *fp;
/*char *malloc();*/
int i;
        if ((fp = fopen(db_file, "r+")) == NULL) {
		printf("initialize_db: no pude abrir la base de datos\n");
		printf("archivo %s\n", db_file);
		exit(1);
	}
	for (i = 0; ;i++) {
		if(i == MAX_DB) {
			printf("initialize_db: Atencion!\n");
			printf("--tamanio de la base de datos = MAX_DB; extra\n");
			printf("--Algunos registros no ser n leidos.\n");
			break;
		}
		if ((db[i] = (emp *)malloc(sizeof(emp))) == NULL) {
			printf("initialize_db: no hay mas memoria disponible\n");
			exit(1);
		}
		if(fscanf(fp,
			"%s%s%s%s%s%s%s%s",
			db[i]->name,
			db[i]->room,
			db[i]->ext,
			db[i]->desig,
			db[i]->compid,
			db[i]->sig,
			db[i]->logid,
			db[i]->maild) == EOF)
		break;
	}
	size = i;
	fclose(fp);  /* once we modify the file we don't */
		    /* want the close here               */
}

Fin de init.c
echo main.c 1>&2
cat >main.c <<'Fin de main.c'
#include "header.h"
int size = 0;
int cur = 0;
emp *db[MAX_DB];
/* main controls menu display, calls appropiate functions and
   prints the information sought or an error message */

main() {
char *s;
char name[LN];       /* name is generic string */

initialize_db(DB_FILE);
while (1) {
	switch (prt_screen()) {
		case 1:  printf("\nNombre? ");
			 scanf("%s",name);  /* gets name */
			 if ((s = emp_ext(name)) != NULL)
				printf("\nLa extension de %s es %s. \n",name, s);
			 else
				printf("\nEl nombre %s no esta en la base de datos.\n",
					name);
			 contin();
			 break;
		case 2:  printf("\nLogin?");
			 scanf("%s", name);
			 if ((s = get_desig(name)) != NULL)
				printf("\nLa materia para el login %s es %s. \n", name, s);
			 else
				printf("\nEl Login %s no esta en la base de datos.\n",
					name);
			 contin();
			 break;
		case 3:  print_db();
			 contin();
			 break;
		case 4:  exit(0);
		default: printf("\nSeleccion erronea.\n");
			 contin();
	}
}
}


prt_screen() {
char response[2];

	system("clear");  /*  printf("\f")  */

	printf("1. Numero de Extension\n");
	printf("2. Login ID\n");
	printf("3. Imprimir la base de datos\n");
	printf("4. Salir\n");
	printf("Teclea el numero de tu seleccion: ");
	scanf("%s", response);
	return(atoi(response));
}

contin() {
char keystroke[2];

	printf("\nPresiona c para continuar = ");
	scanf("%s", keystroke);
}


Fin de main.c
echo print.c 1>&2
cat >print.c <<'Fin de print.c'
/*   print the data base  */

#include "header.h"

print_db() {
int i;
printf("NOMBRE              CUARTO     EXT    MATERIAS      CO-ID    FIRMA   L-ID  DIRECCION\n");
printf("----------------------------------------------------------------------------------------\n\n");
for(i=0; i < size; i++)
	printf("%-20s %-8s  %-5s  %-12s   %-6s  %-4s    %-4s  %-50s\n\n",
                db[i]->name,
                db[i]->room,
                db[i]->ext,
                db[i]->desig,
                db[i]->compid,
                db[i]->sig,
                db[i]->logid,
                db[i]->maild);
}
Fin de print.c
echo save.c 1>&2
cat >save.c <<'Fin de save.c'
/*  save allocate storage for a string and returns a 
    pointer to this address  */

#include "header.h"

char *strsave(char s[]) {
char *p;
/*char *malloc();*/

	if((p = malloc((unsigned) strlen(s) + 1)) == NULL) {
		printf("strsave: Ya no hay memoria\n");
                exit(1);
        }
        else
                strcpy(p,s);
        return p;
}
Fin de save.c
echo search.c 1>&2
cat >search.c <<'Fin de search.c'
/*  search compares the name passed to it with the name being pointed to by 
    cur and if not identical searches the rest of the data base end sets the
    value of cur if a match is found  */


#include "header.h"
search_db(char n[]) {
        if(strncmp(n,db[cur]->name, strlen(n)) == 0)
                return(1);
        for(cur = 0; cur< size; cur++)
		if(strncmp(n, db[cur]->name, strlen(n)) == 0)
                        return 1;
        cur = 0;
        return 0;
}
Fin de search.c
echo header.h 1>&2
cat >header.h <<'Fin de header.h'
#include 
#include 
#include 

#define DB_FILE "database"
#define LN 20
#define LR 8
#define LE 5
#define LD 12
#define LC 6
#define LS 4
#define LL 4
#define LM 50
#define MAX_DB 100

char *strcpy();
char *emp_ext();
char *get_desig();
char *strsave(char s[]);
int search_db(char n[]);
/*int strlen();*/
/*int strcmp();*/

typedef struct {
        char name[LN];
        char room[LR];
        char ext[LE];
        char desig[LD];
        char compid[LC];
        char sig[LS];
        char logid[LS];
        char maild[LM];
} emp;

extern emp *db[];
extern int cur;
extern int size;

Fin de header.h
echo Makefile 1>&2
cat >Makefile <<'Fin de Makefile'
cc -o dbmanager main.c init.c print.c search.c  desig.c ext.c save.c

Fin de Makefile
echo database 1>&2
cat >database <<'Fin de database'
nnnnnnnnnnnnnnnnnnn rrrrrrr eeee ddddddddddd ccccc sss lll mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
Nombre Cuarto Ext Materias CO_ID FRM LID Direccion
Jorge_Ramirez C-201 123 Fisica aaaa JR 321 jramirez@academ01.cem.itesm.mx
Sebastian_Rios A-202 135 Matematicas bbbb SR 543 srios@serpiente.dgsca.unam.mx
Sara_Cruz H-304 227 Sist_Distr asdf SC 556 scruz@hp9000a1.uam.azc.mx


Fin de database

    Source: geocities.com/siliconvalley/park/9210

               ( geocities.com/siliconvalley/park)                   ( geocities.com/siliconvalley)