Bah, il n'y a pas tout... Manque les routines Assembleur (2)...
Et ce n'est plus du tout fonctionnel (pourtant, ça marchait super bien à l'époque)
[Vous devez être identifié pour voir le texte caché.]
Ah ah ah ah ah...![]()
Alain
/*************************************************************************/
/* */
/* Programme : TESTSYS.C (Vers 4.1) Langage : Turbo C 2.0 */
/* */
/* Objet : Affichage des caract?ristiques syst?me pour micro- */
/* ordinateurs type IBM-PC/XT/AT/386 et compatibles */
/* dont le syst?me d'exploitation est MS-DOS. */
/* Programme non transportable !!! */
/* */
/* Options/Compiler/Model : Tiny */
/* Options/Linker/Case-sensitive Link : Off */
/* */
/* Date : 25/07/89 Auteur : Alain GAYDON */
/* */
/*************************************************************************/
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
/* un OCTET */
typedef unsigned char OCTET;
/* Constantes */
#define FAUX 0
#define VRAI 1
void main()
{
int testproc(void);
union REGS Rin, Rout;
struct SREGS Sreg;
unsigned long int M_octets;
unsigned short int PC = 0, PC_XT = 0, PC_AT = 0, I_Pro = 0, k, l;
int GraphDriver, GraphMode;
char car;
register unsigned int i, j;
/* taille prog CS/DS (64 Ko Mod Tiny) */
unsigned int Occ_Prog = 64;
/* initialisation mode vid?o 80x25 couleur */
textmode(C80);
directvideo = 0;
clrscr();
/* titre */
gotoxy(68, 1);
textcolor(14);
cputs("TESTSYS");
textcolor(12);
cputs(" V4.1");
gotoxy(68, 2);
printf("(c)1989, GNA");
textcolor(15);
gotoxy(1, 1);
/* type d'ordinateur */
printf("Type de micro-ordinateur : ");
switch ((OCTET) peekb(0xF000, 0xFFFE))
{
case 0xFF : cprintf("PC ou compatible\r\n");
PC = VRAI;
break;
case 0xFE : cprintf("PC-XT ou compatible\r\n");
PC_XT = VRAI;
break;
case 0xFD : cprintf("PC Junior\r\n");
PC = VRAI;
break;
case 0xFC : Rin.h.ah = 0xC0;
int86x(0x15, &Rin, &Rout, &Sreg);
switch (peekb(Sreg.es, Rout.x.bx + 3))
{
case 0x05 : cprintf("PS/2 mod?le 60\r\n");
PC_AT = VRAI;
break;
case 0x04 : cprintf("PS/2 mod?le 50\r\n");
PC_AT = VRAI;
break;
default : cprintf("PC-AT ou compatible\r\n");
PC_AT = VRAI;
}
break;
case 0xFB : cprintf("PC-XT ou compatible\r\n");
PC_XT = VRAI;
break;
case 0xFA : cprintf("PS/2 mod?le 30\r\n");
PC_AT = VRAI;
break;
case 0xF9 : cprintf("PC Convertible\r\n");
PC_XT = VRAI;
break;
case 0xF8 : cprintf("PS/2 mod?le 80\r\n");
PC_AT = VRAI;
break;
default : printf("???\n");
}
/* bus extensions */
printf("Type du bus d'extension : ");
if (PC_AT)
{
Rin.h.ah = 0xC0;
int86x(0x15, &Rin, &Rout, &Sreg);
if ((peekb(Sreg.es, Rout.x.bx + 5) >> 1) & 1)
cprintf("architecture MCA\r\n");
else cprintf("architecture ISA -> 16 bits\r\n");
}
else cprintf("architecture ISA -> 8 bits\r\n");
/* pr?sence de coprocesseur math?matique */
printf("Coprocesseur math?matique : ");
int86(0x11, &Rin, &Rout);
if ((Rout.x.ax >> 1) & 1)
{
cprintf("pr?sent -> ");
switch (I_Pro)
{
case 4 : cprintf("int?gr? dans l'iAPX 80486");
break;
case 3 : cprintf("i80387");
break;
case 2 : cprintf("i80287");
break;
case 1 : cprintf("i8087");
break;
default : printf("???");
}
if ((PC_AT) && (I_Pro <4) && (I_Pro > 0)) cprintf(" ; IRQ 13\r\n");
else printf("\n");
}
else cprintf("absent\r\n");
/* utilisation canal de DMA */
printf("Contr?leur de DMA (8237A-5) : ");
int86(0x11, &Rin, &Rout);
if ((PC || PC_XT) && ((Rout.x.ax >> 8) & 1)) cprintf("absent\r\n");
else cprintf("pr?sent -> port 000, DRQ 1, DRQ 2, DRQ 3\r\n");
/* horloge temps r?el RTC sauvegard?e */
if (PC_AT) printf("Horloge RTC (8254) sauvegard?e : ");
else printf("Horloge RTC (8253-5) sauvegard?e : ");
Rin.h.ah = 0x2A;
intdos(&Rin, &Rout); /* DH mois, DL jour */
i = Rout.x.dx;
Rin.h.ah = 0x04;
int86(0x1A, &Rin, &Rout); /* DH mois, DL jour : sortie en BCD */
j = (((Rout.h.dh >> 4) * 10) + (Rout.h.dh & 0x0F)) * 256 +
((Rout.h.dl >> 4) * 10) + (Rout.h.dl & 0x0F);
if (i == j) cprintf("pr?sente -> port 040, IRQ 8\r\n");
else cprintf("absente ou hors service\r\n");
/* taille de la ROM BIOS */
printf("Taille de l'EPROM de la ROM BIOS : ");
j = 0;
i = 0xF000;
while (i <0xFFFE)
{
if ((peekb(i, 0) != 0xFF) && (peekb(i, 1) != 0xFF)) j++;
if (i <0xFF00) i += 0x0100;
else i += 0x00FF;
}
cprintf("%d Ko\r\n", j * 4);
/* date de la ROM BIOS */
printf("Date de la ROM BIOS : ");
i = peekb(0xF000, 0xFFFB) & 0x0F;
j = peekb(0xF000, 0xFFFC) & 0x0F;
if ((i <10) && (j <10) && (((i * 10) + j) > 79))
{
cprintf("%c%c/%c%c/%c%c\r\n", (OCTET) peekb(0xF000, 0xFFF8),
(OCTET) peekb(0xF000, 0xFFF9),
(OCTET) peekb(0xF000, 0xFFF5),
(OCTET) peekb(0xF000, 0xFFF6),
(OCTET) peekb(0xF000, 0xFFFB),
(OCTET) peekb(0xF000, 0xFFFC));
}
else cprintf("absente\r\n");
/* signature de la ROM BIOS */
printf("Signature de la ROM BIOS : "); /* pas de la tarte ! */
k = 0;
j = 0xE000; /* adresse F000:E000 pour PC-XT et PC */
i = 0xF000;
while ((j <0xE100) && (k == 0)) /* recherche dans 255 car. apr?s E000 */
{
if ((peekb(i, j) == 0x28) && ((peekb(i, j + 1) == 0x43) ||
(peekb(i, j + 1) == 0x63)) &&
(peekb(i, j + 2) == 0x29)) /* (c) */
{
for (l = j; l <(j + 4); l++) cprintf("%c", peekb(i, l));
j = l;
k = 3;
while ((k <40) &&
(peekb(i, j) != 0x00) &&
(peekb(i, j) != 0x40) &&
(peekb(i, j) != 0x24) &&
(!((peekb(i, j) <0x20) && (peekb(i, j) > 0x7D))) &&
(!((peekb (i, j - 1) == 0x2E) && (peekb (i, j) == 0x20))))
{
cprintf("%c", peekb(i, j));
j++;
k++;
}
}
else j++;
}
if (k == 41) cprintf("...");
if (k > 0) printf("\n");
else
{
j = 0x0000; /* adresse F000:0000 pour PS/2 et PC-AT */
while ((j <0x0100) && (k == 0))
{
if ((peekb(i, j) == 0x28) && ((peekb(i, j + 1) == 0x43) ||
(peekb(i, j + 1) == 0x63)) &&
(peekb(i, j + 2) == 0x29)) /* */
{
for (l = j; l <(j + 4); l++) cprintf("%c", peekb(i, l));
j = l;
k = 3;
while ((k <40) &&
(peekb(i, j) != 0x00) &&
(peekb(i, j) != 0x40) &&
(peekb(i, j) != 0x24) &&
(!((peekb(i, j) <0x20) && (peekb(i, j) > 0x7D))) &&
(!((peekb (i, j - 1) == 0x2E) &&
(peekb (i, j) == 0x20))))
{
cprintf("%c", peekb(i, j));
j++;
k++;
}
}
else j++;
}
if (k == 41) cprintf("...");
if (k > 0) printf("\n");
else cprintf("absente\r\n");
}
/* ROM BIOS suppl?mentaires */
printf("ROM BIOS suppl?mentaires paragr. : ");
l = 0;
k = 0;
j = 0;
i = 0xC000;
while (i <0xD000)
{
if ((peekb(i, 0) != 0xFF) && (peekb(i, 1) != 0xFF))
{
j++;
if (k == 0)
{
k = 1;
if (l <3) cprintf("%X ? ", i);
}
}
else
if (k == 1)
{
k = 0;
l++;
if (l <3) cprintf("%X, ", i - 1);
}
i += 0x0100;
}
if (k == 1)
{
l++;
if (l <3) cprintf("%X, ", i - 1);
}
if (l > 2) cprintf("\b\b... ");
if (j > 0) cprintf("\b\b -> %d Ko\r\n", j * 4);
else cprintf("aucune\r\n");
/* cartouches ROM */
printf("Cartouches ROM suppl?mentaires : ");
l = 0;
k = 0;
j = 0;
i = 0xD000;
while (i <0xE000)
{
if ((peekb(i, 0) != 0xFF) && (peekb(i, 1) != 0xFF)) j++;
i += 0x0100;
}
if (j > 0) k++;
i = 0xE000;
while (i <0xF000)
{
if ((peekb(i, 0) != 0xFF) && (peekb(i, 1) != 0xFF)) l++;
i += 0x0100;
}
if (l > 0) k++;
j += l;
if (j > 0) cprintf("%d -> %d Ko\r\n", k, j * 4);
else cprintf("aucune\r\n");
/* taille de la m?moire RAM */
printf("Base RAM sur carte-m?re : ");
if (PC)
{
int86(0x11, &Rin, &Rout);
switch ((Rout.x.ax >> 2) & 3)
{
case 3 : cprintf("64 Ko\r\n");
break;
case 2 : cprintf("48 Ko\r\n");
break;
case 1 : cprintf("32 Ko\r\n");
break;
case 0 : cprintf("16 Ko\r\n");
}
}
else cprintf("uniquement sur PC et PC Junior\r\n");
printf("RAM conventionnelle (max 640 Ko) : ");
int86(0x12, &Rin, &Rout);
cprintf("%u Ko -> %u Ko libres\r\n", Rout.x.ax,
(allocmem(0xFFFF, 0) / 64) + Occ_Prog);
/* taille de la m?moire au dessus de 1 Mo */
printf("RAM suppl?mentaire (extension) : ");
if (PC_AT)
{
Rin.h.ah = 0x88;
int86(0x15, &Rin, &Rout);
if (Rout.x.ax != 0) cprintf("Hi-RAM -> %u Ko\r\n", Rout.x.ax);
else cprintf("absente\r\n");
}
else cprintf("uniquement sur PC-AT et PS/2\r\n");
/* m?moire d'extension EMS */
printf("RAM suppl?mentaire (expansion) : ");
Rin.x.ax = 0x3567;
intdosx(&Rin, &Rout, &Sreg);
if ((Sreg.es != 0) && (Rout.x.bx != 0) &&
(peekb(Sreg.es, 0x000A) == 0x45) &&
(peekb(Sreg.es, 0x000B) == 0x4D) &&
(peekb(Sreg.es, 0x000C) == 0x4D)) /* cha?ne "EMM" */
{
Rin.h.ah = 0x40;
int86(0x67, &Rin, &Rout);
switch (Rout.h.ah)
{
case 0x81 : cprintf("pr?sente (EMS hors service)\r\n");
break;
case 0x80 : cprintf("pr?sente (EMM hors service)\r\n");
break;
case 0x00 : Rin.h.ah = 0x46;
int86(0x67, &Rin, &Rout);
if (Rout.h.ah == 0) cprintf("EMM V%u -> ",
Rout.h.al);
Rin.h.ah = 0x42;
int86(0x67, &Rin, &Rout);
if (Rout.h.ah == 0) cprintf("%u", Rout.x.dx);
else printf("???");
cprintf(" pages EMS install?es\r\n");
break;
default : printf("???\n");
}
}
else cprintf("absente\r\n");
/* affichage vid?o initial */
printf("Mode vid?o (initial) : ");
int86(0x11, &Rin, &Rout);
switch (Rout.x.ax & 48)
{
case 48 : cprintf("monochrome -> 80 x 25\r\n");
break;
case 32 : cprintf("couleur -> 80 x 25\r\n");
break;
case 16 : cprintf("couleur -> 40 x 25\r\n");
break;
default : printf("???\n");
}
/* type de l'adaptateure vid?o (graphique ou texte) */
printf("Adaptateur vid?o : ");
GraphDriver = DETECT;
detectgraph(&GraphDriver, &GraphMode);
switch (GraphDriver)
{
case 10 : cprintf("PC 3270 -> 720 x 350\r\n");
break;
case 9 : Rin.h.ah = 0x12;
Rin.h.bl = 0x10;
int86(0x10, &Rin, &Rout);
cprintf("VGA (%d Ko) -> 640 x 480 ; seg %X\r\n",
(Rout.h.bl + 1) * 64,
((Rout.h.bl + 1) > 1) ? 0xA000 : 0xB000);
break;
case 8 : cprintf("AT&T 400 -> 640 x 400\r\n");
break;
case 7 : cprintf("Hercules (32 Ko) -> 720 x 348 ; seg B000\r\n");
break;
case 6 : cprintf("IBM 8514 -> 1024 x 768\r\n");
break;
case 5 : Rin.h.ah = 0x12;
Rin.h.bl = 0x10;
int86(0x10, &Rin, &Rout);
cprintf("EGA mono (%d Ko) -> 640 x 350 ; seg B000\r\n",
(Rout.h.bl + 1) * 64);
break;
case 4 :
case 3 : Rin.h.ah = 0x12;
Rin.h.bl = 0x10;
int86(0x10, &Rin, &Rout);
cprintf("EGA (%d Ko) -> 640 x 350 ; seg %X\r\n",
(Rout.h.bl + 1) * 64,
((Rout.h.bl + 1) > 1) ? 0xA000 : 0xB000);
break;
case 2 : cprintf("MCGA -> 640 x 480\r\n");
break;
case 1 : cprintf("CGA (16 Ko) -> 640 x 200 ; seg B800\r\n");
break;
default : cprintf("MDA (8 Ko) -> texte 80 x 25 ; seg B000\r\n");
}
/* adresse du port vid?o */
printf("Adresse du contr?leur vid?o CRT : ");
cprintf("port %X", peek(0x40, 0x63));
printf("\n");
/* nombre de disques durs */
printf("Nombre de disques durs : ");
j = peekb(0x0040, 0x0075);
if (j > 0)
{
cprintf("%u ->", j);
Rin.h.ah = 0x08;
Rin.h.dl = 0x7F + j;
int86(0x13, &Rin, &Rout);
if (Rout.h.dl == j)
{
for (i = 1; i <(j + 1); i++)
{
Rin.h.ah = 0x08;
Rin.h.dl = 0x7F + i;
int86(0x13, &Rin, &Rout);
if (!(Rout.x.cflag & 1))
{
M_octets = (Rout.h.cl & 0x3F);
M_octets *= Rout.h.ch + ((Rout.h.cl >> 6) * 256);
M_octets *= Rout.h.dh + 1;
M_octets /= 2048;
cprintf(" %ld Mo,", M_octets);
}
else
{
printf(" ???");
cprintf(",");
}
}
cprintf("\b ;");
if (PC_XT) cprintf(" port 320, IRQ 5\r\n");
else if (PC_AT) cprintf(" port 1F0, IRQ 6\r\n");
else printf("\b \n");
}
else printf(" ???\n");
}
else cprintf("aucun\r\n");
/* nombre de lecteurs de disquettes */
printf("Nombre de lecteurs de disquettes : ");
int86(0x11, &Rin, &Rout);
if (Rout.x.ax & 1)
{
j = ((Rout.x.ax >> 6) & 3) + 1;
if (PC_AT)
{
cprintf("%d ->", j);
for (i = 1; i <(j + 1); i++)
{
Rin.h.ah = 0x15;
Rin.h.dl = i - 1;
int86(0x13, &Rin, &Rout);
if (!(Rout.x.cflag & 1))
{
switch (Rout.h.ah)
{
case 2 : cprintf(" 2S/HD,");
break; /* haute densit? */
case 1 : cprintf(" 2S/2D,");
break; /* double densit? */
default : printf(" ???");
cprintf(",");
}
}
else
{
printf(" ???");
cprintf(",");
}
}
cprintf("\b ;");
}
else cprintf("%d ->", j);
cprintf(" port 3F0, IRQ 6\r\n");
}
else cprintf("aucun\r\n");
/* nombre et adresse des ports s?rie */
printf("Nombre de ports s?rie (RS232) : ");
int86(0x11, &Rin, &Rout);
j = (Rout.x.ax >> 9) & 0x03;
if (j > 0)
{
cprintf("%d ->", j);
if (j > 2) k = 2;
else k = j;
k *= 2;
for (i = 0; i <k; i += 2)
cprintf(" COM%u: port %X,", (i / 2) + 1, peek(0x0040, i));
if (j > 2) cprintf("\b... ");
printf("\b \n");
}
else cprintf("aucun\r\n");
/* nombre et adresse des ports parall?les */
printf("Nombre de ports parall?les : ");
int86(0x11, &Rin, &Rout);
j = Rout.x.ax >> 14;
if (j > 0)
{
cprintf("%d ->", j);
if (j > 2) k = 2;
else k = j;
k *= 2;
k += 8;
for (i = 8; i <k; i += 2)
cprintf(" LPT%u: port %X,", ((i - 8) / 2) + 1, peek(0x0040, i));
if (j > 2) cprintf("\b... ");
printf("\b \n");
}
else cprintf("aucun\r\n");
/* pr?sence de port manette et adresse ?ventuelle */
printf("Port manettes : ");
int86(0x11, &Rin, &Rout);
if ((Rout.x.ax >> 12) & 1) cprintf("pr?sent -> port 200\r\n");
else cprintf("absent\r\n");
/* pr?sence de la souris */
printf("Dispositif de pointage (souris) : ");
Rin.x.ax = 0x3533;
intdosx(&Rin, &Rout, &Sreg);
if ((Sreg.es != 0) && (Rout.x.bx != 0))
{
Rin.x.ax = 0x0000;
int86(0x33, &Rin, &Rout);
if (Rout.x.ax != 0x0000)
{
i = Rout.x.bx;
Rin.x.ax = 0x0024;
int86(0x33, &Rin, &Rout);
switch (Rout.h.ch)
{
case 5 : cprintf("HP");
break;
case 4 : cprintf("PS/2");
break;
case 3 : cprintf("InPort");
break;
case 2 : cprintf("S?rie");
break;
case 1 : cprintf("Bus");
break;
default : printf("???");
}
if ((Rout.h.ch <6) && (Rout.h.ch > 0))
cprintf(" (V%x.%x)", Rout.h.bh, Rout.h.bl);
cprintf(" -> %d boutons", i);
if ((Rout.h.ch <6) && (Rout.h.ch > 0))
cprintf(" ; IRQ %u\r\n", Rout.h.cl);
else printf("\n");
}
else cprintf("absent\r\n");
}
else cprintf("absent\r\n");
/* version du dos utilis? */
printf("Version du DOS utilis? : ");
Rin.h.ah = 0x30;
intdos(&Rin, &Rout);
if (Rout.h.al == 0x00) cprintf("DOS 1.%d", Rout.h.ah);
else cprintf("DOS %d.%d", Rout.h.al, Rout.h.ah);
/* F I N */
gotoxy(68, 25);
printf("[Esc] -> Fin");
gotoxy(69, 25);
car = 0x00;
while(!(car == 0x1B)) car = getch();
textcolor(7);
clrscr();
}Hors ligne
l'antiquité ![]()
Hors ligne
Oui, une bonne vieille antiquité...
Mais il fallait bien connaître les machines et les différentes versions MS-DOS pour arriver à développer un truc pareil... En plus, cela permettait à coup sûr de mettre le doigt sur une panne matérielle sournoise. Toute mon équipe Micro l'utilisait ! C'était très pratique comme truc !
Par la suite, quand je bossais à Sophia-Antipolis, j'ai écrit en C-shell un prog d'install "full" automatique de SGBD Oracle... Une autre paire de manches... Idem, très bien connaître les diverses machines (savoir détecter sur quelle bécane l'appli tourne) et très bien connaître sa config (c'est le prog qui scannait tout - une sorte de Bot) il suffisait ensuite de donner le nom du FS (filesystem de destination) il était créé automatiquement à la bonne taille et les UID et PWD du SU (Super user) Oracle, pour l'admin !
Puis, j'ai créé une procédure universelle (toujours en C-Shell) d'installation automatique de Patches et Updates divers (Système ou Applicatif)... Pareil... On mettait le CD dans le lecteur, on lançait le truc (install.sh + [enter]) et on se cassait... Implantable, la proc !
Pendant que le bazar bossait, on pouvait aller draguer les secrétaires à la machine à café...
La mienne, trop jalouse, était enfermée à double tour dans mon bureau. Ah ah ah ah ah...
C'était le bon temps... Elle était belle la vie !![]()
Al
PS :Et je me suis aussi pelé des tas de programmes automatiques pour le passage à l'an 2000 !
Mais ça, c'est encore une autre histoire... pitting, quelle galère ! Tout ça pour des économies de bout de chandelles (ans sur 2 chiffres au lieu de 4) mais au début, la mémoire était tellement chère... Et puis tout le monde (même moi) croyait que tout aurait changé plus vite... Mais non ! OOPS !
Tout cela sur des Minis, des Moyens et des Gros Systèmes (Mainframes)... Faut vraiment être taré !

