PAGE EOT #SIP DEFINITION CMS5# IF ORDI-"T",XWOR5,,XWOR5 IDP "TASK - VERSION T1600 SOUS CMS4" XWOR5: VAL 0 IF ORDI-"S",XWOR5,,XWOR5 IDP "TASK - VERSION SOLAR SOUS CMS5" XWOR5: VAL 0 IF ORDI-"S",XWOR5,,XWOR5 SVCM1: VAL '01 < CODE DU 'SVC' MAITRE PERMETTANT LE < RELEASE D'UN SEMAPHORE. XWOR5: VAL 0 < < < L O C A L : < < TABLE ZERO: EQU $ DZS 'C < < INTERFACE DE '!CALL' : < NTASK: ASCI "TASK" < NOM DU MODULE GENERE. BYTE '04;'D0 WORD SIZE < NOMBRE D'OCTETS NECESSAIRES. ADEBUT: WORD DEBUT WORD TASK < ENTRY POINT DU MODULE. PROG DEBUT: EQU $ LRP L BR -1,L < ENTRY DANS LE MODULE. XDEBUT: VAL $-ADEBUT DZS DEBUT-ZERO-XDEBUT JMP DEBUT < TOUT CECI POUR LA RAISON SUI- < VANTE : LORSQU'ON ARRIVE DE < !CALL, ON A : PRESC='10, ET SI < ON EFFECTUE UN ALT-MODE, ON < TOMBE SUR LE MOT ADEBUT, ASSIMILE < A UN 'JMP', QUI NOUS FERA < RETOMBER GRACE AU DZS QUI < PRECEDE SUR LE DEBUT DU PROGRAMM. < < LOCAL PROPREMENT DIT : < LOCAL LOC: EQU $ < < MESSAGES DIVERS : < MERR: BYTE 3;'6D ASCI "??" MRCLF: BYTE 2;'6D;" ";0 < < MOT DE PASSE : < NLS MPASS: BYTE '03;'1D MPASS1: BYTE '00;":" ASCI "SYS1470975114380:JFC" MPASS2: BYTE '00;'10;'04;0 MAGIC: WORD 7 < CONSTANTE MAGIQUE... LST MALT: BYTE '7D;'84 < POUR L'ENVOI D'UN ALT-MODE. < < CONSTANTES DE L'UTILISATEUR ET DE LA VISU ASSIGNEE A '0B : < NSPVIS: WORD 0 < NSP DE LA VISU ASSIGNE A '0B. ADCTVI: WORD 0 < @DCT DE LA VISU ASSIGNEE A '0B. NOCT: WORD 0 < NBRE D'OCTETS ARGUMENT D'UNE < DEMANDE DE LECTURE. ESC1: WORD 0 < NSPESC DE CET UTILISATEUR. NSPIN: WORD 0 < NSPIN DE CET UTILISATEUR. < < MESSAGE COURANT : < ABUF: WORD 0 < RELAI RELATIF MESSAGE COURANT. ABUFA: WORD 0 < RELAI ABSOLU MESSAGE COURANT. XBUF: WORD 0 < INDEX COURANT MESSAGE COURANT. BUF: DZS 80 BYTE '04;0 < PAR PRUDENCE : CAS DES MESSAGES < SANS 'EOT'. < < RELAIS DIVERS : < ASEND: WORD SEND < ROUTINE MAITRE 'WRITE 1 CAR.'. APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE. ATASK: WORD TASK < < CONSTANTES : < ATIME: WORD 0 < @DE LA DATE/HEURE DU SYSTEME. C10: WORD 10 C16: WORD 16 STACK: DZS 10 < PILE DE TRAVAIL. < < DEMANDES A CMS4 : < DEMIN: WORD '0101 < LECTURE ASCI AVEC ECHO. WORD BUF-ZERO*2 WORD 80 DEMOUT: WORD '0202 < DEMANDE D'EDITION DE MESSAGES. WORD 0 < @OCTET DU MESSAGE. WORD 0 < NBRE DE CARACTERES DU MESSAGES. CCI: WORD '0001 < ACCES AU CCI. CCINT: WORD '0002 < APPEL CCI NON INTERACTIF. WORD BUF-ZERO*2 < SUR LE MESSAGE COURANT. WORD 80 SLEEP: WORD '0005;0;0 < DEMANDE DE TEMPORISATION. SCH: WORD '0006 < DEMANDE DE RETOUR AU SCHEDULER. PROG < < < E M I S S I O N M E S S A G E : < < < ARGUMENT : < A=@MOT DU MESSAGE. < < PRINT: EQU $ LR A,C < C=@MESSAGE. ADR A,A ADRI 1,A < A=@OCTET DU MESSAGE. STA DEMOUT+1 LBY 0,C < A=LONGUEUR DU MESSAGE. STA DEMOUT+2 LAD DEMOUT SVC 0 < EDITION DU MESSAGE. RSR < < < S I M U L A T I O N E N T R E E M E S S A G E : < < WORD LOC+'80 TASK: EQU $ < ENTRY POINT DU MODULE. DEB: EQU $ LRP L LA -1,L LR A,L LAI DEBUT-ZERO WORD '1EB5 < PRESC(ESCLAVE)<--'DEBUT'. LAD STACK-1 LR A,K LAD CCI SVC 0 < RETOUR AU CCI. < (EVENTUELLEMENT SUR UNE AUTRE < VISU, AU CAS OU UN !ASSIGN B < AURAIT FAIT...) < < ACCES A LA DCT DE CET UTILISATEUR : < WORD '1E45 < RENVOIE : A=IDESC. ADRI NSPESC,A SBT 0 < AFIN D'ACCEDER A DCTSY INDEXEE < PAR LE NSP DE CET UTILISATEUR. WORD '1E15 < RENVOIE : B=@DCTESC. LR B,A STA ESC1 < SAVE @DCTESC. ADRI YASSGN,A < POUR ACCES AU NVP='01. WORD '1E15 < RENVOIE : B='00,NSPIN. STB NSPIN < SAVE LE NSPIN DE CET UTILISATEUR. < < ACCES AU NSP DE LA VISU ASSIGNEE : < ADRI NVP/2,A < @DE L'ENTREE DE TASSGN DE CETTE < UTILISATEUR CONTENANT LE NVP < DE LA VISU ASSIGNEE A '0B. WORD '1E15 < RENVOIE : B=CE MOT. LR B,A ANDI 'FF < A=NVP DE LA VISU ASSIGNEE A '0B. JAE DEB < ERREUR : NVP='0! NON ASSIGNE !!! STA NSPVIS CP NSPIN < SERAIT-CE UN AUTO-ASSIGN ??? JE DEB < OUI, REFUSE... SBT 0 WORD '1E15 < RENVOIE : B=@DCT DE CETTE VISU. STB ADCTVI < ET SAVE @DCT VISU. < < PREPARATION A L'ACCES A LA DATE/HEURE : < LAI NSPDAT SBT 0 WORD '1E15 < RENVOIE : B=@LISTE DES COMPOSAN- < TES DE LA DATE/HEURE. STB ATIME < ET SAVE CETTE @. < < < E N V O I D E S M E S S A G E S : < < LOOP2: EQU $ LAD BUF SBT 0 STA ABUF < ABUF RELAYE BUF A PRIORI. STZ XBUF IC XBUF < XBUF=1 A PRIORI. < < ENTREE DU MESSAGE COURANT : < LOOP3: EQU $ LAD MRCLF BSR APRINT < POSITIONNEMENT EN DEBUT DE LIGNE. LAD DEMIN SVC 0 < LECTURE AVEC ECHO SUR IN. < < PRE-ANALYSE DU MESSAGE : < < DEFINITION DU PREMIER CARACTERE : < ! CARTE CONTROLE DESTINEE AU CCI < DE LA VISU LOCALE, < = MESSAGE CONTENANT UN 'EOT' EN FIN, < '1' A '9' MESSAGE SANS 'EOT' DE LONGUEUR < DE 1 A 9 CARACTERES, < * DEMANDE DU MOT DE PASSE DYNAMIQUE, < X ENVOI D'UN ALT-MODE, < / FIN DE LA LISTE DES MESSAGES. < LBY &ABUF < X=0 (SVC) : ACCES AU 1ER CARACTERE CPI "/" < EST-CE LA FIN DE LISTE ??? JE LOOPF < OUI, FIN DE LISTE. CPI "=" < EST-CE UN MESSAGE AVEC 'EOT' ??? JE EOT < OK. CPI "*" < EST-CE LA DEMANDE DU MOT DE PASSE. JE PPASS < OUI, DEMANDE DU MOT DE PASSE. CPI "!" < EST-CE L'APPEL CCI LOCAL ??? JE CARTC < OUI. CPI "X" < EST-CE L'ENVOI D'UN ALT-MODE ??? JNE COMPT < NON. < < ENVOI D'UN ALT-MODE : < LAD MALT SBT 0 STA ABUF < ABUF RELAYE LE ALT-MODE. DC XBUF < XBUF=0. JMP EOT < ET C'EST TOUT... < < APPEL DU CCI LOCAL : < CARTC: EQU $ LAD CCINT SVC 0 < APPEL DU CCI NON INTERACTIF. JNE ERREUR JMP LOOP3 < OK, MESSAGE SUIVANT... NLS < < DEMANDE DU MOT DE PASSE DYNAMIQUE : < PPASS: EQU $ LAD MPASS SBT 0 STA ABUF < ABUF RELAYE LE MOT DE PASSE. DC XBUF < XBUF=0. < < GENERATION DYNAMIQUE DU MOT DE PASSE : < PASS: EQU $ LA ATIME ADRI 5,A < POUR ACCEDER AUX SECONDES. WORD '1E15 LR B,A ANDI 'FF < A=NBRE DE SECONDES. CPI 50 < A-T'ON LE TEMPS DE L'ENVOYER ??? JG PASS < NON, ON BOUCLE SUR CETTE < SEQUENCE... LA ATIME < A=@DE LA DATE/HEURE. ADRI 4,A < POUR ACCEDER AUX MINUTES. WORD '1E15 LR B,A ANDI 'FF < A=NBRE DE MINUTES. SLRD 16 < OK, A=0 ET B=NBRE DE MINUTES. DV C10 LR B,A < A=CHIFFRE DES UNITES. HZERO:: VAL "0" HA:: VAL "A" HNEUF:: VAL "9" M0001:: VAL '0001 ORI HZERO < ??!???!?! EORI HZERO?M0001 < IGNOBLE TRUANDAGE... MP MAGIC < PERMUTATION DES BITS... DV C16 LR B,A CP C10 < CHIFFRE OU LETTRE ??? JL PASS9 < CHIFFRE... ADRI HA-HNEUF-1,A < LETTRE... PASS9: EQU $ ADRI HZERO,A < ET CONVERSION ASCI... STBY MPASS1 < ET MISE DANS LE MOT DE PASSE... LAI NSPUPD SBT 0 WORD '1E15 LR B,A WORD '1E15 < (B)=NUMERO DU RELEASE COURANT. LAI 0 DV C10 LR B,A ORI '30 < (A)=CHIFFRE DES UNITES DU NUMERO DE STBY MPASS2 < RELEASE DE CMS5 MIS DANS LE MOT DE < PASSE... JMP EOT < OK, C'EST TOUT. LST < < TEST DES MESSAGES SANS 'EOT' : < COMPT: EQU $ CPI "1" JL ERREUR < ERREUR, NON RECONNU. CPI "9" JG ERREUR < ERREUR, NON RECONNU. ADRI -'30+1,A < OK, CONVERSION BINAIRE+1. LR A,X < X INDEXE LE 1ER CARACTERE QUI < SUIT LE DERNIER CARACTERE < SIGNIFICATIF. LAI '80+'04 < CODE DE L''EOT' AVEC LE BIT0 < POSITIONNE A 1 AFIN QU'IL NE < SOIT PAS EMIS PAR SEND. STBY &ABUF < MISE EN FIN DE MESSAGE. EOT: EQU $ < < ATTENTE EVENTUELLE : LA VISU DOIT ETRE EN ATTENTE DE LECTURE : < WAIT: EQU $ LAD SCH SVC 0 < RETOUR AU SCHEDULER POUR NE PAS < BLOQUER LE SYSTEME. LA ADCTVI < A=@DCT VISU. ADRI TETE,A < A=TETE DE LA FILE D'ATTENTE < SUR CETTE VISU. WORD '1E15 < RENVOIE : B=@DEMANDE DE TETE < SUR CETTE VISU. LR B,A JAE WAIT < PAS DE DEMANDE EN ATTENTE < SUR CETTE VISU, ON ATTEND... LR A,X < SAVE X=@DEMANDE DE SERVICE. ADRI OPDEM,A < A=@DE LA FONCTION DEMANDEE < DANS LA DEMANDE DE TETE. WORD '1E15 < RENVOIE : B=FONCTIOB DEMANDEE. LR B,A ANDI '07 < MASCAGE DU BIT 12. CPI 1 < S'AGIT-IL D'UNE LECTURE??? JG WAIT < NON, ON CONTINUE A ATTENDRE. < < LA VISU ATTEND UNE LECTURE, LET'S GO... < LR X,A < A=@DEMANDE DE SERVICE, ADRI CODEM,A < A=@DE SON CODEM. WORD '1E15 < RENVOIE : B=COMPTE D'OCTETS < DE LA DEMANDE COURANTE LECTURE. STB NOCT < ET SAVE IT... < < BOUCLE DE SIMULATION DE L'ENTREE D'UN MESSAGE SUR CETTE VISU : < LOOP: EQU $ WIT: EQU $ LA ADCTVI < A=@DCTVISU. ADRI SIT,A < A=@SIT DE LA VISU. WORD '1E15 < DEMANDE DANS B DU SIT-VISU. SWBR B,A < AFIN DE TESTER SON SIGNE. JAL ITAT < OK, IT ATTENDUE. WITNXT: EQU $ LAD SCH SVC 0 < NON, IL FAUT ATTENDRE QUE < LA TACHE SOIT EN ATTENTE IT. JMP WIT < VERS UN NOUVEAU TEST. ITAT: EQU $ RX:: VAL 2 < POUR ATTEINDRE LE REGISTRE X(VIS), ETANXT:: VAL 14 < NUMERO DU BIT SIGNIFIANT 'IN', JF:: VAL "JF" < CODE PERMETTANT DE VALIDER 'X'... LA ADCTVI < A=ADRESSE(DCT(VIS)), ADRI RX,A < A=ADRESSE(R(VIS)), WORD '1E15 < B=(X(VISU)), LRM A WORD JF)ETANXT < A=VALEUR DE 'X' LORSQUE LA VISU ATTEND < UNE INTERRUPTION 'IN'... CPR A,B < ALORS EST-CE 'IN' ??? JNE WITNXT < NON, ON REBOUCLE SUR 'SIT'... LA ASEND < A=@ROUTINE MAITRE. WORD '1EC5 < SIMULATION MAITRE DE LA < RECEPTION D'UN CARACTERE. CPZ NOCT < A-T'ON ENVOYE SUFFISAMENT < D'OCTETS AU HANDLER VISU ??? JE LOOP20 < OUI, ON ARRETE LA... LX XBUF IC XBUF < PROGRESSION INDEX DU BUFFER. LBY &ABUF < TEST DU DERNIER CARACTERE < SIMULE SUR CETTE VISU. ANDI '7F < ON NE CONSERVE QUE 7 BITS. CPI '04 < EST-CE UN EOT ??? JNE LOOP < NON, ON CONTINUE... < < FIN DE SIMULATION : < LOOP20: EQU $ JMP LOOP2 < < FIN DE LA LISTE DES MESSAGES : < LOOPF: EQU $ BR ATASK < ET ON RECOMMENCE... < < EMISSION D'UNE ERREUR : < ERREUR: EQU $ LAD MERR BSR APRINT < EDITION D'1N MESSAGE D'ERREUR. JMP LOOP2 < VERS L'INTRODUCTION D'UN MESSAGE. < < < S I M U L A T I O N M A I T R E 1 C A R A C T E R E : < < < FONCTION : < CETTE ROUTINE MAITRE EMET UN CARACTERE < DU MESSAGE COURANT A DESTINATION < DU HANDLER DE LA VISU ASSIGNEE < A '0B SI LE CODE ASCI DE CELUI-CI EST < IBFERIEUR A '80; EN PARTICULIER < LA FIN DE MESSAGE EST L'EOT ('04) : SI CELUI-CI < N'EST PAS A EMETTRE, ON LUI DONNE < LE CODE '80+'04... < < WORD LOC+'80 < VALEUR RELATIVE DE L. SEND: EQU $ LRP L LA -1,L < A=@RELATIVE LOCAL. AD 10,W < W=@DCTESC, ET 10,W=SLOESC. LR A,L < L=@ABSOLUE LOCAL. LA ABUF < ACCES A ABUF. AD 10,W < ABSOLUTISATION DE ABUF. STA ABUFA LA ADCTVI LR A,W < W=@DCTVISU. < < SIMULATION DE LA RECEPTION D'UN CARACTERE : < LX XBUF < X=INDEX COURANT DU BUFFER CARTE. LBY &ABUFA < A=CARACTERE COURANT. CPI '80 < CODE A EMETTRE ??? JGE SEND1 < NON... SBT 0 < AFIN D'AVOIR A<0. STA ETAT,W < QUE L'ON MET DANS L'ETAT DE < LA VISU ASSIGNEE A '0B. DC NOCT < ET UN OCTET DE MOINS... IF ORDI-"T",XWOR5,,XWOR5 RLSE SIT,W < ET ON SIMULE UNE PSEUDO-IT VIS. XWOR5: VAL 0 IF ORDI-"S",XWOR5,,XWOR5 LAD SIT,W < A=ADRESSE DU 'SIT' D'INTERRUPTION, ET SVC SVCM1 < SIMULATION D'UNE PSEUDO-INTERRUPTION < SUR LA VISU... XWOR5: VAL 0 SEND1: EQU $ RSR < ET C'EST TOUT... < < < G E N E R A T I O N D U M O D U L E : < < FTASK: EQU $ < 1ER MOT APRES LE MODULE. LGIT: VAL FTASK-ZERO*2 SIZE: EQU ZERO+LGIT < LONGUEUR OCTET DU MODULE EXPRI- < ME A L'AIDE D'UN SYBOLE TRANSLA- < TABLE POUR REFERENCE EN AVANT. LOCAL LOC2: EQU $ DEMCCI: WORD '0001 < APPEL DU CCI. LONGR: VAL FTASK-NTASK < NBRE DE MOTS DU MODULE. DEMSGN: WORD '0402 < DEMANADE DE STORE SGN. WORD NTASK-ZERO*2 WORD LONGR*2 WORD 6 PILE: DZS 10 PROG WORD LOC2+'80 GENERE: EQU $ LRP L LA -1,L LR A,L LAD PILE-1 LR A,K GEN1: EQU $ LAD DEMSGN SVC 0 < TENTATIVE DE STORE 'TASK'. JE GEN2 < OK, FIN. LAD DEMCCI < STORE IMPOSSIBLE, IL Y A ERREUR SVC 0 < D'ASSIGNATION : RETOUR TEMPORAIRE JMP GEN1 < AU CCI, PUIS ON RETENTE... GEN2: EQU $ LAD DEMCCI SVC 0 < OK, ON FAIT UN RETOUR DEFINITIF JMP GEN2 < AU CCI. END GENERE