PAGE EOT #SIP DEFINITION CMS5# NMPROC: VAL "XX" < ????!!! (A CAUSE DE #CTE ITEM#) IF ORDI-"T",XWOR%,,XWOR% IDP "MASK - VERSION T1600 SOUS CMS4" XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% IDP "MASK - VERSION SOLAR SOUS CMS5" XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% SVCM1: VAL '01 < CODE DU 'SVC' MAITRE PERMETTANT LE < RELEASE D'UN SEMAPHORE. XWOR%: VAL 0 EOT #SIP DEFINITION ITEM# < < < P I L E D E R E C U R S I V I T E : < < < FORMAT : < LA PILE 'PIR' EST FAITE D'ENTREE DOUBLE- < MOTS ASSURANT LA RECURSIVITE DU LANGAGE < DE DESCRIPTION DES SCENARI. < < IR: VAL 0 < MOT0 : CAUSE DE L'EMPILEMENT : < BIT1=1 : PUSH POUR REPETITIONS , < BIT2=1 : PUSH POUR APPEL PROG., < BIT3=1 : PUSH POUR SAUT PROG. CODREP: VAL '40 < PUSH POUR REPETITIONS. BITREP: VAL 1 < BIT DE REPETITIONS. CODPRO: VAL '20 < PUSH POUR APPEL PROGRAMME. BITPRO: VAL 2 < BIT APPEL PROGRAMME. < A T T E N T I O N : BITPRO < UTILISE AVEC BITDEF SIGINFIE < QU'ON APPELLE UN PROGRAMME < AVEC CHGT D'ITEM COURANT. CODDEF: VAL '10 < PUSH POUR DEFINITION PROGRAMME. BITDEF: VAL 3 < BIT DE SAUT DEFINITION PROG. CDCP: VAL 1 < MOT1 : COMPTE DES 'DO' , ET < LE COMPTE ALGEBRIQUE DES < PARENTHESES. CD: VAL 2*CDCP+0 < OCTET0(MOT1)=NBRE DE REPETITIONS < RESTANT A FAIRE (INDEX DE TYPE < OCTET) , CP: VAL 2*CDCP+1 < OCTET1(MOT1)=COMPTE ALGEBRIQUE < DES PARENTHESES RENCONTREES < SOUS CE NIVEAU : < '(' : +1 , < ')' : -1. LEPR: VAL 2 < NBRE DE MOTS OCCUPES PAR UNE < ENTREE DE LA PILE PIR. LPR: VAL 12 < NBRE D'ENTREES DE PIR. XPR: VAL LEPR*LPR-LEPR < < < D E S C R I P T E U R V I S U - E S C L A V E S : < < DSEC VISESC VISES: EQU $ MODE: WORD 0 < 0 : VISU ASSIGNEE (!ASSIGN), < 1 : ASSIGNATION SIMULEE (NVP=). NSPVIS: WORD 0 < NSP DE LA VISU ASSIGNNE A < CET NVP : !ASSIGN NVP=NSP. ADCTVI: WORD 0 < @DCT DE CETTE VISU. DUREE: WORD 0 < DUREE RESTANT A PARCOURIR < JUSQU'A LA FIN D'UNE COMMANDE 'W'. HORLOG: WORD 0 < TEMPS COURANT EN MULTIPLE DE < 2 SECONDES. NOCT: WORD 0 < CODEM DE LA LECTURE COURANTE. VIEG: WORD 0 < INDEX COURANT DE L'ITEM < ASSOCIE A CETTE VISU. NOMIT: DZS 4 < NOM DE L'ITEM ASSOCIE. CONST0: EQU $ < LISTE DES CONSTANTES SUR < LESQUELLES PEUVENT PORTER < DES OPERATIONS. NCONST: VAL 16 < NBRE DE CONSTANTES (0 A NCONST-1). NCONSG: VAL NCONST-12 < NBRE DE CONSTANTES GLOBALES < (0 A NCONSG-1) PARMI LES < NCONST CONSTANTES. DZS NCONST CCONST: WORD 0 < NUMERO DE LA CONSTANTE < COURANTE. APRC: WORD PIR,X < RELAI COURANT VERS PIR. BPR: WORD PIR < BASE DE PIR, TPR: WORD PIR+XPR < TOP DE PIR. PIR: EQU $ < PILE DE RECURSIVITE. WORD 0;0 < BLOCAGE 1ERE ENTREE. DZS XPR LVISES: VAL $-VISES < LONGUEUR DE LA PARTIE DU < DESCRIPTEUR A RAZER. NVPVIS: WORD 0 < NVP DE LA VISU. NOMVIS: BYTE 5;'6D ASCI "NVPN" LLVIS: VAL $-VISES < LONGUEUR TOTALE DU CONTEXTE. < < < L O C A L : < < TABLE ZERO: EQU $ DZS 'C < < INTERFACE DE '!CALL' : < NTASK: ASCI "MASK" 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. < < < I T E M C O U R A N T : < < NITEM: WORD 0;0;0 < PAS D'ITEM COURANT. BYTE '04;0 LNITEM: VAL $-NITEM DZS LTN-LNITEM ITEM: DZS LTNI-LTN < < LOCAL PROPREMENT DIT : < MMODE: BYTE 10;" " ASCI "(!ASSIGN) " MITEM: BYTE 5;" " ASCI "ITEM" MINEF: BYTE 11;'6D ASCI "NON EMISE!" MVIS: BYTE 4;"=" ASCI "VIS " CSYS: ASCI "!L :SY" BYTE "S";'04 LSYS: VAL $-CSYS*2 LOCAL LOC: EQU $ < < MESSAGES DIVERS : < MSYS: BYTE 7;'6D ASCI "ACN???" MARRET: BYTE 4;" " ASCI "FIN " MERR: BYTE 3;" " ASCI "??" MNUL: BYTE 4;0;0;0;0 < "NULL"... MERR1: BYTE 1;0 < MESSAGE VARIABLE... MRCLF: BYTE 2;'6D;" ";0 AMMODE: WORD MMODE AMITEM: WORD MITEM AMINEF: WORD MINEF AMVIS: WORD MVIS MEGAL: BYTE 1;"=" MENTER: BYTE 7;'6D ASCI "ENTER!" MINTER: BYTE 1;">" MASS: ASCI "!ASSIGN " BYTE 0;"=";"S";'04 LMASS: VAL $-MASS < LONGUEUR CARTE !ASSIGN. < < 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 : < 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 40 BYTE '04;0 < PAR PRUDENCE : CAS DES < MESSAGES SANS 'EOT'. < < RELAIS DIVERS : < AWORK: WORD 0 < REALI DE TRAVAIL. ASEND: WORD SEND < ROUTINE MAITRE 'WRITE 1 CAR.'. APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE. ATEOT: WORD TEOT < TEST FIN DE MESSAGE. AGTCAR: WORD GTCAR < ACCES CARACTERE POUR LES < CODAGES DE NOMS D'ITEM. AGETCO: WORD GETCO < DECODAGE BINAIRE 1-9, A-Z. ACOD: WORD CODAGE < CODAGE DES NOMS D'ITEM. ATASK: WORD TASK ASENDV: WORD SENDV < ESSAI D'ENVOI A UNE VISU. ATIME: WORD 0 < @DE LA DATE/HEURE DU SYSTEME. ANIT0: WORD NITEM+0 ANIT1: WORD NITEM+1 ANIT2: WORD NITEM+2 ANITEM: EQU ANIT0 < RELAI VERS LE NOM DE < L'ITEM COURANT. ACOMD: WORD COMD,X < TABLE D'ANALYSE DES COMMANDES. KOMPT: WORD 0 < COMPTEUR DES NVP INTERESSANTS. LIMIT: WORD 0 < CONTIENT EN TEMPORAIRE < LE CARACTERE COURANT DE FIN DE < MESSAGE EQUIVALENT A 'EOT' < POUR CHAQUE ITEM. C10: WORD 10 C16: WORD 16 CFFF: WORD '0FFF < RAZ DES BITS 0 A 3. F3: WORD 0 < FONCTION DE CODAGE NOMIT. ALLVIS: WORD LLVIS < LONGUEUR TOTALE DU CONTEXTE. KCAR: WORD 0 < COMPTEUR DES CARACTERES MESSAGES. COMC: WORD 0 < SAVE LA COMMANDE COURANTE. IENTER: WORD 0 < 0 : PAS DE 'I' EN COURS. AMAJIE: WORD MAJIEG AERR: WORD ERREUR AERR1: WORD ERR1 AFSEND: WORD FSENDV AANALY: WORD ANALYS < ANALYSE DU MESSAGE COURANT. AFINIT: WORD FINITE AEXTAS: WORD EXTAS < ROUTINE DE PARCOURS DE TASSGN. BEXTAS: WORD MEXTAS < PARCOURS MAITRE DE TASSGN. AASIGN: WORD ASSIGN < SIMULATION DES ASSIGNATIONS. < < DESCRIPTEURS VISUS-ESCLAVES : < ADESC: WORD DESC,X < LISTE DES DESCRIPTEURS. MDESC: WORD 0 < ADESC ABSOLUTISE. DESC: EQU $ WORD 0 < NVP=0, WORD 0 < NVP=1, WORD 0 < NVP=2, WORD NSP3,X < NVP=3, WORD NSP4,X < NVP=4, WORD NSP5,X < NVP=5, WORD NSP6,X < NVP=6, WORD NSP7,X < NVP=7, WORD NSP8,X < NVP=8, WORD NSP9,X < NVP=9. WORD 0 < NVP=A, WORD 0 < NVP=B. CDESC: WORD 0 < @RELATIVE DESCRIPTEUR COURANT. < < NOTA : LORSQUE LE BIT0 D'UN RELAI EST A 1, < CELA SIGNIFIE QUE LE NVP CORRESPONDANT < N'EST PAS ASSIGNE ; SI LE RELAI EST A 0, < LE NVP NE PEUT ETRE ASSIGNE. < < < DEMANDES A CMS4 : < DEM1C: WORD '0101 < ENTREE 1 CARACTERE. WORD BUF-ZERO*2 WORD 1 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 DSYS: WORD '0002 < ENVOI DE "!L :SYS"... WORD CSYS-ZERO*2 WORD LSYS SLEEP: WORD '0005;0;0 < DEMANDE DE TEMPORISATION. SCH: WORD '0006 < DEMANDE DE RETOUR AU SCHEDULER. < < ACCES A L'ITEM COURANT : < IEG: WORD 0 < INDEX COURANT DE L'ITEM. AITEM: WORD ITEM,X < RELAI D'ACCES A L'ITEM. ANOMC: WORD 0 < RELAI TEMPORAIRE VERS LE < NOMIT EN COURS DE CODAGE. NCP: WORD NBCAR*NBLIG < NBRE D'OCTETS D'UN ITEM. DEMSGN: WORD '8502 < ACCES A UN ITEM. WORD NITEM-ZERO*2 WORD 2*LTNI WORD -1 < < L I S T E D E S E V E N E M E N T S : < LEVENT: WORD '0000;'0000 < 1 BIT PAR EVENEMENT (0-31). < < P I L E D E T R A V A I L : < STACK: DZS 16 < < C O N T E X T E S V I S U S : < NSP3: DZS LVISES WORD 3 BYTE 5;'6D ASCI "NVP3" NSP4: DZS LVISES WORD 4 BYTE 5;'6D ASCI "NVP4" NSP5: DZS LVISES WORD 5 BYTE 5;'6D ASCI "NVP5" NSP6: DZS LVISES WORD 6 BYTE 5;'6D ASCI "NVP6" NSP7: DZS LVISES WORD 7 BYTE 5;'6D ASCI "NVP7" NSP8: DZS LVISES WORD 8 BYTE 5;'6D ASCI "NVP8" NSP9: DZS LVISES WORD 9 BYTE 5;'6D ASCI "NVP9" < < L I S T E D E S C O M M A N D E S : < COMD: EQU $-" " WORD COMEN1 < 'SPACE' WORD CARTC < ! WORD ERR1 < " WORD FDODO < # WORD ERR1 < $ WORD RECUR < % WORD ERR1 < & WORD ERR1 < ' WORD BREC < ( WORD ENDR < ) WORD PPASS < * WORD CHGIT < + WORD ERR1 < , WORD SUPIT < - WORD ERR1 <. WORD E10 < / WORD ERR1 < 0 WORD COMPT < 1 WORD COMPT < 2 WORD COMPT < 3 WORD COMPT < 4 WORD COMPT < 5 WORD COMPT < 6 WORD COMPT < 7 WORD COMPT < 8 WORD COMPT < 9 WORD ERR1 < : WORD ERR1 < ; WORD COMEN1 < < WORD EOT < = WORD COMEN2 < > WORD ERR1 < ? WORD GCONST < @ WORD ASSGN < A WORD ERR1 < B WORD GOCCI < C WORD ERR1 < D WORD ERR1 < E WORD FINRAZ < F WORD ERR1 < G WORD TEMPO < H WORD ENTERM < I WORD ERR1 < J WORD ERR1 < K WORD ERR1 < L WORD ERR1 < M WORD ERR1 < N WORD ERR1 < O WORD ERR1 < P WORD ERR1 < Q WORD EVENT < R WORD EVENT < S WORD EVENT < T WORD ERR1 < U WORD ERR1 < V WORD WTEMPO < W WORD SALTM < X WORD ERR1 < Y WORD ERR1 < Z PROG USE C,VISES PAGE < < < E M I S S I O N M E S S A G E : < < < ARGUMENT : < A=@MOT DU MESSAGE. < < PRINT: EQU $ PSR X,C 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. PLR X,C RSR PAGE < < < T E S T F I N D E M E S S A G E : < < < ARGUMENT : < X=INDEX DE BUF, DONNE LE < RANG DU CARACTERE A TESTER. < < < RESULTAT : < A=CARACTERE TESTE (SI CELUI-CI < ETAIT R/C, IL EST REMPLACE < PAR 'EOT'), < CODE DE CONDITIONS POSITION- < NES POUR TEST EN RETOUR JE/JNE... < < TEOT: EQU $ LBY &ABUF < A=CARACTERE A TESTER. ANDI '7F < CARACTERE SUR 7 BITS. CPI '04 JE TEOT1 < C'EST EOT... CPI '0D JNE TEOT1 < CE N'EST PAS R/C... LAI '04 < C'EST R/C, ON LE STBY &ABUF < REMPLACE PAR 'EOT'. TEOT1: EQU $ RSR PAGE < < < 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 < < PLACONS-NOUS SI POSSIBLE SOUS ":SYS" : < DEB2: EQU $ LAD DSYS SVC 0 < ENVOI DE "!L :SYS" : JE DEB1 < OK... LAD MSYS BSR APRINT < IMPOSSIBLE, LAD CCI SVC 0 < ON VA AU CCI, JMP DEB2 < ET ON BOUCLE EVENTUELLEMENT... DEB1: EQU $ LAD MENTER BSR APRINT < ENVOI D'UN MESSAGE AVANT LE CCI. LAD CCI SVC 0 < ON RETOURNE AU CCI ; CECI SERA < SURTOUT UTILISE SUITE A UN < ALT-MODE, POUR FAIRE DES !ASSIGN. < < 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. < < 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 @. STZ LEVENT < A CAUSE DES STZ LEVENT+1 < ALT-MODES !!! < < PREMIERE SIMULATION D'ASSIGNATION : < BSR AEXTAS < AFIN DE FAIRE UNE EDITION < CORRECTE DES NVP --> NSP. BSR AASIGN < < EXPLORATION DE TASSGN, ET ENVOI DES MESSAGES : < LOOP14: EQU $ BSR AEXTAS < EXPLORATION DE TASSGN. LOOP10: EQU $ LXI 0 < X=1ER NVP A TESTER. LYI NVPMAX+1 < Y=1ER NVP INEXISTANT. STZ KOMPT < RAZ DU COMPTEUR DES NVP. LOOP11: EQU $ LA &ADESC < ACCES AU DESCRIPTEUR (X). JALE LOOP12 < A NE PAS TESTER, OU NON < ASSIGNE. PSR X,Y LR A,C < C=@DESCRIPTEUR. LOOP30: EQU $ CPZ NOMIT < Y-A-T'IL UN ITEM ASSOCIE ??? JNE LOOP21 < OUI, ON VA LE LIRE... < < INITIALISATION DES NOMS D'ITEMS ASSOCIES : < LAD MRCLF BSR APRINT < ENVOI D'UN MESSAGE. LAD NOMVIS BSR APRINT < EMISSION DU NVP AUQUEL EST < ASSOCIE L'ITEM DEMANDE. LA AMITEM BSR APRINT LAD MEGAL BSR APRINT < ENVOI DU LIMITEUR '='. LAD DEMIN SVC 0 < ENTREE D'UN NOM PRESUME. LAD BUF ADRI -1,A < PAR COMPATIBILITE AVEC CODAGE. SBT 0 STA ABUF < RELAI VERS LE BUFFER D'ENTREE. BSR ACOD < CODAGE SUR 6 CARACTERES. JMP LOOP30 < ET C'EST REPARTI... < < MISE EN PLACE DU NOM DE L'ITEM COURANT : < LOOP21: EQU $ LA NOMIT+0 CP &ANIT0 JNE LOADI < L'ITEM ASSOCIE N'EST PAS < L'ITEM RESIDENT : VERS LE LOAD < DE CELUI-CI. LA NOMIT+1 CP &ANIT1 JNE LOADI < ITEM ASSOCIE NON RESIDENT. LA NOMIT+2 CP &ANIT2 JE NLOAD < L'ITEM ASSOCIE EST DEJA < RESIDENT, INUTILE DONC DE < LE RECHARGER... LOADI: EQU $ < CHARGEMENT DE L'ITEM ASSOCIE. LAD NOMIT < A=@EMETTEUR, LB ANITEM < B=@RECEPTEUR, LXI 3 < X=3 CARACTERES A DEPLACER, MOVE < MISE EN PLACE DU NOM DE < L'ITEM COURANT. LAD DEMSGN SVC 0 < TENTATIVE DE LECTURE DE < L'ITEM ASSOCIE A LA VISU < ASSIGNEE A CE NVP. JE NLOAD < OK, L'ITEM ASSOCIE EXISTE. STZ &ANIT0 < LORS DES ERREURS DE CHAR- STZ &ANIT1 < GEMENT, ON SUPPRIME LE STZ &ANIT2 < NOM DE L'ITEM COURANT. JMP LOOP13 NLOAD: EQU $ < L'ITEM ASSOCIE EST LA... IC KOMPT < OK, ON COMPTE LE NVP. LXI 0 LBY &AITEM < RECUPERATION DU 1ER CARACTERE < DE L'ITEM COURANT, STA LIMIT < QUI DEFINIT, POUR CET ITEM < LE CARACTERE DE FIN DE MESSAGE < EQUIVALENT A 'EOT'. BSR ASENDV < ET ON VA ESSAYER D'ENVOYER < LE MESSAGE COURANT DE CETTE < VISU... LOOP13: EQU $ PLR X,Y LOOP12: EQU $ ADRI 1,X < PASSAGE AU NVP SUIVANT. CPR X,Y < EXISTE-T'IL... JNE LOOP11 < OK, ON LE TESTE. CPZ KOMPT < SINON, A'T'ON TROUVE AU MOINS < UN NVP INTERESSANT ??? JNE LOOP10 < OUI, DONC ON REBOUCLE. BSR AASIGN < ESSAI DE SIMULATION !ASSIGN. LAD CCI < NON, ALORS ON ATTEND SVC 0 < EN RETOURNANT AU CCI. JMP LOOP14 < PUIS ON RECOMMENCE SI !GO. PAGE PROG P1 < < < F I N E T R A Z U N N V P : < < < FONCTION : < 'F' A LA MEME FONCTION QUE '/', < MAIS DE PLUS, L'INDEX ITEM EST < REMIS EN TETE DE L'ITEM (1), < L'ITEM ASSOCIE, AINSI QUE L'ITEM < RESIDENT SONT SUPPRIMES. < RAPPELONS QUE '/' NE FAIT QUE < DESASSIGNER LE NVP !!! < < FINRAZ: EQU $ STZ IEG IC IEG < IEG <-- 1. STZ NOMIT < SUPPRESSION ITEM ASSOCIE. STZ &ANIT0 < SUPPRESSION ITEM RESIDENT. JMP E10 < VERS LE TRAITEMENT DE '/'. < < < E N V O I D E S M E S S A G E S : < < < ARGUMENT : < C=@DESCRIPTEUR DE LA VISU VERS LAQUELLE < ON DOIT TENTER L'ENVOI D'UN MESSAGE. < < SENDV: EQU $ 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 $ LYI 80 < NBRE D'OCTETS PAR CARTE. LXI 0 < INDEX INITIAL BUFFER. STZ KCAR < RAZ COMPTEUR DES CARACTERES < DU MESSAGE COURANT (NON < COMPRIS L'EOT). LA VIEG < INDEX COURANT ITEM-VISU, STA IEG < QUE L'ON MET EN TEMPORAIRE. GETCAR: EQU $ LA IEG CP NCP < VALIDATION IEG JL E1 < OK. E10: EQU $ < < DESASSIGNATION DU NVP : < CPZ MODE < !ASSIGN OU NVP= ??? JNE SIMU1 < ASSIGNATION SIMULEE (NVP=). LAD MASS < A=@EMETTEUR. LB ABUF RBT 0+NBITMO < B=@RECEPTEUR. LXI LMASS < X=NBRE DE MOTS A DEPLACER. MOVE < MISE DE !ASSIGN DANS BUF. LA NVPVIS < A=NVP A DESASSIGNER. ADRI '30,A < CONVERSION ASCI DU NVP. LXI LMASS*2-4 STBY &ABUF < MISE DU NVP DANS !ASSIGN NVP=S. LAD CCINT SVC 0 < ENVOI DU !ASSIGN NVP=S. SIMU1: EQU $ BR AFINIT < DEBORDEMENT : FIN D'ITEM, ON < ARRETE LA POUR CETTE VISU. < < ACCES AU CARACTERE COURANT : < E1: EQU $ PSR X LR A,X LBY &AITEM < A=OCTET COURANT DE L'ITEM. CP LIMIT < EST-CE LE CARACTERE DE FIN < DE MESSAGE COURANT ??? JNE GET3 < NON. LAI '04 < OUI, ON LE REMPLACE PAR 'EOT'. GET3: EQU $ IC IEG < PROGRESSION IEG. PLR X CPZR X < EST-CE LE 1ER CARACTERE BUFFER ??? JE GET1 < OUI, IL RESTE TEL QUEL... TBT 8 < EST-CE UN CTRL-XXX ??? JNC GET1 < NON, CARACTERE NORMAL. RBT 8 < OUI, A=CTRL-XXX. ADRI -'40,A GET1: EQU $ STBY &ABUF CPI '04 < EST-CE UN 'EOT' ??? JE GET2 < OUI, FIN DE MESSAGE. CPI '0D < EST-CE UN 'RETURN' ??? JE GET2 < OUI, FIN DE MESSAGE. IC KCAR < COMPTAGE DES CARACTERES < DIFFERENTS DE 'LIMIT'. ADRI 1,X < PROGRESSION INDEX BUFFER. CPR X,Y < 80 OCTETS ??? JNE GETCAR < NON, AU SUIVANT. GET2: EQU $ < < P R E - A N A L Y S E : < STZ IENTER < 0 : PAS DE 'I' A PRIORI. ANALYS: EQU $ LXI 0 < INDEX INITIAL BUFFER. < < PRE-ANALYSE DU MESSAGE : < < DEFINITION DU PREMIER CARACTERE : < < 'SPACE' COMMENTAIRE, < < COMMENTAIRE, < > TEXTE A EDITER, < I MESSAGE COURANT A ENTER SUR NVP='01. < A SIMULATION DES ASSIGNATIONS < NVP --> NSP VISU. < ! CARTE CONTROLE DESTINEE AU CCI < DE LA VISU LOCALE, < C ACCES AU CCI LOCALE, < + SUIVI PAR UN 'NVP' (3-9), < PERMET DE DEFINIR L'ITEM ASSOCIE < A CE 'NVP'. < - SUPPRIME L'ITEM ASSOCIE A UN NVP, < NOTA : POUR + ET - LE NVP < PEUT S'ECRIRE @, AUQUEL CAS < ON PREND LE NVP COURANT. < = MESSAGE CONTENANT UN 'EOT' EN FIN, < # IDEM A '=', MAIS AVEC BLOCAGE < PREALABLE DE TOUT LE SYSTEME < PENDANT 2 SECONDES. < '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. < F FIN DE LISTE ET RAZ, < %K( DEBUT DE RECURSIVITE, < ) FIN DE RECURSIVITE. < @K DEFINITION DE CCONST (=K), < @K=XXX INITIALISATION DE LA CONST K, < @K+XXX INCREMENTATION DE CONST K, < @K-XXX DECREMENTATION DE CONST K. < XXX PEUT S'ECRIRE : CONSTANTE HEXADECIMALE, < OU @L (CONST L), < OU @LN (CONST L DU NVP=N), < HK TEMPORISATION DE K SECONDES. < MAIS BLOQUE L'ENSEMBLE DES NVP !!! < WK MISE EN ATTENTE DE K SECONDES < DE L'ITEM COURANT (NE BLOQUE PAS < LES AUTRES !!!). < RK RESET EVENEMENT K, < SK SET EVENEMENT K, SI K>=16, < TK (K<16) SI L'EVENEMENT K EST ARRIVE, < ON ATTEND, SINON, ON LE MET < A 1 ET ON CONTINUE EN < SEQUENCE (TEST & SET), < TK (K>=16) SI L'EVENEMENT K EST ARRIVE, < ON CONTINUE EN SEQUENCE, < SINON, ON L'ATTEND. < < < IMPORTANT : < TOUS LES MESSAGES DEFINIS CI-DESSUS < DOIVENT SE TERMINES PAR UN LIMITEUR < DU TYPE 'EOT' (VOIR LE 1ER CARACTERE < DE CHAQUE ITEM). < < < IMPORTANT : < SI LE PREMIER CARACTERE EST EN EXPOSANT, < LA SUITE DU MESSAGE DOIT ETRE VIDE, ET EST REMPLACEE < PAR LA CONSTANTE COURANTE (CCONST) CODEE < EN ASCI SUR 1 A 9 CHIFFRES : < 1-9 --> 1 A 9 CHIFFRES, < LES AUTRES COMMANDES DONNANT 4 CHIFFRES. < LBY &ABUF < X=0 (SVC) : ACCES AU 1ER CARACTERE TBT 8 < EST-IL EN EXPOSANT ??? JNC NORM1 < NON, MODE NORMAL... < < CAS OU UNE CONSTANTE VA ETRE CODEE EN ASCI : < RBT 8 LYI 4 < 4 CARACTERE DE CODAGE. CPI "1" JL NORM2 < ON N'EST PAS ENTRE 1 ET 9. CPI "9" JG NORM2 < ON N'EST PAS ENTRE 1 ET 9. ADRI -'30,A < ENTRE 1 ET 9, LA COMMANDE LR A,Y < DONNE LE NBRE DE CARACTERES < CODES. NORM2: EQU $ LXI 1 BSR ATEOT < TEST DE MESSAGE VIDE ??? JNE ERR1 < NON, ERREUR !!! PSR W LAD CONST0 AD CCONST LR A,W < W=@CONSTANTE COURANTE. LB 0,W < B=CONSTANTE COURANTE. LR Y,A CPI 4 < CODE-T'ON PLUS OU MOINS DE < 4 CARACTERES ??? JLE NORM7 < 4 OU MOINS DE 4 CARACTERES. ADRI -4,A < A=NBRE DE CARACTERES EXCE- < DANT LES 4. LR A,X < X=1, 2,.. (NBRE DE '0'). LYI 1 < Y=INDEX DE STORE '0'. LAI "0" < CARACTERES INSERES PREA- < LABLEMENT... NORM8: EQU $ XR X,Y STBY &ABUF < INSERTION DES '0' PRELIMINAIRES. XR X,Y ADRI 1,Y < INDEX DES '0'. JDX NORM8 < AU SUIVANT. LR Y,X < X=INDEX DES CHIFFRES A SUIVRE. LYI 4 < Y=4 CARACTERES A CODER. JMP NORM9 < VERS LE CODAGE... NORM7: EQU $ LBI 0 < CLEAR B. SLLS 2 < CONVERSION EN NBRE DE BITS. LR A,X LA 0,W < A=CONSTANTE COURANTE. SLRD 0,X < CADRAGE CORRECT DANS B. NORM6: EQU $ LXI 1 < X=INDEX DE CODAGE. NORM9: EQU $ PLR W NORM3: EQU $ LAI 0 SLLD 4 < DECONCATENATION. CPI 9 JLE NORM5 < CHIFFRE DECIMAL. ADRI "A"-"9"-1,A < CODAGE ASCI. NORM5: EQU $ ADRI "0",A < CODAGE ASCI SUITE. STBY &ABUF < ET MISE DANS LE BUFFER ASCI. ADRI 1,X < PROGRESSION INDEX BUFFER, ADRI -1,Y < DECOMPTE DES CARACTERES GENERES. CPZR Y < C'EST FINI ??? JG NORM3 < NON... LAI '04 < OUI, ON SIMULE UN 'EOT'. STBY &ABUF < MIS DANS LE BUFFER. LXI 0 LBY &ABUF RBT 8 < A=COMMANDE COURANTE... < < T R A I T E M E N T C O M M A N D E < C O U R A N T E : < NORM1: EQU $ CPI " " JL ERR1 < ERREUR DE SYNTAXE. CPI "Z" JG ERR1 < ERREUR DE SYNTAXE. LR A,X < X=INDEX COMMANDE. STA COMC < SAVE LA COMMANDE COURANTE. BR &ACOMD < VERS LE MODULE SPECIFIQUE. < < E R R E U R S D E S Y N T A X E : < ERR1: EQU $ SBT 7 < MISE D'UNE LONGUEUR=1 STA MERR1 < DEVANT LE CARACTERE ERRONE. LAD NOMVIS BSR APRINT < ENVOI DU NVP EN CAUSE. LAD MERR1 BSR APRINT < ENVOI DU CARACTERE EN CAUSE. LAD MERR BSR APRINT < ENVOI DE ?? BR AMAJIE < VERS LA MAJ DE IEG... < < E N V O I A L T - M O D E : < SALTM: EQU $ LAD MALT SBT 0 STA ABUF < ABUF RELAYE LE ALT-MODE. DC XBUF < XBUF=0. JMP EOT < ET C'EST TOUT... < < E N V O I M E S S A G E A V E C < D O D O P R E A L A B L E : < FDODO: EQU $ LAI 2 STA SLEEP+2 LAD SLEEP SVC 0 < MISE EN ATTENTE PENDANT 2S. JMP EOT < PUIS ESSAI D'ENVOI MESSAGE. < < A P P E L C C I L O C A L I N T E R P R E T A T I F : < CARTC: EQU $ LAD CCINT SVC 0 < APPEL DU CCI NON INTERACTIF. JNE E4 < ERREUR DE CARTE CONTROLE. BSR AEXTAS < APRES CHAQUE APPEL DU CCI, < ON REPARCOURT TASSGN. E8: EQU $ BR AMAJIE < < A C C E S C C I L O C A L I N T E R A C T I F : < GOCCI: EQU $ LAD CCI SVC 0 < ALLER AU CCI... BR AMAJIE < APRES UN !GO... < < C H A N G E M E N T D E L ' I T E M < A S S O C I E A U N N V P : < < S U P P R E S S I O N : < SUPIT: EQU $ LR A,B < SAVE B=FONCTION. LXI 2 BSR ATEOT < NVP SUIVI D'UN EOT ??? JNE E4 < NON, ERREUR !!! LR B,A < RESTAURE A=FONCTION. < < A J O U T : < CHGIT: EQU $ LR A,B < SAVE LA FONCTION DEMANDEE < DANS B ('+' OU '-'). LXI 1 LBY &ABUF < RECUPERATION DU NVP PRESUME. ADRI -'30,A < CONVERSION BINAIRE. JAL E4 < ERREUR DE SYNTAXE. CPI '09 < EST UN CHIFFRE DECIMAL ??? JLE CHGIT2 < OUI, OK. ADRI -"A"+"9"+1,A < NON, CONVERSION HEXADECIMALE. CPI '09 < EST-CE UN CHIFFRE HEADECIMAL ??? JG CHGIT2 < PEUT-ETRE... JL E4 < NON, ERREUR !!! LA NVPVIS < CAS DU CARACTERE '@', ON PREND < COMME NVP, LE NVP DU DESCRIP- < TEUR COURANT. CHGIT2: EQU $ CPI NVPMAX+1 < VALIDATION. JGE E4 < ERREUR DE NVP. LR A,X < X=NVP DEMANDE. LA &ADESC < RECUPERATION DU DESCRIPTEUR < ASSOCIE A CE NVP. JAE E4 < NVP INACESSIBLE. PSR C < SAVE LE C COURANT RBT 0 < RAZ INVALIDATION A PRIORI. LR A,C < C=@DESCRIPTEUR ASSOCIE A (X). STZ NOMIT < SUPPRESSION A PRIORI... LR B,A < RECUPERATION DE LA FONCTION. CPI "+" < EST-CE UNE ADJONCTION ??? JNE CHGIT1 < NON, OK SUPPRESSION. BSR ACOD < OUI, ON VA CODER. CHGIT1: EQU $ LR C,A < SAVE L'@DESCRIPTEUR QUE L'ON < VIENT DE MODIFIER. PLR C < RESTAURE LE C COURANT. CPR A,C < A-T'ON EN FAIT MODIFIER LE < DESCRIPTEUR COURANT ??? JE E100 < OUI, ON NE VA PAS METTRE < IEG A JOUR, EN EFFET, LE < CODAGE L'A REMIS A 1 !!! BR AMAJIE < VERS LA MAJ DE L'INDEX IEG. 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. < < E N V O I M O T D E P A S S E < D Y N A M I Q U E : < 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 NBITMO < 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 E4: EQU $ BR AERR < TRAITEMENT DES ERREURS. < < TEST DES MESSAGES SANS 'EOT' : < COMPT: EQU $ E5: EQU $ 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. < < M E S S A G E S : < EOT: EQU $ < < TEST D'AUTO-ASSIGN : < LA NSPVIS < NSP DEMANDE, CP NSPIN < EST-CE CELUI DE LA VISU < DE DIALOGUE ??? JNE WAIT < OK, ON PEUT EMETTRE... LA COMC < NSPVIS=NSPIN : ERREUR, LE < PROGRAMME NE PEUT FAIRE < 2 CHOSES EN MEME TEMPS (ATTEN- < DRE UN MESSAGE, ET SE L'EMET- < TRE !!!) : ERREUR... JMP ERR1 < ENVOI COMMANDE COURANTE... < < A T T E N T E E V E N T U E L L E < D ' U N E V I S U E N L E C T U R E : < WAIT: EQU $ LAD MNUL BSR APRINT < ON TEMPORISE, AFIN D'ETRE SUR DE NE < PAS RETOMBER SUR UNE DEMANDE ANTERIEURE.. 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 E6 < PAS DE DEMANDE EN ATTENTE, ON < REND LA MAIN PROVISOIREMENT... < 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??? JLE E7 < OK, IL S'AGIT D'UNE LECTURE. E6: EQU $ CPZ IENTER < LE MESSAGE QUE L'ON NE PEUT < EMETTRE A-T'IL ETE RENTRE < PAR 'I' ??? JE E100 < NON... LA AMINEF < OUI, IL FAUT SIGNALER BSR APRINT < QU'IL N'A PAS ETE EMIS, < ET QU'IL VA FALLOIR LE < RERENTRER... E100: EQU $ BR AFSEND < ON REND LA MAIN PROVISOIREMENT < LORSQU'IL N'Y A RIEN A FAIRE... E7: EQU $ < < LA VISU ATTEND UNE LECTURE, LET'S GO... < LR B,A < A=FONCTION REELLEMENT DEMANDEE. CPI '09 < EST-CE 'LECTURE GRAPHIQUE' ??? LBI 5 < OUI A PRIORI : B=5 OCTETS A LIRE. JE E20 < ET OUI, 'LECTURE GRAPHIQUE'... 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. E20: EQU $ STB NOCT < ET SAVE IT... < < B O U C L E D E S I M U L A T I O N < D E L ' E N T R E E D ' U N < M E S S A G E S U R U N E V I S U : < LOOP: EQU $ LR C,A STA CDESC < SAUVEGARDE DE L'ADRESSE < DU DESCRIPTEUR COURANT. 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. BSR ATEOT < TEST DE DERNIER CARACTERE... JNE LOOP < NON, ON CONTINUE... < < < F I N D E L ' E M I S S I O N < M E S S A G E O U D U < T R A I T E M E N T C O M M A N D E : < LOOP20: EQU $ < < MISE A JOUR DE L'INDEX COURANT DE L'ITEM VISU : < MAJIEG: EQU $ LA IEG STA VIEG < < RETOUR, FIN TEMPORAIRE POUR CETTE VISU : < FSENDV: EQU $ RSR < < FIN DE LA LISTE DES MESSAGES : < LOOPF: EQU $ < < SUPPRESSION DU DESCRIPTEUR DE CETTE VISU : < FINITE: EQU $ LAD NOMVIS BSR APRINT < EDITION DU NVP EN CAUSE, LAD MARRET BSR APRINT < PUIS DU MESSAGE 'FIN'. LX NVPVIS < X=NVP AUQUEL EST ASSIGNEE < CETTE VISU. LA &ADESC SBT 0 < INVALIDATION DU CONTEXTE. STA &ADESC STZ NSPVIS < AFIN DE RENDRE COMPATIBLES STZ ADCTVI < LES !ASSIGN ET LEUR SIMULA- < TION : AINSI SI UNE ASSI- < GNATION NVP --> NSP EST < SIMULEE, NSPVIS#0, ET AINSI, < LORS DU PARCOURS DE TASSGN, < BIEN QUE LE NVP NE SOIT PAS < REELLEMENT ASSIGNE, SON < RELAI NE SERA PAS INVALIDE... BR AMAJIE < VERS LA MISE A JOUR DE < L'INDEX COURANT DE L'ITEM-VISU. < < EMISSION D'UNE ERREUR : < ERREUR: EQU $ LAD NOMVIS BSR APRINT < EDITION NOM DE LA VISU. LAD MERR BSR APRINT < EDITION DE '??'. BR AMAJIE < VERS LA MAJ DE L'INDEX ITEM-VISU. PAGE < < < C O M M E N T A I R E S : < < COMEN2: EQU $ LA KCAR ADRI -1,A < SUPPRESSION DU 1ER CARACTERE. JALE COMEN1 < RIEN A EDITER... LXI 0 STBY &ABUF < LE 1ER OCTET DU MESSAGE COURANT < RECOIT SA LONGUEUR. LAD BUF BSR APRINT < ENVOI DU MESSAGE COURANT SUR < NVP='02. COMEN1: EQU $ BR AMAJIE < IL NE S'AGISSAIT QUE D'UN < COMMENTAIRE DANS LE TEXTE < DE L'ITEM. PAGE < < < E N T R E E D I R E C T E D U < M E S S A G E C O U R A N T : < < ENTERM: EQU $ IC IENTER < 1 : 'I' EN COURS. CPZ DUREE < EST-ON EN FAIT DANS UNE < COMMANDE 'W' INTRODUITE < SOUS 'I' ??? JNE NENTER < OUI, DONC PAS DE NOUVEAU < MESSAGE A RENTRER !!! LXI 1 BSR ATEOT < EOT DERRIERE 'I' ??? JNE RECU19 < NON, ERREUR !!! LAD NOMVIS BSR APRINT < EDITION DU NVP COURANT. LAD MINTER BSR APRINT < ENVOI INVITATION... LAD DEMIN SVC 0 < ENTREE DU MESSAGE COURANT. ENTER7: EQU $ BR AANALY < VERS SON ANALYSE INSTANTANEE... < < SIMULATION D'UNE COMMANDE 'W' : < NENTER: EQU $ LXI 0 < A METTRE EN TETE DU BUFFER, LAI "W" < UNE BELLE COMMANDE 'W'... STBY &ABUF JMP ENTER7 < ET ON VA L'ANALYSER... PAGE < < < T E M P O R I S A T I O N : < < TEMPO: EQU $ LXI 1 LBY &ABUF < CARACTERE SUIVANT 'H'. BSR AGETCO < DECODAGE BINAIRE. STA SLEEP+2 LXI 2 BSR ATEOT < EOT DERRIERE ??? JNE RECU19 < NON... LAD SLEEP SVC 0 < ATTENTE... BR AMAJIE < VERS LA MAJ DE IEG... < < < T E M P O R I S A T I O N S U R L E N V P < C O U R A N T U N I Q U E M E N T : < < WTEMPO: EQU $ CPZ DUREE < Y-A-T'IL UNE COMMANDE 'W' < EN COURS ??? JE TEMPO1 < NON, INITIALISATION DE 'W'... < < CAS D'UNE COMMANDE 'W' EN COURS : < WORD '1E85 < A=HEURE COURANTE (/2). CP HORLOG < A-T'ON CHANGE DE TRANCHE < DE 2 SECONDES DEPUIS LA < DERNIERE MISE A L'HEURE ??? JE TEMPO2 < NON, RIEN A FAIRE !!! STA HORLOG < OUI, MISE A JOUR... DC DUREE < DECOMPTE DU TEMPS ECOULE. JNE TEMPO2 < IL EN RESTE ENCORE... BR AMAJIE < C'EST FINI : DUREE=0. < < INITIALISATION D'UNE COMMANDE 'W' : < TEMPO1: EQU $ LXI 2 BSR ATEOT < EOT DERRIERE ??? JNE RECU19 < NON, ERREUR... LXI 1 LBY &ABUF < ACCES A LA DUREE DEMANDEE. BSR AGETCO < DECODAGE SI OK. ADRI 1,A < ON INCREMENTE DE 1, CAR ON < VA DIVISER PAR 2. SLRS 1 < CAR '1E85 DONNE DES TEMPS < EXPRIMES EN MULTIPLE DE < 2 SECONDES. STA DUREE < DUREE#0. WORD '1E85 < A=HEURE COURANTE (/2). STA HORLOG < 1ERE MISE A L'HEURE. TEMPO2: EQU $ BR AFSEND < ON NE FAIT PAS PROGRESSER < IEG AFIN DE RESTER SUR 'W'... PAGE < < < G E S T I O N D E S E V E N E M E N T S : < < < FONCTIONS : < ON DISPOSE DE 32 EVENEMENTS (1-9, A-W), < SUR LESQUELS ON PEUT FAIRE DES < SET, RESET, ET SURTOUT DES TESTS; < LORS D'UN TEST, SI L'EVENEMENT EST POSITIONNE, < ON CONTINUE EN SEQUENCE (MAJIEG), SINON, < ON ATTEND QU'IL LE SOIT (FSENDV). < < A T T E N T I O N : < 1- SI K<16 : LE SET N'EXISTE PAS, ET < LA FONCTION TEST EST EN FAIT UN TEST & < SET : SI L'EVENEMENT K EST ARRIVE ON < SE BLOQUE, SINON, ON LE MARQUE, ET ON < CONTINUE EN SEQUENCE : PERMET L'EXCLUSION !!! < 2- SI K>=16 : IL S'AGIT ALORS D'UN TEST < TOUT COURT : SI L'EVENEMENT N'EST PAS < ARRIVE, ON L'ATTEND, SINON, ON CONTINUE < EN SEQUENCE... < < EVENT: EQU $ LR A,Y < Y=FONCTION DEMANDEE (R/S/T). LXI 2 BSR ATEOT < EOT DERRIERE ??? JNE RECU19 < NON, ERREUR... LXI 1 LBY &ABUF < ACCES AU NOM D'EVENEMENT. BSR AGETCO < CONVERSION BINAIRE. CPI 32 < VALIDATION EVENEMENT ??? JGE RECU17 < N'EXISTE PAS, ERREUR. CPI 16 < DISCRIMINATION TEST&SET DE TEST. LR A,X < X=NUMERO DE L'EVENEMENT. LR Y,A < A=FONCTION ASCI. JL EVENT3 < K<16 : 'TEST & SET'. < < < S E T / R E S E T / T E S T : < < ADRI -"S",A < A=-1 SI R, 0 SI S, +1 SI T. CPI 0 < DISCRIMINATION DES FONCTIONS. LA LEVENT < ACCES A LA LISTE DES LB LEVENT+1 < EVENEMENTS COURANTS. JL EVENTR < RESET. JE EVENTS < SET. < < TEST EVENEMENT (X) : < EVENTT: EQU $ TBT 0,X JC EVENT1 < (X) EST ARRIVE : MAJIEG. BR AFSEND < (X) NON ARRIVE, ON ATTEND. < < RESET EVENEMENT (X) : < EVENTR: EQU $ RBT 0,X JMP EVENT2 < < SET EVENEMENT (X) : < EVENTS: EQU $ SBT 0,X EVENT2: EQU $ < MAJ DE LA LISTE DES EVENEMENTS. STA LEVENT STB LEVENT+1 EVENT1: EQU $ < ON CONTINUE EN SEQUENCE. BR AMAJIE < < < R E S E T / T E S T & S E T : < < EVENT3: EQU $ ADRI -"S",A < A=-1 SI R, 0 SI S, +1 SI T. JAE RECU19 < S N'EXISTE PAS SI K<16. CPI 0 < DISCRIMINATION T/R. LA LEVENT < CHARGEMENT DE LA LB LEVENT+1 < LISTE DES EVENEMENTS. JL EVENTR < TRAITEMENT DE RESET. < < TEST&SET EVENEMENT (X) : < TBT 0,X < (X) EST-IL ARRIVE ??? JNC EVENTS < NON, ALORS IL ARRIVE, ON < SIMULE UN SET. BR AFSEND < OUI, ALORS ON SE BLOQUE < DESSUS. < (PERMET L'EXCLUSION !!!) PAGE < < < R E C U P E R A T I O N C O N S T A N T E : < < < ARGUMENT : < A=CARACTERE ASCI, < < < RESULTAT : < A=VALEUR 1-9 OU A-Z. < < GETCO: EQU $ ADRI -'30,A < CODAGE BINAIRE... JALE GETCO1 < ERREUR. CPI 9 < CHIFFRE DECIMAL ??? JLE RECU18 < OUI, OK. ADRI -"A"+"9"+1,A < CODAGE BINAIRE SUITE... CPI 9 JL GETCO1 < ERREUR. JG RECU18 < OK. < < CAS DE LA CONSTANTE '@' : ON RECUPERE CCONST : < PSR W LAD CONST0 AD CCONST LR A,W < W=@CCONST. LA 0,W < A=CONSTANTE COURANTE. PLR W JALE GETCO1 < ERREUR : REFUS CONSTANTE <=0 !!! RECU18: EQU $ RSR GETCO1: EQU $ ADRI -1,K < ANNULATION BSR. JMP RECU19 < VERS MESSAGE ERREUR... PAGE < < < D E B U T D E R E C U R S I V I T E : < < RECU19: EQU $ LXI 0 < INDEX CARACTERE 0. RECU17: EQU $ LBY &ABUF < ACCES CARACTERE (X). BR AERR1 < VERS L'EMISSION ERREUR... < < POINT D'ENTREE : < RECUR: EQU $ CPZ IENTER < EST-ON SOUS 'I' ??? JNE RECU19 < OUI, '(' REFUSE !!! LXI 1 LBY &ABUF < ACCES CARACTERE SUIVANT %. BSR AGETCO < DECODAGE BINAIRE DE (A). LR A,Y < Y=NBRE DE REPETITIONS (1 A Z). LXI 2 LBY &ABUF < ACCES AU CARACTERE SUIVANT... CPI "(" JNE RECU17 < ERREUR, CE N'EST PAS ( !!!! LXI 3 BSR ATEOT < EOT DERRIERE ??? JNE RECU19 < NON, ERREUR... LBI CODREP < B=CODREP, ET Y=NBRE REPETITIONS. < < < P U S H R E C U R S I V I T E : < < < ARGUMENTS : < B#0=CAUSE DU PUSH : EMPILEMENT REEL DANS PIR ; < ='40 : PUSH POUR REPEAT , < ='20 : PUSH POUR APPEL PROGRAMME , < ='10 : PUSH POUR SAUT DEFINITION PROGRAMME , < ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC < CHANGEMENT D'ITEM COURANT. < Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU (SI < B#0). < < PRIMPS: EQU $ < < CAS DES PUSH VERITABLES : < LA APRC < ACCES AU RELAI COURANT DE PIR. RBT 0 < RAZ DU BIT INDEX. LXI CDCP < RETOUR EN ERREUR A PRIORI. CP TPR < EST-ON AU SOMMET DE PIR ??? JGE RECU19 < STACK OVERFLOW.... LA APRC ADRI LEPR,A < NON CALCUL @ENTREE SUIVANTE. STA APRC < MAJ DU RELAI COURANT DE PIR. < < INITIALISATION DE LA NOUVELLE ENTREE DE PIR : < SWBR Y,A < Y=COMPTE DE REPETITIONS. ORI 1 < CP=1 : COMPTE PARENTHESES. STA &APRC < RANGEMENT DE CD ET CP. LXI IR < RETOUR OK. SWBR B,A < OCTET0(A)=CAUSE DU PUSH. AD IEG < ET CONCATENATION INDEX COURANT. ADRI -1,A TBT BITREP < EST-CE UN PUSH POUR REPEAT ??? SBCR A < SI OUI , RETOUR SUR '('. STA &APRC BR AMAJIE < VERS LA MAJ DE VIEG... < < < D E B U T D E R E C U R S I V I T E : < < BREC: EQU $ LXI CP LBY &APRC ADRI 1,A < COMPTAGE DES PARENTHESES. STBY &APRC LXI 1 LBY &ABUF CPI '04 JNE RECU19 < ERREUR DE SYNTAXE... BR AMAJIE < OK... < < < F I N D E R E C U R S I V I T E : < < ENDR: EQU $ CPZ IENTER < EST-ON SOUS 'I' ??? JNE RECU19 < OUI, ')' REFUSE !!! LXI 1 BSR ATEOT < EOT DERRIERE ')' ??? JNE RECU19 < NON, ERREUR... < < < P U L L R E C U R S I V I T E : < < < ARGUMENT : < B#0 : PULL VERITABLE , < =0 : DECOMPTER UNIQUEMENT LES ')'. < < PRIMPL: EQU $ < < DECOMPTE DES PARENTHESES : < LXI CP LBY &APRC < A=CP COURANT SOUS CE NIVEAU. JAE RECU19 < TROP DE ')' !!! ADRI -1,A STBY &APRC < MAJ DU CP COURANT. JANE RECU20 < JUSTE DECOMPTAGE DES ')'... LXI CD LBY &APRC < A=CD COURANT. JAE RECU20 < CAS DE LA 1ERE ENTREE DANS PIR, < IL NE FAUT PAS DEPILER ... ADRI -1,A < DECOMPTE DES REPETITIONS. JAG E14 < IL RESTE AU MOINS UNE REPETITION. JAL RECU19 < ERREUR DE SYNTAXE... < < CAS CD=0 : PULL VERITABLE : < LA APRC RBT 0 < ACCES A L'@ENTREE COURANTE. CP BPR < EST-ON AU BAS DE LA PILE ??? JLE RECU19 < OUI, ERREUR... E90: EQU $ LA APRC ADRI -LEPR,A < NON , RETOUR SUR L'ENTREE < PRECEDENTE. STA APRC < ET MAJ DU RELAI COURANT. < < SORTIE OK... < RECU20: EQU $ BR AMAJIE < < ACS OU CD#0 : 2L RESTE AU MOINS UNE REPETITION : < E14: EQU $ STBY &APRC < MAJ DU CD COURANT. LXI IR LA &APRC LR A,B < B=ENTREE IR DE PIR. TBT BITPRO < EST-CE UN RETOUR PROGRAMME ??? AND CFFF < RAZ DES BITS 0,1,2,3. STA IEG < A=INDEX DE DEBUT DE REPETITION. JMP RECU20 < VERS LA SORTIE OK... PAGE < < < G E S T I O N D E S C O N S T A N T E S @ : < < < FONCTION : < @K; CCONST <-- K, < @K=XXX; INITIALISATION DE LA CONSTANTE < K, ET CCONST <-- K, < @K+XXX, INCREMENTATION DE LA CONSTANTE < K, ET CCONST <-- K, < @K-XXX, DECREMENTATION DE LA CONSATNTE < K, ET CCONST <-- K. < XXX EST SOIT UNE CONSTANTE HEXADECIMALE, < SOIT @L (CONST L), < SOIT @LN (CONST L DU NVP=N, N POUVANT < ETRE ECRIT @, CE QUI SIGNIFIE ALORS : < PRENDRE LE NVP COURANT), < < < IMPORTANT : < CONSTANTES GLOBALES : K VA DE 0 A NCONSG-1, < (ELLES SONT COMMUNES A < TOUS LES NVP), < CONSTANTES LOCALES : K VA DE NCONSG A NCONST-1. < < GCONST: EQU $ LXI 1 LBY &ABUF < ACCES CARACTERE SUIVANT. ADRI -'30,A < DECODAGE BINAIRE. JAL RECU19 < ERREUR DE SYNATXE... CPI 9 < CHIFFRE DECIMAL ??? JLE GCONS8 < OUI. ADRI -"A"+"9"+1,A < DECODAGE (SUITE). CPI 9 JL RECU19 < ERREUR DE SYNATXE... GCONS8: EQU $ CPI NCONST-1 < VALIDATION... JG RECU19 < ERREUR DE SYNTAXE... STA CCONST < OK, SAVE LE NOUVEAU CCONST. PSR W LR A,W LAD CONST0 ADR A,W < W=@CONSTANTE COURANTE. < < TEST PRELIMINAIRE DE L'OPERATEUR : < LXI 2 BSR ATEOT < INITIALISATION CCONST ??? JE GCONS7 < C'ESTFINI, JUSTE MAJ DE CCONS. < < DETECTION DE LA CONSTANTE : < LXI 3 LBY &ABUF CPI "@" < EST-CE LE TYPE @K @L ??? JE GCONS9 < OUI.... LBI 0 < INITIALISATION DE B. GCONS1: EQU $ BSR ATEOT < FIN DE MESSAGE ??? JE GCONS4 < OUI, FIN DU DECODAGE. ADRI -'30,A < DECODAGE BINAIRE. JAL GCONS2 < ERREUR DE SYNTAXE... CPI 9 < CHIFFRE DECIMAL ??? JLE GCONS3 < OUI... ADRI -"A"+"9"+1,A < DECODAGE (SUITE). CPI 'A < VALIDATION CHIFFRE A-F ??? JL GCONS2 < ERREUR DE SYNATXE. CPI 'F < VALIDATION CHIFFRE A-F ??? JG GCONS2 < ERREUR DE SYNTAXE... GCONS3: EQU $ SCRS 4 SCLD 4 < CONCATENATION A B... ADRI 1,X < PROGRESSION INDEX BUFFER. JMP GCONS1 < AU SUIVANT... < < TRAITEMENT DE L'OPERATEUR : < GCONS4: EQU $ LXI 2 LBY &ABUF LY 0,W < Y=CONSTANTE DEMANDEE. CPI "+" JE GCONS5 < INCREMENTATION. CPI "-" JNE GCONS6 NGR B,B < DECREMENTATION. JMP GCONS5 < VERS L'INCREMENTATION. GCONS6: EQU $ CPI "=" JNE GCONS2 < ERREUR DE SYNTAXE... LYI 0 < INITIALISATION CONSTANTE. GCONS5: EQU $ ADR B,Y GCONSB: EQU $ LA CCONST < A=NOM DE LA CONSTANTE DEMANDEE. CPI NCONSG < EST-ELLE LOCALE ??? JGE GCONSE < OUI. < < STORE UNE CONSTANTE GLOBALE : < LB CCONST < SAVE B=NOM DE LA CONSTANTE < DEMANDEE. PSR C < SAVE LE CONTEXTE COURANT. LXI NVPMAX+1 < X=1ER NVP INEXISTANT. GCONSF: EQU $ LA &ADESC < ACCES AU DESCRIPTEUR DU < NVP=(X)-1. JALE GCONSG < NON ASSIGNE (<0) OU NON < NON ASSIGNABLE (=0). LR A,C LAD CONST0 ADR B,A < RECUPERATION NOM CONSTANTE. LR A,W < W=@ DE LA CONSTANTE DANS < LE CONTEXTE (C). STY 0,W < STORE LA CONSTANTE GLOBALE < CCONST. GCONSG: EQU $ JDX GCONSF < AU CONTEXTE PRECEDENT... PLR C < RESTAURE LE CONTEXTE COURANT. JMP GCONS7 < ET C'EST TOUT... < < STORE UNE CONSTANTE LOCALE : < GCONSE: EQU $ STY 0,W < MAJ DE LA CONSTANTE DEMANDEE. GCONS7: EQU $ PLR W BR AMAJIE < ET C'EST TOUT... < < RETOURS EN ERREUR : < GCONS2: EQU $ PLR W GCONSH: EQU $ LXI 0 LBY &ABUF BR AERR1 < VERS LE MESSAGE D'ERREUR... < < INITIALISATION CONSTANTE-CONSTANTE : < GCONS9: EQU $ LXI 5 BSR ATEOT < INITIALISATION LOCALE ??? LBI 0 < B=0 : ACCES CONSTANTE LOCALE < A PRIORI. JE GCONSC < CAS DE L'EOT : MODE LOCAL. ADRI -'30,A < EST-CE LE MODE GLOBAL ??? JAL GCONS2 < ERREUR... CPI '09 JLE GCONSD < OK, NVP<=9. ADRI -"A"+"9"+1,A CPI '09 JG GCONSD < OK, NVP>9. JL GCONS2 < ERREUR... LA NVPVIS < CAS DE @ : ON PREND LE NVP COURANT... GCONSD: EQU $ CPI NVPMAX+1 < VALIDATION DU NVP DEMANDE... JGE GCONS2 < ERREUR, N'EXISTE PAS... LR A,X < X=NVP DEMANDE. CPZ &ADESC < EST-IL ASSIGNE ??? JLE GCONS2 < NON, ERREUR !!! SB NVPVIS MP ALLVIS < B=DISTANCE SEPARANT LES CONSTANTES < DU NVP COURANT DE CELLES DU NVP < DEMANDE (EN MOTS). LXI 6 BSR ATEOT < EOT DERRIERE ??? JNE GCONS2 < NON, ERREUR... GCONSC: EQU $ LXI 4 LBY &ABUF < ACCES A LA 2EME CONSTANTE. ADRI -'30,A < DECODAGE BINAIRE. JAL GCONS2 < ERREUR. CPI 9 < EST-CE DE 0 A 9 ??? JLE GCONSA < OUI. ADRI -"A"+"9"+1,A < NON, SUITE DECODAGE. CPI 9 JL GCONS2 < ERREUR DE SYNTAXE. GCONSA: EQU $ CPI NCONST-1 < VALIDATION DU NOM ??? JG GCONS2 < ERREUR, N'EXISTE PAS... PSR W < SAVE C@CONSTANTE RESULTAT. LR A,W LAD CONST0 ADR B,W < PRISE EN COMPTE DES MODES < LOCAUX (B=0), ET GLOBAUX (B#0). ADR A,W < W=@CONSTANTE ARGUMENT. LB 0,W < B=VALEUR DE @L. PLR W < RESTAURE L'@CONSTANTE. JMP GCONS4 < VERS L'ACCES A L'OPERATEUR... PAGE < < < 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 CDESC < A=@RELATIVE DESCRIPT. COURANT. AD 10,W < ABSOLUTISATION PAR SLOESC. LR A,C < C=@ABSOLU DESCRIPTEUR COURANT. LA ADCTVI LR A,W < W=@DCTVISU. < < VALIDATIONS DE L'APPEL : < LA SIT,W SWBR A,A JAGE $ < ON N'EST PAS EN ATTENTE D'IT !!! LRM A WORD JF)ETANXT CP RX,W JNE $ < ON N'EST PAS EN ATTENTE D'UNE ENTREE !!! < < 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",XWOR%,,XWOR% RLSE SIT,W < ET ON SIMULE UNE PSEUDO-IT VIS. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LAD SIT,W < A=ADRESSE DU 'SIT' D'INTERRUPTION, ET SVC SVCM1 < SIMULATION D'UNE PSEUDO-INTERRUPTION < SUR LA VISU... XWOR%: VAL 0 SEND1: EQU $ RSR < ET C'EST TOUT... PAGE < < < S I M U L A T I O N ! A S S I G N : < < ASSGN: EQU $ LXI 1 BSR ATEOT < EOT DERRIERE ??? JNE GCONSH < NON, ERREUR... BSR AASIGN < ENTREE DES ASSIGNATIONS < NVP --> NSP VISU. BR AMAJIE < ET C'EST TOUT. < < < E N T R E E D E S N V P --> N S P : < < ASSIGN: EQU $ PSR X,C LAD BUF SBT 0 STA ABUF < POUR LA 1ERE FOIS !?!?!??! LXI 0 < X=1ER NVP A TESTER. EXPL1: EQU $ LA &ADESC < DESCRIPTEUR DU NVP COURANT (X). JAE EXPL4 < NON ASSIGNABLE (=0). < < CAS D'UN NVP ASSIGNABLE : < PSR X LR A,B < SAVE L'@ DESCRIPTEUR, AINSI < QUE L'ETAT VALIDE (BIT0). RBT 0 LR A,C < C=@DESCRIPTEUR DU NVP=(X). EXPL5: EQU $ LAD NOMVIS BSR APRINT < ENVOI DU NVP. LA AMVIS BSR APRINT < ENVOI INVITATION. CPZR B < LE NVP EST-IL DEJA ASSIGNE ??? JG EXPL6 < DEJA ASSIGNE (>0). < < CAS D'UN NVP NON ASSIGNE : < LAD DEM1C SVC 0 < ENTREE NUMERO VISU. LXI 0 < INDEX CARACTERE ENTRE. < < REPONSES RECONNUES : < EOT,R/C NE PAS TOUCHER A CE NVP, < NUMERO DE 1 A.. ASSIGNER CE NVP A LA VISU < DONT LE NUMERO EST DONNE. < BSR ATEOT < NVP A NE PAS INITIALISER ??? JE EXPL2 < R/C IDEM A 'EOT'... ADRI -'30+NSPVI1-1,A < DECODAGE BINAIRE. CPI NSPVI1 < VALIDATION... JL EXPL3 < ERREUR... CPI NSPVIN < VALIDATION... JG EXPL3 < ERREUR... STA NSPVIS < OK, SAVE LE NSP DE CETTE VISU. SBT 0 < BIT0=1 : ACCES @DCT PAR NSP, WORD '1E15 < B=@DCT VISU. STB ADCTVI < SAVE L'@DCT DE CETTE VISU. LR C,A < A=@DESCRIPTEUR, AVEC BIT0=0. PLR X < RESTAURE X=NVP-1. STA &ADESC < AUTORISATION DE CE NVP. STZ MODE IC MODE < MODE=1 : NVP=.... STZ NOMIT < AFIN DE FORCER UNE REDEMANDE < DU NOM D'ITEM ASSOCIE; CECI < EST TRES UTILE A LA SUITE < DES ALT-MODES; EN DECONNECTANT < UN NVP DE SON NSP, ET EN LE < RECONNECTANT TOUT DE SUITE, < ON REINITIALISERA TOUT LE < CONTEXTE DE CE NVP... EXPL4: EQU $ ADRI 1,X < NVP SUIVANT... LR X,A CPI NVPMAX+1 < EXISTE-T'IL ??? JL EXPL1 < OUI... PLR X,C RSR < ET C'EST TOUT... < < CAS DES NVP INTOUCHES : < EXPL2: EQU $ PLR X < RESTAURE LE NVP, JMP EXPL4 < ET AU PRECEDENT... < < CAS DES FAUTES DE SYNTAXE : < EXPL3: EQU $ LAD MERR BSR APRINT JMP EXPL5 < ET NOUVEL ESSAI !!! < < CAS D'UN NVP DEJA ASSIGNE : < EXPL6: EQU $ LA NSPVIS < A=NSP DE LA VISU REELLE. ADRI '30-NSPVI1+1,A < CONVERSION EN UN NUMERO. SBT 7 < OCTET0(A)=LONGUEUR DU < MESSAGE=1. STA BUF LAD BUF BSR APRINT < EDITION DE LA VISU ASSOCIEE < AU NVP COURANT. CPZ MODE < !ASSIGN OU SIMULATION ??? JNE EXPL7 < OK, SIMULATION... LA AMMODE < ET NON, !ASSIGN, BSR APRINT JMP EXPL2 < ON NE PEUT FAIRE '-' !!! EXPL7: EQU $ LAD MINTER BSR APRINT < ENVOI D'UNE INVITATION. LAD DEM1C SVC 0 < ENTREE DE LA REPONSE. LXI 0 < INDEX CARACTERE ENTRE. < < REPONSES RECONNUES : < EOT,R/C NE PAS TOUCHER A CETTE ASSIGNATION, < - FAIRE LA DESASSIGNATION. < BSR ATEOT < ??? JE EXPL2 < RIEN A FAIRE... CPI "-" JNE EXPL7 < ERREUR, ON REDEMANDE !!! < < DESASSIGNATION : < SBT 0+NBITMO < BIT0(B)=1. PLR X < RESTAURE LE NVP+1. STB &ADESC < INVALIDATION DU CONTEXTE. STZ NSPVIS < AFIN DE PERMETTRE L'EXPLORA- STZ ADCTVI < TION DE TASSGNE RELATIVE A CE NVP. JMP EXPL1 < ON VA RETRAITER CE NVP; AINSU < ON PEUT TOUT DE SUITE LE REAS- < SIGNER !!! PAGE < < < P A R C O U R S D E T A S S G N : < < EXTAS: EQU $ LA BEXTAS WORD '1EC5 < EXECUTION MAITRE DE 'MEXTAS'. RSR < < ROUTINE MAITRE DE PARCOURS DE TASSGN : < WORD LOC+'80 < @RELATIVE DU LOCAL. MEXTAS: EQU $ LRP L LA -1,L < A=@RELATIVE LOCAL. AD 10,W < ABSOLUTISATION PAR SLOESC. LR A,L < L=@ABSOLUE LOCAL. LA ADESC < A=RELAI RELATIF DESCRIPTEURS. AD 10,W < ABSOLUTISATION PAR SLOESC. STA MDESC < RELAI ABSOLU DES DESCRIPTEURS. LYI NVPMAX+1 < Y=1ER NVP INEXISTANT. LXI 0 < X=1ER NVP A TESTER. < < BOUCLE DE RECUPERATION DES NVP : < MEXT1: EQU $ LA &MDESC < A=@DESCRIPTEUR ASSOCIE < AU NVP=(X). JAE MEXT2 < CAS DES NVP A NE PAS TESTER. JAL MEXT5 < NVP NON ASSIGNE... PSR A,C AD 10,W < ABSOLUTISATION DE L'@DESCRIPTEUR. LR A,C < C=@ABSOLUE DESCRIPTEUR. CPZ NSPVIS < LE NVP COURANT N'AURAIT-IL < PAS ETE L'OBJET D'UNE < SIMULATION D'ASSIGNATION ??? PLR A,C JNE MEXT2 < OUI, NSPVIS#0, DONC ON < NE RETESTE PAS CE NVP !!! MEXT5: EQU $ SBT 0 < INVALIDATION A PRIORI. STA &MDESC RBT 0 < A=@RELATIVE DU DESCRIPTEUR. AD 10,W < ABSOLUTISATION PAR SLOESC. LR A,B < B=@ABSOLUE DESCIPTEUR. LBY &TASSGN,W < A=NSP ASSIGNE AU NVP=(X). MEXT4: EQU $ JAE MEXT2 < INTERESSANT. CPI 2 < TEST DES !ASSIGN NVP=I/O ??? JG MEXT3 < NON. PSR X < OUI, SAVE LE NVP COURANT. LR A,X < POUR ACCES AUX NVP=1/2. LBY &TASSGN,W < ACCES AU NSP ASSIGNE AU < NVP=1/2. PLR X < RESTAURE LE NVP COURANT. JMP MEXT4 < ET ON RECOMMENCE. MEXT3: EQU $ CPI NSPVI1 JL MEXT2 < ININTERESSANT. CPI NSPVIN JG MEXT2 < ININTERESSANT. PSR X,L LR A,X < X=NSP ASSIGNE AU NVP. BSR ACADCT,C < RENVOIE : A=L=@DCT(X=NSP). XR B,C < C=@DESCRIPTEUR, B=@COMMON CMS4. STA ADCTVI < SAVE L'@DCT VISU, STX NSPVIS < SAVE LE NSP DE CETTE VISU. STZ MODE < MODE=0 : !ASSIGN... XR B,C < C=@COMMON CMS4, B=@DESCRIPTEUR. PLR X,L LR B,A < A=@ABSOLUE DU DESCRIPTEUR. SB 10,W < RELATIVISATION DE (A). STA &MDESC < AUTORISATION DU DESCRIPTEUR. MEXT2: EQU $ ADRI 1,X < AU NVP SUIVANT. CPR X,Y < EXISTE-T'IL ??? JNE MEXT1 < OK, ALLONS-Y... RSR < ET NON, ON S'EN VA... PAGE PROG P2 DST P1 < < < C O D A G E < N O M > E N < N O M C > : < < < FONCTION : < CETTE ROUTINE CODE SUR 6 CARACTERES < <NOMC> LES 'N' CARACTERES <NOM> < D'UN NOEUD. < CECI EST FAIT SUIVANT UN SUPERBE < ALGORITHME DE COMPACTAGE PAS MAL < UNIVOQUE ... < < < ARGUMENT : < C=@DESCRIPTEUR ASSOCIE AU NVP COURANT. < < < RESULTAT : < X=0 (OK). < < CODAGE: EQU $ STZ VIEG IC VIEG < A CHAQUE (RE-)DEFINITION < D'ITEM, ON (RE-)INITIALISE < VIEG SUR LE 2EME CARACTERE < DE L'ITEM, AFIN DE SAUTER < LA DEFINITION DU CARACTER < DE FIN DE MESSAGE ASSOCIE A < CET ITEM. < < INITIALISATION DES CONSTANTES : < LAD CONST0-1 SBT 0 STA AWORK < RELAI D'ACCES A LA LISTE < DES CONSTANTES. LXI NCONST < X=INDEX D'ACCES. RZCONS: EQU $ STZ &AWORK < RAZ DES CONSTANTES. ADRI -1,X LR X,A CPI NCONSG < EST-ON ARRIVE AUX CONSTANTES < GLOBALES ??? JG RZCONS < NON, ON CONTINUE... STZ CCONST < CCONST <-- 0. < < INITIALISATION PILE DE RECURSIVITE : < LAD PIR STA BPR < BASE DE PIR, SBT 0 STA APRC < RELAI COURANT PIR, LAD PIR+XPR STA TPR < TOP DE PIR. LXI XPR RZPIR: EQU $ ADRI -1,X < ENTREE PRECEDENTE. STZ &APRC < RAZ PILE DE RECURSIVITE. CPZR X JG RZPIR < AU MOT PRECEDENT... < < SUPPRESSION DE L'ITEM RESIDENT : < AINSI, ON PEUT MODIFIER UN ITEM < AU COURS D'UNE SESSION DE 'MASK', < ET PRENDRE EN COMPTE SA NOUVELLE < VERSION APRES UN !GO... < STZ &ANIT0 < POUR FORCER UN RECHARGEMENT... < < INITIALISATION DU CODEUR : < LAD NOMIT < A=@NOMIT COURANT. SBT 0 < BIT D'INDEX. STA ANOMC < GENERATION D'UN RELAI TEMPORAIRE < VERS LE NOM CODE COURANT. STZ F3 < RAZ DE LA FONCTION F3. LYI 3 < 2*3 CARACTERES A METTRE A BLANC. LXI 0 < INDEX DE MISE A BLANC. LAI '20 SBT 2 < A='SPACE''SPACE'. ETI1: EQU $ STA &ANOMC < MISE DE <NOMC> A 'SPACE'. ADRI 1,X < INDEX DE RAZ. CPR X,Y JNE ETI1 < NEXT... LYI -1 < Y=LONGUEUR COURANTE. < =F1=LONGUEUR DU MOT ENTRE. LBI 0 < B=F2. < < UTILISATION DES REGISTRES : < < B=F2=EOR(K(I)) : EOR SUR TOUS LES < CARACTERES DE K(4) A K(L). < F2=EOR(K(4),K(5),...,K(L)) , < Y=LONGUEUR COURANTE DU NOM , < =F1=LONGUEUR COURANTE DU MOT ENTRE (NBRE DE < CARACTERES NON COMPRIS 'EOT') , < F3=CF. F2 , MAIS A CHAQUE EOR , LE < RESULTAT INTERMEDIAIRE EST DECALE < CIRCULAIREMENT. < < < RECUPERATION DES 3 PREMIERS CARACTERES : < BSR AGTCAR < A=K(1). JE ETI2 < MOT VIDE, C'EST FINI. STBY &ANOMC < STORE : C(1)=K(1). BSR AGTCAR < A=K(2). JE ETI2 < LE MOT N'A QU'UNE LETTRE. STBY &ANOMC < C(2)=K(2). BSR AGTCAR < A=K(3). JE ETI2 < LE MOT N'A QUE 2 LETTRES. STBY &ANOMC < C(3)=K(3). < < CODAGE DES CARACTERES K(4),...,K(L) : < ETI3: EQU $ BSR AGTCAR < A=K(I) , I=4,...,L. < (L DESIGNANT LA LONGUER DU < MOT A CODER). JE ETI4 < ARRET DU CODAGE SUR 'EOT'. ADR Y,A < LE CARACTERE COURANT (A) EST < PONDERE PAR SA POSITION (X). < DANS LE MOT. < K(I)=K(I)+I. EORR A,B < CALCUL DE F2 : < F2=EOR(F2,K(I)). ADR A,B < F2=F2+K(I). EOR F3 < CALCUL DE F3 : < A=EOR(F3,K(I)). SCLS 1 < DECALAGE CIRCULAIRE. STA F3 < F3=SCLS(EOR(F3,K(I)),1). JMP ETI3 < CODAGE DU CARACTERE SUIVANT. < < MISE SOUS FORME ASCI DES FONCTIONS F2 & F3 : < ETI4: EQU $ LBY F3 < A=OCTET0(F3). AD F3 < A=F3+OCTET0(F3). ANDI '7F < A=OCTET0(F3)+OCTET1(F3). < (SUR 7 BITS). CPI "Z" JLE ETI5 ADRI -'30,A < F3 EST MIS SOUS LA FORME D'UN < CODE INFERIEUR AU 'Z'. ETI5: EQU $ CPI " " JG ETI6 ADRI '30,A < F3 EST DONC ENTRE LE 'Z' < (COMPRIS) ET LE 'SPACE' (NON < COMPRIS). ETI6: EQU $ < ON A ICI : < A=F3=CARACTERE ASCI DE '!' (='21) A 'Z' (='5A) ; < L'AMBIGUITE EST DONC POUR F3 DE '5A-'21. XR A,B < B=F3 , A=F2 A METTRE EN FORME. ANDI '7F < MISE SUR 7 BITS. CPI "Z" JLE ETI7 ADRI -'30,A < ON RAMENE F2 A UN CODE INFERIEUR < A CELUI DU 'Z'. ETI7: EQU $ CPI "0" JGE ETI8 ADRI '20,A < ON TENTE DE RAMENER F2 APRES < LE CODE DU '0' (ZERO). JMP ETI7 < POURSUIVONS LA TENTATIVE... ETI8: EQU $ < ON A ICI : < A=F2=CARACTERE ASCI ALLANT DU '0' (COMPRIS) < AU 'Z' (COMPRIS) ; L'AMBIGUITE DE F2 EST DONC < DE '30-'5A : < AMBIGUITE(F2)<AMBIGUITE(F3). SWBR A,A ORR B,A < A=F2.F3. STA NOMIT+2 < STORE : C(5)=F2, C(6)=F3. < < CODAGE DE LA LONGUEUR DU MOT : < ETI2: EQU $ < ON A ICI : < Y=LONGUEUR DU MOT ENTRE (NON COMPRIS 'EOT'). LR Y,A ADRI '30,A < ON MET LA LONGUEUR SOUS FORME < D'UN CARACTERE ASCI QUI NOUS < DONNE F1 DONT L'AMBIGUITE EST < DE '30-.... , MAIS INFERIEUR A < CELLE DE F2 , ET DONC A CELLE < DE F3 A FORTIORI. LXI 3 < INDEX DE C(4). STBY &ANOMC < STORE : C(4)=F1. LXI 6 < INDEX DE C(7). LAI '04 < 'EON' DE FIN DE NOM CODE. STBY &ANOMC < STORE : C(7)='EON'. LXI 0 < RETOUR OK. RSR PAGE < < < A C C E S A U N C A R A C T E R E : < < < FONCTION : < CETTE ROUTINE FAIT PROGRESSER L'INDEX < CARACTERE COURANT (X) , LA LONGUEUR COURANTE < DU MOT (X) ET ACCEDE LE CARACTERE COURANT , < APRES INCREMENTATION DE X ; ENFIN < ELLE DIT SI LE CARACTERE ACCEDE EST < OU N'EST PAS 'EOT'. < < < NOTA : < UNE REPONSE EQUIVALENTE EST DONNEE < DANS LE CAS OU LA LONGUEUR COURANTE < ATTEINTE EST LA LONGUEUR MAX QUE < PEUT ATTEINDRE UN <NOM>. < < GTCAR: EQU $ ADRI 1,Y < PROGRESSION LONGUEUR SUIVANTE. LR Y,X ADRI 2,X < X=INDEX CARACTERE DANS 'BUF'. BSR ATEOT < ACCES CARACTERE COURANT, ET < TEST DE FIN DE MESSAGE... LR Y,X < POUR LE STOCKAGE DES 3 < PREMIERS CARACTERES. RSR PAGE < < < 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. DEMGEN: WORD '8402 < DEMANDE DE STORE AU SGN. WORD NTASK-ZERO*2 WORD LONGR*2 WORD 6 PILE1: DZS 10 PROG WORD LOC2+'80 GENERE: EQU $ LRP L LA -1,L LR A,L LAD PILE1-1 LR A,K GEN1: EQU $ LAD DEMGEN 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