IDP "CALL - RELEASE 15/04/1982"
IDP "JOHN F. COLONNA"
EOT #SIP DEFINITION CMS5#
NMPROC: VAL "XX" < ????!!! (A CAUSE DE #CTE ITEM#)
EOT #SIP DEFINITION ITEM#
NOCMO:: VAL 2 < NOMBRE D'OCTETS PAR MOT.
IDP "VERSION SOLAR SOUS CMS5"
<
<
< P R O C E S S E U R D E C A L L
< D ' A P P E L D E P R O C E S S E U R S :
<
<
< FONCTION :
< CE PROCESSEUR EST UN PROCESSEUR DE BASE DE
< CMS5 . IL EST PAPPELE PAR LE CCI.
< IL IDENTIFIE LE PROCESSEUR DEMANDE
< PAR L'UTILISATEUR , ET EVENTUELLEMENT
< UN NUMERO DE COMPTE SI NECESSAIRE.
< IL RECUPERE LA TAILLE REELLE DU PROCESSEUR
< FAIT UNE DEMANDE D'ALLOCATION MEMOIRE ,
< DEMANDE LE CHARGEMENT A MSP , ET
< ENFIN LUI PASSE LA MAIN.
<
<
< FORMAT D'UN PROCESSEUR :
< SLO A SLO+'E : RESERVES POUR LE CHRAGEMENT ,
< SLO+'F : TAILLE EN OCTETS DU PROCESSEUR ,
< A T T E N T I O N : SI CETTE TAILLE EST
< NEGATIVE, ALORS LA TAILLE RELLE UTILISEE
< EST SA VALEUR ABSOLUE, A LAQUELLE ON
< AJOUTE 2K MOTS...
< SLO+'10 : P TRANSLATABLE DE LANCEMENT DU
< PROCESSEUR.
< LA PARTIE CHARGEE VA DE SLO+'F A ......
<
<
PROG
ZERO: EQU $
DZS 2 < POUR L'INTEGRITE DE CALLP
< LORS DE SON RUN PAR CCI.
<
< PILE DU PROCESSEUR CALLP :
<
PILCAL: DZS 5 < LA PILE DOIT ETRE AVANT LE
< BIAS , SINON GARE AU CHARGEMENT.
CALCCI: WORD '0001 < APPEL AUU CCI APRES LE LOAD.
LOAD: EQU $
<
<
< E N T R Y D E C H A R G E M E N T :
<
<
< ON A ICI :
< A=@TABLE DES ARGUMENTS DE CHARGEMENT POUR MSP.
SVC 0 < CHARGEMENT.
AJNE: JNE $ < S'IL Y A ERREUR , C'EST QUE
< LE PROCESSEUR A ETE DELETE
< ENTRE LE MOMENT DE LA RECUPERATION
< DE SA TAILLE , ET MAINTENANT ;
< ON FAIT UN 'JMP $' DONT ON SORTIRA P
< PAR UN 'ALT-MODE'.
LAI CALCCI-ZERO
SVC 0 < D E B U G FACULTATIF DU
< PROCESSEUR AVANT SON ENTRY.
LJE:: VAL $-AJNE < AMPLITUDE DU SAUT...
RSR < DEPILEMENT DU P TRANSLATABLE
< DE LANCEMENT DU PROCESSEUR.
< ET RUN ......
X2: VAL $-ZERO
X2: VAL '0F-X2 < NBRE DE MOTS A RAZER POUR
< ARRIVER AU 'BUAS'.
DZS X2
<
<
< 1 E R E A D R E S S E D E C H A R G E M E N T :
<
<
BIAS: EQU $
WORD LCALLP+'80 < @DU LOCAL DE CALLP.
<
<
< E N T R Y D E C A L L P P O U R C C I :
<
<
DEBUT: EQU $+2
LRP L
LA -1,L
LR A,L < L=@LOCAL DE CALLP.
WORD '8580 < BRANCHEMENT AUX INITIALISATIONS.
PAGE
<
<
< L O C A L D E C A L L P :
<
TABLE
COMAND: DZS LCCI/NOCMO < MEMORISATION DE LA COMMANDE D'APPEL
< DE "!CALL"...
BYTE '04;0 < POUR LE TRANSFERT VERS LA ZONE DE
< CODAGE DES NOMS D'ITEMS...
LOCAL
LCALLP: EQU $
WORD CALLP < @DE DEBUT DE CALLP.
DZS 10 < POUR IMPLANTER LA FIN DES
< NOMS DES PROCESSEURS A
< CHARGER.
VALEUR: DZS 2 < DESTINE A CONTENIR LA TAILLE
< OCTETS REELLE DU PROCESSEUR.
< ET SON P DE LANCEMENT.
X1: VAL VALEUR-BIAS < DEPLACEMENT OCTET DU BIAS AUX
< 2 MOTS DE VALEUR.
ACALLP: WORD CALLP < ENTRY POINT DE !CALL POUR LES
< ALT-MODES.
ALOAD: WORD LOAD < @ DU MODULE EXECUTANT LE
< CHARGEMENT DU PROCESSEUR PAR
< MSP , ET LE LANCEMENT DU PRO-
< CESSEUR.
ABIAS: WORD BIAS < BIAS DE CHARGEMENT DU PROCESSEUR.
AXBIAS: WORD BIAS,X < POUR LE MODE 'Q' AUTOMATIQUE.
ACCCI: WORD CALCCI < ADRESSE DE L'ARGUMENT DU 'SVC' SUIVANT
< LE CHARGEMENT DU PROCESSEUR.
APIL: WORD PILCAL < @PILE DU PROCESSEUR.
APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE.
<
< CONSTANTES :
<
T800: WORD '800 < '800 OCTETS,
T1000: WORD '1000 < '1000 OCTETS (2K MOTS).
KIN: WORD -1 < COMPTAGE DES RE-ENTREES...
<
< MESSAGES :
<
M1: BYTE '0D;'0A
ASCI " LOAD AND RUN "
M2: BYTE '0D;'0A
ASCI "MODE= "
M3: BYTE '0D;'0A
ASCI "ACN="
M4: BYTE '0D;'0A
ASCI "NOM="
M5: BYTE '07;"?"
BYTE '0D;'0A
HELP: BYTE '6D;" "
ASCI "F=FICHIER DE COMMANDE,"
BYTE '6D;" "
ASCI "P=PRIVE,"
BYTE '6D;" "
ASCI "Q=SYSTEME,"
BYTE '6D;" "
ASCI "R=ACN,"
BYTE '6D;" "
ASCI "S=CCI."
LHELP:: VAL $-HELP*NOCMO
<
< DEMANDES A CMS4 :
<
DEMH: WORD '0202 < EMISSION DU MESSAGE HELP.
WORD HELP-ZERO*NOCMO
WORD LHELP
MESGI: WORD '0101 < LECTURE AVEC ECHO SUR IN.
WORD 0 < @OCTET DU MESSAGE.
WORD 0 < COMPTE OCTETS.
MESGO: WORD '0202 < ECRITURE SUR OUT.
WORD 0 < @OCTETS DU MESSAGE.
WORD 0 < COMPTE OCTETS.
CCI: WORD '0001 < RETOUR AU CCI.
MEM: WORD '0004 < DEMANDE D'ALLOCATION MEMOIRE.
WORD 0
WORD 0 < TAILLE OCTETS DEMANDEE.
DEMLV: WORD '0002 < DEMANDE AU SYSTEME DE GESTION
< DES NOMS.
WORD BIAS-ZERO*NOCMO < @OCTETS DU NOM ET DE LA VALEUR.
WORD 0 < COMPTE OCTETS.
WORD 0 < DEPLACEMENT DE LA VALEUR
< PAR RAPPORT A L'ORIGINE DU NOM.
DEMOUT: WORD '0202 < DEMANDE D'EMISSION MESSAGES.
WORD 0
WORD 0
DEMTS: WORD '010A < POUR DISCRIMINER BATCH ET TS.
WORD 0
WORD 1
LCOM:: VAL LBUFES*NOCMO < LONGUEUR DES COMMANDES.
LEOT:: VAL 1+1 < EN EFFET LE FICHIER DE COMMANDE EST
< ENCADRE PAR UN LIMITEUR, CE QUI FAIT
< DONC 1+1 CARACTERES EN PLUS...
DEMCOM: WORD '0008 < RECUPERATION DE LA COMMANDE D'APPEL.
WORD COMAND-ZERO*NOCMO
WORD LCCI
WORD 0 < (PAS DE 'ZDC'...)
<
<
< 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 LCOM+LEOT/NOCMO
COMMON
KOM: EQU $
<
< MESSAGE COURANT :
<
ABUF: WORD 0 < RELAI RELATIF MESSAGE COURANT.
ABUFX: WORD BUF,X < POUR LE TRANSFERT DES NOMS D'ITEMS.
ABUFA: WORD 0 < RELAI ABSOLU MESSAGE COURANT.
XBUF: WORD 0 < INDEX COURANT MESSAGE COURANT.
ACOMAN: WORD COMAND,X < ANALYSE DE LA COMMANDE D'APPEL...
BUF: DZS LCOM/NOCMO
BYTE '04;0 < PAR PRUDENCE : CAS DES
< MESSAGES SANS 'EOT'.
MITEM: BYTE 6;" "
ASCI "ITEM="
MERRC: BYTE 13;'6D
ASCI "ERREUR CCI !"
NOMIT: DZS LNITEM
<
< RELAIS DIVERS :
<
ATEOT: WORD TEOT < TEST FIN DE MESSAGE.
AGTCAR: WORD GTCAR < ACCES CARACTERE POUR LES
< CODAGES DE NOMS D'ITEM.
ACOD: WORD CODAGE < CODAGE DES NOMS D'ITEM.
ANIT0: WORD NITEM+0
ANIT1: WORD NITEM+1
ANIT2: WORD NITEM+2
ANITEM: EQU ANIT0 < RELAI VERS LE NOM DE
< L'ITEM COURANT.
LIMIT: WORD 0 < CONTIENT EN TEMPORAIRE
< LE CARACTERE COURANT DE FIN DE
< MESSAGE EQUIVALENT A 'EOT'
< POUR CHAQUE ITEM.
C10: WORD 10
CFFF: WORD '0FFF < RAZ DES BITS 0 A 3.
F3: WORD 0 < FONCTION DE CODAGE NOMIT.
KCAR: WORD 0 < COMPTEUR DES CARACTERES MESSAGES.
<
< DEMANDES A CMS4 :
<
CCINT: WORD '0002 < APPEL CCI NON INTERACTIF.
WORD BUF-ZERO*NOCMO < SUR LE MESSAGE COURANT.
WORD LCOM
DEMIN: WORD '0101 < LECTURE ASCI AVEC ECHO.
WORD BUF-ZERO*NOCMO
WORD LCCI
<
< 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 LCOM+LEOT < NBRE D'OCTETS D'UN ITEM.
DEMSGN: WORD '8502 < ACCES A UN ITEM.
WORD NITEM-ZERO*NOCMO
WORD LTN*NOCMO+LCOM+LEOT
WORD -1
PAGE
<
<
< P R O C E S S E U R D E C A L L :
<
<
PROG
CALLP: EQU $
LRM C,L,K
WORD KOM+128
WORD LCALLP+128
WORD PILCAL
LA ACALLP
WORD '1EB5 < POSITIONNEMENT DU PRESC SUR
< L'ENTRY POINT DE !CALL.
IC KIN < PREMIERE ENTREE ???
JG CALLP1 < NON...
<
< CAS DE LA PREMIERE ENTREE :
<
LAD DEMCOM
SVC 0 < RECUPERATION DE LA COMMANDE D'APPEL :
LXI 0
LBY &ACOMAN < (A)=PREMIER CARACTERE :
CPI "!" < VALIDATION...
JNE $ < ???!?!???!
ADRI 1,X
LBY &ACOMAN < (A)=DEUXIEME CARACTERE :
CPI "C" < VALIDATION...
JNE $ < ??!??!
ADRI 1,X
LBY &ACOMAN < (A)=TROISIEME CARACTERE :
CPI "." < EST-CE LA COMMANDE ABREGEE "!C." ???
JNE CALLP1 < NON...
<
< CAS DE LA COMMANDE ABREGEE "!C.,
< ELLE VA PROVOQUER UN MODE "F"
< AUTOMATIQUE :
<
LYI 0 < (Y)=INDEX DE 'BUF',
< (X)=INDEX DE 'COMAND'.
CALLP3: EQU $
ADRI 1,X
LBY &ACOMAN < TRANSFERT DU
CPI '0D
JNE CALLP4
LAI '04 < TOUT 'R/C' EST TRANSFORME EN 'EOT'...
CALLP4: EQU $
XR X,Y
STBY &ABUFX < NOM D'ITEM...
ADRI 1,X
XR X,Y
CPI '04 < EST-CE FINI ???
JNE CALLP3 < NON, AU CARACTERE SUIVANT...
CALLP2: EQU $
JMP FCAUTO < VERS LE CODAGE DU NOM DE L'ITEM...
<
< CAS DES APPELS NORMAUX :
<
CALLP1: EQU $
<
< ENVOI D'UN MESSAGE D'INTRODUCTION :
<
LBI 23 < 23 OCTETS DE LONG.
LAD M1 < @MOT DU MESSAGE D'INTODUCTION.
<
< BOUCLE D'INTERROGATION :
<
E1: EQU $
SLLS 1 < A=@OCTET DU MESSAGE A ENVOYER.
STA MESGO+1 < MISE EN PLACE @OCTETS MESSAGE.
STB MESGO+2 < MISE EN PLACE COMPTE OCTETS.
E1X1: EQU $
LAD MESGO
SVC 0 < ENVOI DU MESSAGE A L'UTILISATEUR.
<
< LECTURE DU MODE DEMANDE PAR L'UTILISATEUR :
<
LA ABIAS < A=@MOT OU METTRE LA REPONSE.
SLLS 1 < CONVERSION OCTETS.
STA MESGI+1
STA DEMLV+1 < MISE EN PLACE DE L'@OCTET BIAS.
LAI 1 < DEMANDE 1 OCTETS.
STA MESGI+2
LAD MESGI
SVC 0 < LECTURE DU MODE.
<
< ANALYSE DE LA REPONSE :
<
< LISTE DES REPONSES POSSIBLES :
< ? : ENVOI DU MESSAGE HELP DES MODES,
< - F : APPEL D'UN FICHIER DE COMMANDE,
< - P : MODE PRIVE : ACN=ACN CONTENU DANS LA DCT ,
< - Q : ACCES A UN NOM SYSTEME ,
< - R : ACCES A UN NOM SOUS UN AUTRE ACN ,
< - S : RETOUR AU CCI.
<
LBY &ABIAS < A=REPONSE.
CPI "?" < EST-CE LE HELP ???
JNE E1X2 < NON...
LAD DEMH < OUI,
SVC 0 < ON L'ENVOIE...
JMP E1X1 < ET ON RE-INTERROGE...
E1X2: EQU $
CPI "F" < EST-CE UN FICHIER DE COMMANDE ???
JE FC1 < OUI...
ADRI -'50,A < TRANSLATION.
JAL E2 < ERREUR : CARACTERE NON RECONNU.
CPI 3
JG E2 < ERREUR : CARACTERE NON RECONNU.
JE E3 < A=3 : DEMANDE DE RETOUR AU CCI.
<
< CAS D'UNE COMMANDE RECONNUE :
<
ADRI 5,A < A=NVP D'ACCES AU NOM :
< NVP=5 : ACCES A HDLLON ,
< NVP=6 : ACCES A HDLLNS ,
< NVP=7 : ACCES A HDLLNU.
SBT 8 < AFIN DE FAIRE UN APPEL IMPLICITE
< AUX ASSIGNATIONS SYSTEME.
STBY DEMLV < MISE EN PLACE DU NVP DANS DEMLV.
RBT 8 < RESTAURE A=NVP DEMANDE.
LYI 6 < POUR MISE EN PL,ACE DE COMPTE
< OCTETS.
LBI 0 < B=0 A PRIORI.
CPI 7
JNE E4 < DANS LES CAS NVP=5/6 , LE NUMERO
< DE COMPTE EST CONNU : C'EST
< CELUI DU DEMANDEUR , OU :SYS.
<
< CAS NVP=7 : IL FAUT DEMANDER L'ACN DESIRE :
<
LBI 5 < B=5=DEPLACEMENT DU NOM A
< LA SUITE DE L'ACN.
STB MESGI+2 < C'EST AUSSI LA LONGUEUR DE
< L'ACN A LIRE.
LAD M3
SLLS 1
STA MESGO+1 < MISE EN PLACE @OCTETS D'UN MESSAGE
< DE DEMANDE ACN.
STY MESGO+2 < Y=6=LONGUEUR DU MESSAGE.
LAD MESGO
SVC 0 < ENVOI MESSAGE 'ACN='.
LAD MESGI
SVC 0 < LECTURE DE L'ACN : ON DEMANDE
< 5 OCTETS LE DERNIER DOIT
< ETRE UN EOT , SOUS PEINE
< DE RETOUR EN ERREUR , TANT
< PIS POUR LE DEMANDEUR.
<
< DEMANDE DU NOM DU PROCESSEUR :
<
E4: EQU $
< ON A ICI :
< Y=6 ,
< B=0 SI ACN NON DEMANDE ,
< =5 SI ACN DEMANDE.
LA MESGI+1 < @OCTET DU MESSAGE ENTRE.
ADR B,A < TRANSLATION EVENTUELLE SUIVANT
< QU'IL Y A OU PAS UN ACN.
STA MESGI+1
LAI 20
STA MESGI+2 < MISE EN PLACE DE LA LONGUEUR
< MAX DU NOM DU PROCESSEUR.
LAD M4
SLLS 1
STA MESGO+1 < @OCTET DU MESSAGE DE DEMANDE
< DU NOM.
STY MESGO+2 < LONGUEUR DU MESSAGE D'INVITATION.
LAD MESGO
SVC 0 < ENVOI DU MESSAGE : 'NOM='.
<
< LECTURE DU NOM DU PROCESSEUR :
<
LAD MESGI
SVC 0 < LECTURE DU NOM : CELUI CI DOIT
< SE TERMINER PAR 'EOT' SOUS
< PEINE DE RETOUR EN ERREEUR.
< NOTA :
< ON A MAINTENANT A PARTIR DE 'BIAS' ,
< LE NOM DU PROCESSEUR DESIRE , AVEC
< EVENTUELLEMENT DEVANT LE NUMERO
< DE COMPTE.
<
LAI 1 < (A)=FONCTION D'APPEL DU 'CCI'...
PROCOT: EQU $ < POINT D'ENTREE MODE 'Q' IMPLICITE...
STA &ACCCI < DANS LE CAS D'UN APPEL EXPLICITE, ON
< DEVRA FAIRE "!GO" POUR ENTRER DANS LE
< PROCESSEUR...
LAI -1
WORD '1EB5 < INHIBITION DES ALT-MODES
< SOLITAIRES...
<
< ACCES A LA TAILLE REELLE DU PROCESSEUR :
<
LAI 2*X1+4 < COMPTE OCTETS=ZONE DE
< RANGEMENT DU NOM (+ACN) , PLUS
< 2 MOTS POUR LA TAILLE REELLE , ET
< LE P DE LANCEMENT.
STA DEMLV+2
LAI 2*X1 < DEPLACEMENT DE LA VALEUR PAR
< RAPPORT A L'ORIGINE DU NOM.
STA DEMLV+3
LAD DEMLV
SVC 0 < DEMANDE TAILLE REELLE.
JNE E2 < ERREUR : LE NOM N'EXISTE PAS , OU
< LE SGN N'A PAS ETE ASSIGNE ....
<
< CAS OU ON POSSEDE LA TAILLE REELLE
< DANS VALEUR ET LE P DE LANCEMENT
< DANS VALEUR+1 :
<
<
< DEMANDE D'ALLOCATION MEMOIRE :
<
LA VALEUR < A=TAILLE OCTETS REELLE DU
< PROCESSEUR.
LYI 0 < Y=CONSTANTE ADDITIVE NULLE A PRIORI.
JAGE EE12 < OK, TAILLE>=0.
NGR A,A < NON, A=VALEUR ABSOLUE (TAILLE),
LY T1000 < ET Y=CONSTANTE ADDITIVE 2K MOTS.
EE12: EQU $
STA DEMLV+2 < NOUVEAU COMPTE OCTETS DE DEMLV.
ADR Y,A < TAILLE RELLE DU PROCESSEUR.
ADRI '10+'F+1*2,A < POUR PRENDRE EN COMPTE LES '10
< MOTS RESERVES DEVANT 'SLO' PAR
< LE SYSTEME, LES 'F MOTS RESERVES
< POUR !CALL, ET LE MOT INACCESSIBLE
< AUX E/S EN FIN D'ESPACE MEMOIRE.
JALE E2 < ERREUR DE TAILLE...
CP T800 < 1K MOT ???
JLE E5 < OUI, ON LES A DEJA...
LY T1000 < NON, ALLONS VOIR 2K, ET LA SUITE...
LXI 6 < 6 TAILLES SONT RECONNUES (2K,
< 4K, 6K, 8K, 10K ET 12K).
EE11: EQU $
CPR Y,A < LA TAILLE COURANTE SUFFIT-ELLE ???
JLE EE10 < OUI...
XR A,Y < NON,
AD T1000 < ON PASSE 2K AU DESSUS...
XR A,Y
JDX EE11 < AU SUIVANT,
JMP E2 < ERREUR, NON DISPONIBLE !!!
EE10: EQU $
STY MEM+2 < Y=TAILLE MEMOIRE NECESSAIRE.
LAD MEM
SVC 0 < DEMANDE D'ALLOCATION 2K OU 4K.
JE $+2 < OK.
ACTD < E R R E U R S Y S T E M E ....
E5: EQU $
<
< PREPARATION DU CHARGEMENT :
<
STZ DEMLV+3 < LA VALEUR (PROCESSEUR) COMMENCERA
< AU BIAS ET VA DONC RECOUVRIR
< LE NOM (+ACN).
LA VALEUR+1 < RECUPERATION DU P DE LANCEMENT.
PSR A < ET EMPILEMENT EN VUE DU RSR.
LAI DEBUT-ZERO
WORD '1EB5 < REINITIALISATION DU PRESC.
LAD DEMLV
BR ALOAD < VERS LE CHARGEMENT QUI EST
< IMPLANTE EN TETE A FIN QUE
< SON CODE NE SOIT PAS ECRASE
< LORS DU CHARGEMENT.
<
<
< E R R E U R S U T I L I S A T E U R :
<
<
E2: EQU $
LAD M5 < MESSAGE D'ERREUR.
SLLS 1
STA MESGO+1
LAI 4 < LONGUEUR DU MESSAGE D'ERREUR.
STA MESGO+2
LAD MESGO
SVC 0 < ENVOI D'UN MESSAGE D'ERREUR
< A L'UTILISATEUR.
LAD M2 < A=@MOT DU MESSAGE DE DEMANDE
< DU MODE , EN EFFET , ON
< RECOMMENCE L'INTERROGATION.
LBI 7 < B=7=LONGUEUR DU MESSAGE DE MODE.
JMP E1 < TRY AGAIN.
<
<
< S O R T I E D E C A L L P :
<
<
E3: EQU $
LAD CCI
SVC 0 < RETOUR AU CCI.
BR ACALLP < EN CAS D'UNE COMMANDE DE
< PROCEED.
PAGE
<
<
< F I C H I E R D E C O M M A N D E :
<
<
< FORMAT :
< ON TROUVE EN PREMIER CARACTERE DE
< L'ITEM, LE CARACTERE UTILISE COMME
< LIMITEUR DE FIN ; DE PLUS TOUT CA-
< RACTERE EN EXPOSANT (VOIR 'ED') EST
< CONVERTI EN UN 'CTRL'.
< D'OU LE FORMAT :
< <LIM>!M<SUITE DE COMMANDES DE !M><LIM>
< (POUR "!M" VOIR 'CMS5'...)
<
<
FC1: EQU $
<
<
< E N T R E E D U N O M D E L ' I T E M :
<
<
TASK: EQU $
NOK: EQU $
LAD MITEM
BSR APRINT < POUR DEMANDER LE NOM DE L'ITEM...
LAD DEMIN
SVC 0 < ENTREE D'UN NOM PRESUME.
FCAUTO: EQU $ < CAS DE L'APPEL AUTOMATIQUE "!C."...
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.
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.
LAI '85
STBY DEMSGN < MISE EN MODE PRIVE (<ACN>)...
LAD DEMSGN
SVC 0 < TENTATIVE DE LECTURE DE
< L'ITEM ASSOCIE A LA VISU
< ASSIGNEE A CE NVP.
JE NLOAD < OK, IL EXISTE SOUS <ACN>...
LAI '86
STBY DEMSGN < NON, MISE SOUS :SYS,
LAD DEMSGN
SVC 0 < TENTATIVE DE LECTURE DE L'ITEM
< SOUS :SYS...
JE NLOAD < OK, L'ITEM EXISTE...
<
< CAS OU L'ITEM N'EXISTE PAS :
<
LXI 0
MOV1: EQU $
LA &ABUFX < TRANSFERT DU NOM
STA &AXBIAS < DU PROCESSEUR SYSTEME.
ADRI 1,X
LR X,A
CPI LCCI/NOCMO
JL MOV1 < AUX CARACTERES SUIVANTS...
LAI '86
STBY DEMLV < MISE EN MODE DE CHARGEMENT DES PROCESSEUR
< SYSTEME...
LAI 6 < AFIN DE NE PLUS AVOIR A FAIRE "!GO"
< POUR RENTRER DANS UN PROCESSEUR LORS
< DES APPELS IMPLICITES...
< (A)=FONCTION NEUTRE DES 'SVC'.
JMP PROCOT < VERS LE CHARGEMENT AUTOMATIQUE...
<
< CAS OU L'ITEM EXISTE :
<
NLOAD: EQU $ < L'ITEM ASSOCIE EST LA...
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'.
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 LCOM < NBRE D'OCTETS PAR CARTE.
LXI 0 < INDEX INITIAL BUFFER.
STZ KCAR < RAZ COMPTEUR DES CARACTERES
< DU MESSAGE COURANT (NON
< COMPRIS L'EOT).
LAI 1 < INDEX COURANT DE L'ITEM,
STA IEG < QUE L'ON MET EN TEMPORAIRE.
GETCAR: EQU $
LA IEG
CP NCP < VALIDATION DE 'IEG'...
JL F1 < OK...
QUIT 1 < ?!???!?!?!
JMP TASK
<
< ACCES AU CARACTERE COURANT :
<
F1: 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
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.
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 $
<
< 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.
JE F8 < OK...
LAD MERRC
BSR APRINT < EREUR DE CARTE CONTROLE...
F8: EQU $
QUIT 1 < RETOUR AU CCI, AFIN D'INTERPRETER CE
< QUI EST DANS LE BUFFER...
JMP TASK < ET RETOUR A 'TASK'...
<
<
< 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 $
<
< 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
<
<
< 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
<
<
< I M P R E S S I O N D ' U N M E S S A G E :
<
<
< ARGUMENT :
< A=@DU MESSAGE A EMETTRE.
<
<
PRINT: EQU $
PSR X,C
LR A,C < C=@MOT MESSAGE.
ADR A,A
ADRI 1,A < A=@OCTET DU MESSAGE.
STA DEMOUT+1
LBY 0,C < A=LONGUEUR MESSAGE.
STA DEMOUT+2
LAD DEMOUT
SVC 0 < EMISSION MESSAGE.
PLR X,C
RSR
PAGE
<
<
< V A L I D A T I O N I M P L A N T A T I O N :
<
<
X120: VAL $-ZERO < LONGUEUR DE !CALL.
X120: VAL '3EF-X120 < LONGUEUR DISPONIBLE JUSQU'A 1K.
ZEROV: EQU ZERO+X120 < ERREUR VOLONTAIRE D'ASSEM-
< BLAGE SI MAUVAISE IMPLANTATION.
END DEBUT
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.