Hors ligne
vieillerie ??
javascript est basé là dessus, si je me trompe
les étudiants en informatique avalent encore du C et C++
Hors ligne
Oui, une vieillerie, dans ce cas précis...
Le matériel a tellement évolué depuis 1990 que ce programme (celui dont le code est donné) ne fonctionne plus sur les nouvelles machines (il teste le matériel)...
Bien sûr que le C est toujours là, avec C++, C#, Java, Java Script, C-Shell et PHP...
Certains langages sont compilés, d'autres interprétés, d'autres parsés par un préprocesseur...![]()
Al
Hors ligne
Le C? Oui, encore que ça c'est du turboC bien français (à l'époque). Moi, je préfère le B qui lui a donné naissance (B comme Bell)... C++, rien à voir avec C, en dehors de la syntaxe... ![]()
Je vois qu'Alain range ses placards tout de même tous les 10 ans... ![]()
(Peut-être que Dom l'y a obligé?...) ![]()
Mais je suis témoin que ça marchait...
Dernière modification par Horslemonde (20/06/2006 23:58:23)
Hors ligne
J'ai retrouvé bien pire !
Accrochez vous aux branches...
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <signal.h>
#include <stdio.h>
#include <tai.h>
#include <time.h>
#define COM_BULL "com_bull.conf" /* nom du fichier de configuration */
#define ENTETE_MESSAGE_DPS7 "TCT01 " /* entête du msg transmis au dps7 */
#define ERREUR_SYSTEME "2" /* erreur remontée à la tache UNIX */
#define FIN_TRANSACTION "1\n" /* fin de la transaction avec le dps7 */
#define SUITE_TRANSACTION "0\n" /* suite de la transaction avec le dps7 */
#define AUTRE_ECRAN '0' /* transaction avec le dps7 non terminée */
#define TIMEOUT_MSGSND 2 /* attente de file bloquée */
#define TIMEOUT_MSGRCV 5 /* attente de file bloquée */
#define TIMEOUT_READ 5 /* attente d'une réponse du dps7 */
#define DELAI5 5 /* de 5 secondes */
#define DELAI10 10 /* de 10 secondes */
#define LG_BUFFER_EMI 2000 /* longueur du buffer d'émission */
#define LG_BUFFER_REC 2000 /* longueur du buffer de réception */
#define HEURE_SEM 17 /* heure d'arrêt en semaine */
#define MIN_SEM 25 /* minute d'arrêt en semaine */
#define HEURE_VEN 11 /* heure d'arrêt vendredi */
#define MIN_VEN 50 /* minute d'arrêt vendredi */
struct tdc st_tdc;
struct cnftgt st_cnftgt;
int i_msqin;
int i_msqout;
void alarme();
char ch_buffer[132];
int i_buffer;
extern int errno;
struct msqid_ds st_msqds,*BUF_IPC_STAT;
struct t_st_msg {
long mtype;
char mtext[128];
}st_msgin,st_msgout;
char buf_emi[LG_BUFFER_EMI];
char buf_rec[LG_BUFFER_REC];
int i_bufrec = 0;
int lg_bufrec = 0;
int jour, heure, min;
struct tm *recup_heure;
main(argc,argv)
int argc;
char **argv;
{
char ch[LG_BUFFER_REC];
int traite=0;
BUF_IPC_STAT = &st_msqds;
setpgrp();
/*
vérification de la non existence d'une tache servdps7
*/
/*
if ( system("ps -ef | grep servdps7 | wc -l | grep ' 3' >/dev/null") != 0 )
{
printf("Le serveur DPS7 est déjà lancé\n");
exit(-1);
}
*/
/*
création des files d'attente de communication entre les tâches UNIX et
servdps7
*/
if ( creer_file() == -1 )
{
printf("servdps7 : arrêt de servdps7\n");
exit(-1);
}
/*
strcpy(ch_correspondant,argv[1]);
strcpy(ch_utilisateur,argv[2]);
strcpy(ch_projet,argv[3]);
strcpy(ch_motpasse,argv[4]);
*/
/*
contrôle connexion au tds
positionnement d'une fonction de déroutage pour autoriser les time out
*/
signal(SIGALRM,alarme);
if (connexion()==0)
{
connectdatanet("PROG1","COMBULL"," ","COMBULL1");
if (testconnect()==1)
{
do
{
#ifdef TEST
printf("\nboucle main: début traite_question\n");
#endif
traite = traiter_question();
#ifdef TEST
printf("boucle main: fin traite_question = %d\n",traite);
#endif
} while(traite != -1);
}
}
supprimer_file();
deconnexion();
}
int test_heure_arret()
{
time_t heure;
time(&heure);
recup_heure = localtime(&heure);
jour = recup_heure->tm_wday;
heure = recup_heure->tm_hour;
min = recup_heure->tm_min;
if ((jour == 5 && heure == HEURE_VEN && min >= MIN_VEN) ||
(jour != 5 && heure == HEURE_SEM && min >= MIN_SEM))
{
#ifdef TEST
printf("\n*** IL EST %d H %d MN : ARRET DU SERVEUR ***\n",heure,min);
#endif
return(1);
}
else {
#ifdef TEST
printf("\n*** IL EST %d H %d MN : ***\n",heure,min);
#endif
return(0);
}
}
int deconnexion()
{
if (envoi("$*$dis") != 0)
{
#ifdef TEST
printf("déconnexion :pb envoi $*$dis\n");
#endif
}
if (lit_jusqua("$$ 0900")!=0)
{
#ifdef TEST
printf("déconnexion :pb lit_jusqua $$0900\n");
#endif
}
tclose(&st_tdc);
if (st_tdc.cr_exec != 0 )
{
#ifdef TEST
printf("déconnexion :pb tclose\n");
printf("déconnexion :cr_exec = %d\n",st_tdc.cr_exec);
#endif
sleep(2);
return(-1);
}
return(0);
}
int connexion()
{
FILE *fp;
char ch_libelle[32];
int i;
fp = fopen(COM_BULL,"r");
if ( fp == NULL )
{
#ifdef TEST
printf("servdps7 : ouverture du fichier %s impossible\n",COM_BULL);
#endif
return(-1);
}
fscanf(fp,"%s %s\n",ch_libelle,st_tdc.typ_tam);
fscanf(fp,"%s %d\n",ch_libelle,&st_tdc.delai);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.as_ae);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.adremet1);
fscanf(fp,"%s %x\n",ch_libelle,&st_cnftgt.adremet2);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.typemet1);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.typemet2);
fscanf(fp,"%s %x\n",ch_libelle,&st_cnftgt.symbole);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.lngpage);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.lngligne);
fscanf(fp,"%s %x\n",ch_libelle,&st_cnftgt.modclas);
fscanf(fp,"%s %x\n",ch_libelle,&st_cnftgt.typappar);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.lgadresse);
fscanf(fp,"%s %s\n",ch_libelle,st_cnftgt.adrtpac);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.lgfacilitie);
fscanf(fp,"%s %s\n",ch_libelle,st_cnftgt.facil);
fscanf(fp,"%s %x\n",ch_libelle,&st_cnftgt.numcv);
fscanf(fp,"%s %d\n",ch_libelle,&st_cnftgt.indicseg);
fclose(fp);
#ifdef TEST
printf("servdps7 : typ_tam = %s\n",st_tdc.typ_tam);
printf("servdps7 : delai = %d\n",st_tdc.delai);
printf("servdps7 : as_ae = %d\n",st_cnftgt.as_ae);
printf("servdps7 : adremet1 = %d\n",st_cnftgt.adremet1);
printf("servdps7 : adremet2 = 0x%x\n",st_cnftgt.adremet2);
printf("servdps7 : typemet1 = %d\n",st_cnftgt.typemet1);
printf("servdps7 : typemet2 = %d\n",st_cnftgt.typemet2);
printf("servdps7 : symbole = 0x%x\n",st_cnftgt.symbole);
printf("servdps7 : lngpage = %d\n",st_cnftgt.lngpage);
printf("servdps7 : lngligne = %d\n",st_cnftgt.lngligne);
printf("servdps7 : modclas = 0x%x\n",st_cnftgt.modclas);
printf("servdps7 : typappar = 0x%x\n",st_cnftgt.typappar);
printf("servdps7 : lgadresse = %d\n",st_cnftgt.lgadresse);
printf("servdps7 : adrtpac = %s\n",st_cnftgt.adrtpac);
printf("servdps7 : lgfacilitie = %d\n",st_cnftgt.lgfacilitie);
printf("servdps7 : facil = %s\n",st_cnftgt.facil);
printf("servdps7 : numcv = 0x%x\n",st_cnftgt.numcv);
printf("servdps7 : indicseg = %d\n",st_cnftgt.indicseg);
#endif
st_tdc.lg_emi = LG_BUFFER_EMI;
st_tdc.lg_rec = LG_BUFFER_REC;
st_tdc.delai = DELAI10;
topen(&st_tdc,&st_cnftgt);
st_tdc.delai = DELAI5;
if (st_tdc.cr_exec != 0 )
{
#ifdef TEST
printf("servdps7 : erreur à la connexion\n");
printf("servdps7 : cr_exec = %d\n",st_tdc.cr_exec);
#endif
return(-1);
}
else
{
return(0);
}
}
int connectdatanet(mailbox,util,proj,passe)
char *mailbox;
char *util;
char *proj;
char *passe;
{
char ch[LG_BUFFER_REC];
if (!lit_jusqua("$$ 4700"))
{ do
envoi(" ");
while(!lit_jusqua("$*$"));
envoi("CN");
lit(ch);}
envoi(mailbox);
lit(ch);
envoi(util);
lit(ch);
envoi(proj);
lit(ch);
envoi(passe);
}
int testconnect(void)
{
char ch[LG_BUFFER_REC];
lit(ch);
if (strstr(ch,"$$ 0100"))
{
#ifdef TEST
printf("testconnect : OK :$$ 0100 recu \n");
#endif
lit(ch);
if (strstr(ch,"ACCUEIL")==0)
{printf("On est d_j_ dans une transaction\n");
envoi("1");
lit(ch); }
else
{envoi("$*$brk");
lit(ch);
envoi("$*$brk");
lit_jusqua("BREAK"); }
return(1);
}
else
{ printf("Erreur controle d'accès : (%s)\n",ch);
if (strstr(ch,"CONNEXION REFUSEE")!=0)
{
#ifdef TEST
printf("CONNEXION REFUSEE -> analyse \n");
if (strstr(ch,"004")!=0)
printf("CONNEXION REFUSEE : TRANSACTIONNEL NON LANCE\n");
#endif
}
lit_jusqua("$$$");
return(0);
}
}
int envoi(ch_requete)
char *ch_requete;
{
st_tdc.lg_emi = strlen(ch_requete);
strcpy(buf_emi,ch_requete);
st_tdc.delai = DELAI10;
#ifdef TEST
printf("servdps7 : envoi : buf_emi = %s\n",buf_emi);
#endif
twrite(&st_tdc,buf_emi);
st_tdc.delai = DELAI5;
if ( st_tdc.cr_exec != 0 )
{
#ifdef TEST
printf("servdps7 : envoi : erreur à l'émission\n");
printf("servdps7 : envoi : cr_exec = %d\n",st_tdc.cr_exec);
#endif
return(-1);
}
return(0);
}
int lit(ch)
char *ch;
{
int rc;
int i;
int j;
st_tdc.lg_rec = LG_BUFFER_REC;
st_tdc.delai = DELAI5;
rc=tread(&st_tdc,buf_rec);
for(i=0,j=0;i<st_tdc.cb_rec && j<70;i++)
{
if (buf_rec[i] >= 32 && buf_rec[i] <= 127)
{
ch[j] = buf_rec[i];
j++;
}
}
ch[j]=0;
if (st_tdc.cr_exec == 50303)
{
strncpy(ch,"TIME OUT",9);
}
#ifdef TEST
printf("servdps7 : lit : cr_exec=%d\n",st_tdc.cr_exec);
printf("servdps7 : lit : buf_rec=%s\n",ch);
#endif
}
int lit_jusqua(ch)
char *ch;
{
char chlu[LG_BUFFER_REC];
#ifdef TEST
printf("lit_jusqua : début \n");
#endif
do
lit(chlu);
while (strstr(chlu,ch)==0 && ((st_tdc.cr_exec==0)||(st_tdc.cr_exec==5031
6)));
#ifdef TEST
printf("lit_jusqua : fin \n");
#endif
if (strstr(chlu,"TIME OUT") == 0)
return(1);
if ((st_tdc.cr_exec!=0)&&(st_tdc.cr_exec!=50316))
return(-1);
else
return(0);
}
int supprimer_file()
{
if ( msgctl(i_msqin,IPC_RMID,0) == -1 )
{
#ifdef TEST
printf("servdps7 : suppression de la file d'attente QUESTION impossible\
n");
printf("servdps7 : errno = %d\n",errno);
#endif
}
if ( msgctl(i_msqout,IPC_RMID,0) == -1 )
{
#ifdef TEST
printf("servdps7 : suppression de la file d'attente REPONSE impossible\n
");
printf("servdps7 : errno = %d\n",errno);
#endif
}
return(0);
}
int creer_file()
{
i_msqin = msgget(ftok("/usr/bin",'1'),0);
msgctl(i_msqin,IPC_RMID,0);
i_msqin = msgget(ftok("/usr/bin",'1'),IPC_CREAT | 0666 );
if ( i_msqin == -1 )
{
#ifdef TEST
printf("servdps7 : création de la file d'attente QUESTION impossible\n")
;
printf("servdps7 : errno = %d\n",errno);
#endif
return(-1);
}
i_msqout = msgget(ftok("/usr/bin",'2'),0);
msgctl(i_msqout,IPC_RMID,0);
i_msqout = msgget(ftok("/usr/bin",'2'),IPC_CREAT | 0666 );
if ( i_msqout == -1 )
{
#ifdef TEST
printf("servdps7 : création de la file d'attente REPONSE impossible\n");
printf("servdps7 : errno = %d\n",errno);
#endif
return(-1);
}
return(0);
}
int traiter_question()
{
int arret_tds,i_retour, b_heure, message_recu ;
char ch[LG_BUFFER_REC];
if (msgctl(i_msqin,IPC_STAT,BUF_IPC_STAT) == -1)
{
printf("traiter_question : PB IPC_STAT sur MSQUIN \n");
}
#ifdef TEST
printf("traiter_question : %d messages ds i_msqin\n",st_msqds.msg_qnum);
#endif
arret_tds = test_heure_arret();
if (arret_tds == 1 && st_msqds.msg_qnum == 0)
{
return(-1);
}
heure = 0;
while (st_msqds.msg_qnum == 0)
{
if (b_heure >= 300)
{
#ifdef TEST
printf("traiter_question : controle TDS début %d\n",b_heure);
#endif
arret_tds = test_heure_arret();
if (arret_tds == 1 && st_msqds.msg_qnum == 0)
{
return(-1);
}
envoi("SORTIE");
lit_jusqua("FIN NOR");
b_heure = 0;
#ifdef TEST
printf("traiter_question : controle TDS fin\n");
#endif
}
else
{
sleep(1);
msgctl(i_msqin,IPC_STAT,BUF_IPC_STAT);
b_heure++;
}
}
if ( msgrcv(i_msqin,&st_msgin,128,0,MSG_NOERROR) == -1 )
{
#ifdef TEST
printf("traiter_question : fin attente message : msgrcv\n");
#endif
#ifdef TEST
printf("servdps7 : erreur à la réception d'une question\n");
printf("servdps7 : errno = %d\n",errno);
sleep(2);
#endif
return(-1);
}
/*
arrivée du message de service qui déclenche l'arrêt de servdps7
*/
if ( st_msgin.mtype == 1 )
{
return(-1);
}
st_msgout.mtype = st_msgin.mtype;
#ifdef TEST
printf("traiter_question : deb envoi_requete \n");
#endif
i_retour = envoi_requete(st_msgin.mtext);
if ( i_retour == -1 )
{
strcpy(st_msgout.mtext,ERREUR_SYSTEME);
#ifdef TEST
printf("traiter_question :envoi_requete : cr = -1\n");
debug();
#endif
return (-1);
}
else
{
#ifdef TEST
printf("traiter_question : deb reception_reponse\n");
#endif
i_retour = reception_reponse(st_msgout.mtext);
}
#ifdef TEST
printf("traiter_question :envoi_reponse %s\n",st_msgout.mtext);
#endif
envoi_reponse();
return(i_retour);
}
int debug()
{
int choix;
char ch[LG_BUFFER_REC];
do
{
printf("\nSaisir- 1 pour sortir\n");
printf(" - 2 pour envoyer(ch) recevoir \n");
printf(" - 3 pour lit_jusqua(ch) \n");
printf(" - 4 pour envoyer(ch) \n");
printf(" - 5 pour lire(ch) \n");
printf(" - 6 pour close() \n");
printf(" - 7 pour open() \n");
scanf("%d",&choix);
switch (choix)
{
case 1:
break;
case 2:
printf(" chaîne envoyer_recevoir :?\n");
scanf("%s",&ch);
envoi(ch);
lit(ch);
break;
case 3:
printf(" chaîne lit_jusqua :?\n");
scanf("%s",&ch);
lit_jusqua(ch);
break;
case 4:
printf(" chaîne envoyer:?\n");
scanf("%s",&ch);
envoi(ch);
break;
case 5:
lit(ch);
break;
case 6:
st_tdc.delai = DELAI10;
tclose(&st_tdc);
printf("close : cr_exec= %d\n",st_tdc.cr_exec);
st_tdc.delai = DELAI5;
break;
case 7:
topen(&st_tdc,&st_cnftgt);
printf("open : cr_exec= %d\n",st_tdc.cr_exec);
break;
default:
choix = 1;
break;
}
} while(choix != 1);
}
int envoi_reponse()
{
int i_tempo;
/*
test du message bloqué dans la file d'attente REPONSE.
le dernier message déposé n'a pas été lu par la tâche UNIX concernée.
on lui donne encore TIMEOUT_MSGRCV secondes pour le lire.
on vide la file si le message est toujours bloqué
*/
for (i_tempo=0;i_tempo<TIMEOUT_MSGRCV;i_tempo++)
{
msgctl(i_msqout,IPC_STAT,&st_msqds);
if ( st_msqds.msg_qnum == 0 )
break;
}
while ( msgrcv(i_msqout,&st_msgin,128,0,MSG_NOERROR|IPC_NOWAIT)==0);
/*
envoi de la réponse à la tache UNIX demandeuse.
*/
alarm(TIMEOUT_MSGSND);
if ( msgsnd(i_msqout,&st_msgout,128,0) == -1 )
{
alarm(0);
#ifdef TEST
printf("servdps7 envoi_reponse : erreur à l'émission de la réponse\n");
printf("servdps7 envoi_reponse : errno = %d\n",errno);
#endif
return(-1);
}
alarm(0);
return(0);
}
int reception_reponse(ch_reponse)
{
/*
lecture des données venant du dps7 jusqu'à $$$.
*/
memset(ch_buffer,'\0',129);
i_buffer = 0;
#ifdef TEST
printf("reception_reponse : début\n");
#endif
for (;;)
{
if ( iread(&ch_buffer[i_buffer]) != 0 )
{
strcpy(ch_reponse,ERREUR_SYSTEME);
return(-1);
}
if ( ch_buffer[i_buffer] != '\n' )
i_buffer++;
else
ch_buffer[i_buffer] = '\0';
if ( i_buffer >= 5 )
{
if ( ch_buffer[i_buffer-1] == '$' &&
ch_buffer[i_buffer-2] == '$' &&
ch_buffer[i_buffer-3] == '$' )
{
memset(ch_reponse,'\0',128);
memcpy(ch_reponse,&ch_buffer[1],i_buffer-4);
/*
gestion des réponse sur plusieurs messages
*/
if ( ch_buffer[1] == AUTRE_ECRAN )
{
#ifdef TEST
printf("reception_reponse+suite %s\n",SUITE_TRANSACTION);
#endif
return(1);
}
else
{
#ifdef TEST
printf("reception_reponse fin %s\n",FIN_TRANSACTION);
printf("reception_reponse : envoi 1\n");
#endif
envoi("1");
#ifdef TEST
printf("reception_envoi : lit -FIN NOR- \n");
#endif
lit_jusqua("FIN NOR");
return(0);
}
}
if ( i_buffer >= 128 )
i_buffer--;
}
}
#ifdef TEST
printf("reception_reponse : fin\n");
#endif
}
int envoi_requete(ch_requete)
char *ch_requete;
{
char ch_s[135];
strcpy(ch_s,ENTETE_MESSAGE_DPS7);
strcat(ch_s,ch_requete);
st_tdc.lg_emi = strlen(ch_s);
strcpy(buf_emi,ch_s);
twrite(&st_tdc,buf_emi);
#ifdef TEST
printf("envoi_requete -> DPS7 :%s\n",ch_s);
#endif
if ( st_tdc.cr_exec != 0)
{
#ifdef TEST
printf("envoi_requete: erreur a l'émission\n");
printf("envoi_requete: cr_exec = %d\n",st_tdc.cr_exec);
#endif
return(-1);
}
return(0);
}
void alarme()
{
signal(SIGALRM,alarme);
}
iread(buf)
char *buf;
{
if ( lg_bufrec <= 0 )
{
st_tdc.lg_rec = 2000;
tread(&st_tdc,buf_rec);
if ( st_tdc.cr_exec != 0 )
{
#ifdef TEST
printf("servdps7 : iread : erreur à la réception\n");
#endif
return(st_tdc.cr_exec);
}
lg_bufrec = st_tdc.cb_rec;
i_bufrec = 0;
buf_rec[lg_bufrec] = '\0';
#ifdef TEST
printf("servdps7 : iread : cr_exec = %d\n",st_tdc.cr_exec);
printf("servdps7 : iread : %s\n",buf_rec);
#endif
}
*buf = buf_rec[i_bufrec];
i_bufrec++;
if ( i_bufrec >= lg_bufrec )
{
lg_bufrec = 0;
i_bufrec = 0;
}
return(0);
}Ah ah ah ah ah...
![]()
Alain AKA Arma
Hors ligne
Le DPS7 était une très bonne machine !
Tu as enfin commencé à faire le ménage chez toi ?
![]()
Hors ligne
Oui, et j'en profite pour rendre hommage au Maître de GCOS (le SE des DPS7/7xxx), mon ami Puydebois.
On s'est parfois paye de sacrés pots de rires en faisant, tous les deux, des modifs de Mulet sur ce système bien balaise !
Ah ah ah, c'était l'époque héroïque des Gros Systèmes (mainframes) et de nos élucubrations Client-Serveur via TCP/IP...
C'était le bon temps... Je me rappelle encore quand j'allais tarl**zer chez Bull à Marne-la-Vallée ou à Champs-sur-Marne...
Oh, pitting, si vous saviez...
Si seulement vous pouviez imaginer...
![]()
Alain AKA Arma
Hors ligne
Pitting, je me rappelle... Une fois, avec le Pr. Meinadier (spécialiste en Architecture des Systèmes d'Information)...
Un désaccord majuscule sur le Client-Serveur, en buvant, sans modération, quelques bières dans la zone piétonne devant l'entree principale (Porte Lescot, rue St-Denis) du Forum des Halles (à Paris)... Ils ne savaient plus ou se foutre les autres clients, tellement la discussion était vive... Ah ah ah ah ah...
Et on se retrouvait le lendemain à Sophia-Antipolis...
Quel bordel !
![]()
Alain AKA Arma
PS : Allez, j'ai mis le lien ailleurs... Je peux donc le mettre ICI :
==> ftp://ftp2.cigiema.fr/cigiema/documents … eseaux.doc
Ah ah ah...
![]()
[Vous devez être identifié pour voir le texte caché.]
Dernière modification par Crazy (20/04/2007 18:10:18)
Hors ligne
Tu es nostalgique Alain ? ![]()
Hors ligne
Oui, parfois...
![]()
Alain AKA Arma
Hors ligne
En fait, depuis un an que je te connais --> Tu as (eu) une vie hyperactive ! --> Et c'est pas fini ![]()
Hors ligne
Si Alain commence à nous ressortir des trucs du style :
***** 1) W 45: VERB IN AREA A *W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W
69 DISPLAY CARTE1.
$
***** 1) E 538: SYNTAX ERROR, EXPECTED WORD: "."(SCAN SUPPRESSED) *E*E*E*E ***** 1) I 3: SCAN RESUME *I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I ***** 1) W 45: VERB IN AREA A *W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W
70
7:1. * TOTAL PAR CLIENT.
72 >002A BOU. READ FICAR INTO CARTE2 AT END
73 MOVE HIGH-VALUE TO NUM2.
74 >003A DISPLAY CARTE2
75 IF NUM1 = NUM2 ADD SOM2 TO SOM1 GO TO BOU. 76 * ECRITURE
77 >004E ECRI. MOVE NUM1 TO NUMI MOVE NOM1 TO NOMI
78 MOVE ADRESS1 TO ADRESSI MOVE SOM1 TO SOMI
$ $
***** 1> E 163: IDENTIFIER UNDEFINED (SCAN SUPPRESSED) *E*E*E*E*E*E*E*E*E*E
***** 2> I 3: SCAN RESUME *I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I
79 IF CO = 20 ADD 1 TO PA MOVE 0 TO CO
80 WRITE ZIMP FROM ENTETE AFTER PAGE
Je crains que le rappel des vieux souvenirs s'apparente au Délire Maniaco-dépressif avancé.
Avec risque de complication médico-légales à court terme !
C'est pas gai ! On va bientôt être de corvée au cimetière.
Peut-être même avant le résultat du Global Warming 2007...
C'est dommage, il était presque bien placé !
![]()
Hors ligne
Euh, tu veux un extrait de programme sur cartes perforées ?
(en EBCDIC)
![]()
Alain AKA Arma
Hors ligne
Non, il te restes encore un peu de temps : je n'ai pas encore vu passer d'extraits en LISP.
Tu n'avais pas fait une thèse la-dessus ?
Il me semble en avoir un exemplaire dans mes archives...
Hors ligne
Je dois aussi avoir dans ces archives les disques du Qbasic que tu affectionnais aussi...
Hors ligne
Oui, j'avais écrit (avec un pote) un Système Expert de niveau 1/A (SYSTEX - pas très original comme nom)...
Et un analyseur de langage naturel (EMOT - pas très original non plus).
Mais j'ai fini par jeter les docs et même les sources...![]()
Alain AKA Arma
Juste pour info :
Système Expert généraliste à chaînage bidirectionnel, logique des prédicats, logique des propositions, méta-connaissance et évaluation probabiliste des faits et des conséquents (SYSTEX 1A).
Analyseur syntaxico-sémantique (en Anglais) interface du SE (EMOT).
PS : Si tu as conservé tout cela quelque part, je veux bien que tu m'envoies un ZIP par eMail...
Quoique cela puisse aussi se retrouver dans les archives de l'ADELI dont j'ai fait partie quelques années...
--------------------------------------------------------------------------------
Il n'y a aucune page du site répondant à votre recherche sur "systex".
--------------------------------------------------------------------------------
Il n'y a aucune publication répondant à votre recherche sur "systex".
--------------------------------------------------------------------------------
Il y a un total de 0 document(s) et 0 mot-clef(s) répondant à votre recherche sur "systex"
Il a donc fini par être supprimé ! ![]()
PPS : J'ai aussi perdu le source (en APL) de la messagerie MINITEL que j'avais écrit dans les annees '80...
PPPS : Sans compter toutes les T@rlouzeries en FORTRAN, COBOL et PL/1... Ah ah ah ah ah...
Hors ligne
Hello juste pour intervenir dans votre dialogue de vieux loups
HorsLeMonde tu es vache là avec la corvée de cimetière ![]()
Hors ligne
rgo74 a écrit :
HorsLeMonde tu es vache là avec la corvée de cimetière
En principe, il devrait y établir sa dernière demeure avant moi...
![]()
Alain AKA Arma
PS : Surtout que je préfère être incinéré...
Hors ligne
Le Secrétaire de l'ADELI vient de me contacter par eMail...
Il a retrouvé le document sur le Système Expert !
Il va me le renvoyer...
C'est génial !![]()
Alain AKA Arma
PS : Si je le récupère sur fichier, je le mettrai dans le Forum approprié, pour ceux que cela intéresse.
Hors ligne
Vache ? Tu crois ? Mais pourquoi ai-je donc cet avatar ?...
Hors ligne
|
© 2006-2012 / A. G.☺ CiGi€M@®, 1997-2012 |
|
Reproduction totale ou partielle strictement interdite Contact : / |