< S I S C M S 5 6
PAGE
PAGE
<
<
< C A R D C O N T R O L I N T E R P R E T E R :
<
<
< FONCTION :
< CE SOUS-PROGRAMME APPELE
< PAR LES HANDLERS DE SERVICE,
< A A SA CHARGE LE DIALOGUE ENTRE
< LES UTILISATEURS ET LE SYSTEME
< VIA LE LANGAGE DE COMMANDE (OU
< 'CCI') ; POUR CE FAIRE, IL SE
< BASE SUR UNE GRAMMAIRE, DITE
< "GRAMMAIRE DU CCI", DONT 'RUNCCI'
< EST L'INTERPRETEUR...
<
<
< NOTA :
< AU NIVEAU DIALOGUE AVEC
< L'UTILISATEUR :
<
< 1 - LES ENTREES SE FONT SUR 'PHIN',
< 2 - LES SORTIES SE FONT SUR 'PHOUT'.
<
<
< FORMAT DE LA GRAMMAIRE DU CCI :
< LA GRAMMAIRE DU CCI EST FAITE DE NOEUDS DE
< FONCTIONS (F0 A F18) DONT LE FORMAT EST
< DECRIT CI-DESSOUS :
<
XCCIM0:: MOT O < MOT0 DECOUPE EN 2 OCTETS...
XCCIM1:: MOT XCCIM0+D < MOT 1 D'UN NOEUD DE LA GRAMMAIRE,
XCCIM2:: MOT XCCIM1+D < MOT 2 D'UN NOEUD,
XCCIM3:: MOT XCCIM2+D < ET MOT 3...
XCCINX:: VAL I < INCREMENT PERMETTANT DE PASSER DU
< DERNIER MOT D'UN NOEUD AU NOEUD LE
< SUIVANT PHYSIQUEMENT...
XCCIER:: VAL XCCINX < INCREMENT UTILISE POUR LES RETOURS EN
< ERREUR DES ROUTINES DU CCI.
< CCIM :
< F0 MESSAGE ENVOI D'UN MESSAGE A L'ESCLAVE,
< OCTET0=LONGUEUR DU MESSAGE,
< OCTET1=K,
< MOT1=ADRESSE MOT DU MESSAGE.
< CCIR :
< F1 ROUTINE EXECUTION D'UNE ROUTINE,
< OCTET0=K, OU 'OCTET' ARGUMENT (CF. NSP ASSIGN...),
< OCTET1=1,
< MOT1=ADRESSE ROUTINE.
< MOT2=INDEX DU NOEUD SUIVANT 1,
< MOT3=INDEX DU NOEUD SUIVANT 2.
< (LE CHOIX EST A LA CHARGE DE LA ROUTINE PAR
< ACTION SUR LE REGISTRE X :
< X INCHANGE : NOEUD SUIVANT=NOEUD 1,
< X<--(X)+1 : NOEUD SUIVANT=NOEUD 2 ).
< CCIS :
< F2 SUSPENSION SORTIE DU CCI (ET RETOUR AU SVC),
< OCTET0=K,
< OCTET1=2.
< CCID :
< F3 DISCONNECT LOG-OUT DE L'ESCLAVE,
< OCTET0=K,
< OCTET1=3.
< CCICT :
< F4 CARACTERE TYPE COMPARE LE TYPE DU CARACTERE
< COURANT DE BUFESC AVEC L'OCTET0,
< OCTET0=TYPE : 4=CARACTERE<"0",
< 3=CHIFFRES ("0" A "9"),
< 2=CODE ENTRE CHIFFRES ET LETTRES,
< 1=LETTRES,
< 0=CARACTERE>"Z".
CCITCT:: VAL 4 < TOUS LES CODES AVANT LES CHIFFRES,
CCITCH:: VAL CCITCT-I < TOUS LES CHIFFRES DECIMAUX,
CCITCL:: VAL CCITCH-I < ENTRE LES CHIFFRES ET LES LETTRES,
CCITLE:: VAL CCITCL-I < TOUTES LES LETTRES,
CCITZZ:: VAL CCITLE-I < AU-DELA DES LETTRES.
< OCTET1=4,
< MOT1=INDEX DU NOEUD SUIVANT SI LES TYPES COINCIDENT,,
< MOT2=INDEX DU NOEUD SUIVANT SI LES TYPE NE
< COINCIDENT PAS.
< CCIC :
< F5 CARACTERE COMPARE LE CARACTERE COURANT DE
< BUFESC AVEC L'OCTET0,
< OCTET0=CARACTERE DE TEST,
< OCTET1=5,
< MOT1=INDEX DU NOEUD SUIVANT SI LES CARACTERES
< COINCIDENT,
< MOT2=INDEX DU NOEUD SUIVANT SI LES 2 CARACTERES
< NE COINCIDENT PAS.
XCOK:: MOT XCCIM1 < MOT1 DE 'CCIC',
XCNK:: MOT XCCIM2 < MOT2 DE 'CCIC'.
< CCII :
< F6 INTERROGATION INTERROGE L'ESCLAVE : QUESTION-
< REPONSE,
< OCTET0=K,
< OCTET1=6.
< CCIJMP :
< F7 JUMP CCI CETTE FONCTION PROVOQUE UN SAUT
< INCONDITIONNEL DANS LA GRAMMAIRE
< DU CCI,
< OCTET0=K,
< OCTET1=7,
< MOT1=INDEX DU NOEUD SUIVANT.
< CCILP :
< F8 LOAD PROCESSOR CETTE FONCTION A A SA CHARGE
< LE CHARGEMENT DES PROCESSEURS
< DEMANDES PAR L'UTILISATEUR LORS
< DE L'INTERROGATION CCI,
< OCTET0=K,
< OCTET1=8,
< MOT1=ADRESSE DISQUE DU PROCESSEUR.
< MOT2=TAILLE OCTET NECESSAIRE AU PROCESSEUR
< EN MEMOIRE,
< MOT3=ADRESSE DE DEPART DU PROCESSEUR EN
< ADRESSE TRANSLATABLE (PAR RAPPORT A SLO).
XLPAD:: MOT XCCIM1 < ADRESSE DISQUE D'UN PROCESSEUR,
XLPTO:: MOT XCCIM2 < TAILLE OCTET DE CELUI-CI,
XLPRUN:: MOT XCCIM3 < ET ADRESSE DE LANCEMENT.
< CCIACN :
< F9 TEST ON TESTE ICI, SI LE NUMERO
< DE COMPTE DE L'UTILISATEUR
< COINCIDE AVEC CELUI QUI EST
< CONTENU DANS LE NOEUD.
< OCTET0=K,
< OCTET1=9,
< MOT1=CARACTERES 0 & 1 DE L' CHERCHE,
< MOT2=CARACTERES 2 & 3 DE L' CHERCHE,
< MOT3=INDEX DU NOEUD SUIVANT SI LES 2
< COINCIDENT,
< MOT4=INDEX DU NOEUD SUIVANT S'ILS DIFFERENT.
XACN1:: MOT XCCIM1 < DEBUT DE L',
XACN2:: MOT XCCIM2 < FIN DE L',
XACNOK:: MOT XCCIM3 < MOT DE COINCIDENCE,
XACNNK:: MOT XACNOK+XCCIER < MOT DE NON COINCIDENCE.
< CCIEOM :
< F10 TEST TESTE LA PRESENCE D'UN CARACTERE
< FIN DE MESSAGE (R/C OU EOT).
< OCTET0=K,
< OCTET1=10 ('A),
< MOT1=INDEX DU NOEUD SUIVANT SI ,
< MOT2=INDEX DU NOEUD SUIVANT SINON.
< CCINT :
< F11 TEST TESTE LE MODE INTERPRETATIF/
< NON-INTERPRETATIF DU CCI.
< OCTET0=K,
< OCTET1=11 ('B),
< MOT1=INDEX DU NOEUD SUIVANT SI CCI NON-INTERPRETATIF,
< (DIT AUSSI "INTERACTIF"...)
< MOT2=INDEX DU NOEUD SUIVANT SI INTERPRETATIF.
< (DIT AUSSI "NON INTERACTIF"...)
< CCIUSR :
< F12 TEST TESTE LA NATURE INTERACTIVE
< DE L'ESCLAVE TRAVAILLANT AVEC
< LE CCI (UTILISE LA COMPARAISON DE
< DE 'NSPIN' A 'NSPOUT').
< OCTET0=K,
< OCTET1=12 ('C),
< MOT1=INDEX DU NOEUD SUIVANT SI USER INTERACTIF,
< MOT2=INDEX NOEUD SUIVANT SI USER NON INTERACTIF.
XUSRUI:: MOT XCCIM1 < MOT INTERACTIF,
XUSRNI:: MOT XCCIM2 < MOT NON INTERACTIF.
< CCINOP :
< F13 NOP NOEUD NOP DU CCI.
< OCTET0=K,
< OCTET1=13 ('D).
< CCIBAC :
< F14 GO BACK RESTAURATION DE L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI A PARTIR
< DE SRCOTO (RETOUR D'UNE SOUS-
< GRAMMAIRE).
< OCTET0=K,
< OCTET1=14 ('E).
< CCIBAK :
< F15 GO BACK' RESTAURATION DE L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI (A PARTIR
< DE SRCOTO) ET DE Y (A PARTIR
< DE YSER) (RETOUR D'UNE SOUS-
< GRAMMAIRE DE TRAPPE PAR EXEMPLE...)
< OCTET0=K,
< OCTET1=15 ('F).
< CCICAL :
< F16 CALL S-GRAMM. SAUVEGARDE DE L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI DANS SRCOTO
< ET APPEL D'UNE SOUS-GRAMMAIRE ;
< LES APPELS NE PEUVENT ETRE
< EMBOITES.
< OCTET0=K,
< OCTET1=16 ('10),
< MOT1=INDEX DU 1ER NOEUD DE LA SOUS-GRAMMAIRE.
< CCINC :
< F17 CARACTERE COMPARE LE CARACTERE COURANT
< DE BUFESC AVEC L'OCTET0.
< OCTET0=CARACTERE DE TEST,
< OCTET1=17 ('11)
< MOT1=ADRESSE NOEUD SUIVANT SI LES 2 CARACTERES NE
< NE COINCIDENT PAS,
< MOT2=ADRESSE NOEUD SUIVANT SI LES 2 CARACTERES
< COINCIDENT.
XNCNK:: MOT XCCIM1 < MOT DE NON COINCIDENCE,
XNCOK:: MOT XCCIM2 < MOT DE COINCIDENCE.
< CCIDIR :
< F18 CARACTERE TEST DIRECT DU CARACTERE COURRANT
< A L'AIDE D'UNE TABLE QUE CE
< CARACTERE INDEXE (DE 'A' A 'Z').
< OCTET0=K,
< OCTET1=18 ('12),
< MOT1=ADRESSE NOEUD SUIVANT SI LE CARACTERE COURANT N'EST
< PAS DANS L'INTERVALLE 'A'-'Z', OU SI
< L'ENTREE QU'IL INDEXE EST VIDE ('0000),
< MOT2=ADRESSE NOEUD SUIVANT SI LE CARACTERE COURANT
< EST 'A',
< MOT3=ADRESSE NOEUD SUIVANT SI 'B',... ET CECI
< JUSQU'A 'Z'.
< EST CELUI DU SYSTEME, C'EST-A-DIRE
< LE MIEN...
< OCTET0=K,
< OCTET1=19 ('13),
< MOT1=ADRESSE DU NOEUD SUIVANT SI :SYS,
< MOT2=ADRESSE DU NOEUD SUIVANT SINON.
<
<
< A U T O - R E L A I :
< SI L'ON EST EN PRESENCE D'UN
< RELAI DE NOEUD (CHAINAGE-ADRESSE)
< DONT LE CONTENU N'EST PAS DU
< TYPE '1XXX (TOUTE LA GRAMMAIRE DU
< 'CCI' EST DANS LES ADRESSES '1XXX)
< ON ADMET QU'ON EST EN PRESENCE
< DIRECTE DE L'INFORMATION QUE L'ON
< DEVAIT CHAINER...
<
<
< G R A M M A I R E D U ' C C I ' :
< LA GRAMMAIRE DU 'CCI' EST UN
< GRAPHE ORIENTE QUE L'ESCLAVE
< PARCOURS AU COURS DE SA SESSION ;
< LES NOEUDS SONT DES ACTIONS, ET
< LES ARCS (CHAINAGES) DES TRANSI-
< TIONS D'ETAT.
< LE MOT 'RECOTO' DE LA 'DCTESC'
< DE L'ESCLAVE DONNE L'INDEX COU-
< RANT DANS LA GRAMMAIRE ; IL EST
< INITIALISE A 0 PAR 'JE', ET MIS
< A 'INFINI' LORS D'UNE DEMANDE
< DE 'EJ'...
<
<
< ARGUMENT :
< (L)=ADRESSE DCT(SERVICE),
< (W)=ADRESSE DCT(ESCLAVE).
< 'B' A NE PAS DETRUIRE (VOIR 'HDLSER')...
<
<
< RESULTAT :
< X(PST-ESCLAVE) :
< =0 : MODE INTERACTIF.
< =0 : MODE NON INTERACTIF, ET ANALYSE OK.
< =1 : MODE NON INTERACTIF, ET ERREUR DE SYNTAXE,
< =2 : MODE NON INTERACTIF ET TRONCATION.
<
<
<*******************************************************************************
XWOR%9: VAL K < INITIALISATION...
ECES:: VAL '0@@@@+I < ERREUR DE SYNTAXE EN NON INTERACTIF,
ECT:: VAL '0@@@@+I < TRONCATION EN NON INTERACTIF.
<*******************************************************************************
<
<
< T A B L E D E S M O D U L E S C C I :
<
<
CALL #SISP CMS5 DOL1#
FCCI: EQU $
WORD CCIM
FCCI0:: VAL $-FCCI-D < ENVOI D'UN MESSAGE A L'ESCLAVE.
WORD CCIR
FCCI1:: VAL $-FCCI-D < EXECUTION D'UN SOUS-PROGRAMME.
WORD CCIS
FCCI2:: VAL $-FCCI-D < SORTIE DU CCI.
WORD CCID
FCCI3:: VAL $-FCCI-D < LOG-OUT DE L'ESCLAVE.
WORD CCICT
FCCI4:: VAL $-FCCI-D < TYPE CARACTERE COURANT.
WORD CCIC
FCCI5:: VAL $-FCCI-D < TEST CARACTERE COURANT.
WORD CCII
FCCI6:: VAL $-FCCI-D < INTERROGATION ESCLAVE.
WORD CCIJMP
FCCI7:: VAL $-FCCI-D < SAUT DANS LA GRAMMAIRE.
WORD CCILP
FCCI8:: VAL $-FCCI-D < CHARGEMENT D'UN PROCESSEUR.
WORD CCIACN
FCCI9:: VAL $-FCCI-D < TEST DE L'.
WORD CCIEOM
FCCI10:: VAL $-FCCI-D < TEST DE L'.
WORD CCINT
FCCI11:: VAL $-FCCI-D < TEST DU MODE INTERPRETATIF.
WORD CCIUSR
FCCI12:: VAL $-FCCI-D < TEST INTERACTIVITE ESCLAVE.
WORD CCINOP
FCCI13:: VAL $-FCCI-D < NOP.
WORD CCIBAC
FCCI14:: VAL $-FCCI-D < RETOUR SOUS-GRAMMAIRE,
WORD CCIBAK
FCCI15:: VAL $-FCCI-D < RETOUR SOUS-GRAMMAIRE.
WORD CCICAL
FCCI16:: VAL $-FCCI-D < APPEL SOUS-GRAMMAIRE.
WORD CCINC
FCCI17:: VAL $-FCCI-D < TEST INVERSE DE CARACTERE.
WORD CCIDIR
FCCI18:: VAL $-FCCI-D < TEST DIRECT CARACTERE.
WORD CCISYS
FCCI19:: VAL $-FCCI-D < TEST DU NUMERO DE COMPTE :SYS.
NFCCI:: VAL $-FCCI-D < NBRE DE FONCTIONS DU CCI -1.
<
<
USE W,DEM0
USE L,DCT0
CALL #SISP CMS5 DOL2#
RUNCCI: EQU $
PSR B < SAVE LE B A NE PAS DETRUIRE...
LX RECOTO-DCTESC,W < RECUPERATION DE L'INDEX COURANT
< DE L'ESCLAVE DANS LA GRAMMAIRE
< DU CCI.
LY YSER-DCTESC,W < RESTAURATION EVENTUELLE DU
< REGISTRE Y DE SERVICE ; PERMET
< AINSI A 2 ROUTINES DU CCI DE
< COMMUNIQUER PAR Y, MEME S'IL
< Y A CHANGEMENT DE NIVEAU
< DE SERVICE.
<
< TEST DU MODE DU CCI : INTERACTIF OU PROGRAMME ????
<
LA IDESC-DCTESC,W
TBT IDESCI < TEST DU MODE DU CCI ???
JC E784 < CAS DU CCI NON INTERACTIF, OK.
<
< TEST DE L'INTEARCTIVITE DE L'UTILISATEUR :
<
BSR ACHKIN < COMPARAISON DE NSPIN ET
< DE NSPOUT (AVEC RENVOI DE
< NSPIN DANS LE REGISTRE A).
JNE Z891 < RIEN A FAIRE : NSPIN#NSPOUT.
<
< CAS D'UN UTILISATEUR INTERACTIF (NSPIN=NSPOUT) :
< (REINITIALISATION DE SON CARACTERE D'ABORT)
< (SUPPRESSION DU TIME OUT SUR SA VISU)
< (AUTORISATION DES EXPANSIONS/EXTENSIONS)
<
PSR X,L < SAVE L'INDEX COURANT DE LA
< GRAMMAIRE DU CCI, ET
< L'@DCT-SERVICE.
LR A,X < (X)=NSPIN DE LA CONSOLE.
BSR ACADCT < RENVOIE : (L)=@DCT(NSPIN).
LAI KALTM < (A)=CODE DU 'ALT-MODE'.
STA VAR+CARALT < RE-INITIALISATION SYSTEMATIQUE
< ET A PRIORI DU CARACTERE D'ABORT
< DE L'UTILISATEUR A CHAQUE PASSAGE
< DANS LE CCI INTERACTIF.
STZ TESTO < SUPPRESSION DU TEST DU TIME-
< OUT SUR LA CONSOLE INTERACTIVE
< A CHAQUE INTERROGATION DU CCI.
STZ VAR+INEXEX < AUTORISATION A PRIORI DES
< EXPANSIONS/EXTENSIONS.
PLR X,L < RESTAURE L'INDEX COURANT DE LA
< GRAMMAIRE DU CCI ET @DCT-SERVICE.
<
< TEST DES 'TEST & SET' NON RESETES
< LORS DU PASSAGE DANS LE CCI INTERACTIF ;
< IL EST DONC INTERDIT D'APPELER LE
< CCI INTERACTIF ENTRE UN 'TEST & SET'
< ET LE 'RESET' ASSOCIE !!!
< (OU PLUTOT CE N'EST PAS RECOMMANDE...)
<
Z891: EQU $
LA SETRUN-DCTESC,W < ACCES A LA ZONE DE SAUVEGARDE
< DES 'TEST & SET' AU NIVEAU DE
< L'ESCLAVE.
JAE E784 < OK, PAS DE 'TEST & SET' EN
< COURS.
BSR ASMMK <<<< PHASE ININTERRUPTIBLE
EOR SYNCUS < ON FORCE LES 'RESET' NON
< ENCORE EFFECTUES.
STA SYNCUS < MAJ DE SYNCUS.
BSR ASMDK <<<< DEMASQUAGE
STZ SETRUN-DCTESC,W < 'RESET' GLOBAL AU NIVEAU DE
< L'ESCLAVE.
<
< B O U C L E D E P A R C O U R S D E
< L A G R A M M A I R E D U C C I :
<
E784: EQU $
LA &AOTCCI < ACCES AU MOT0 DU NOEUD COURANT.
XWOR%1: VAL CODBT=FMASK(K?MOCD=FCINST)MOCD
RBT BITPAR-XWOR%1 < POUR ASSUER LA COMPATIBILITE
< DES CODES LORSQU'IL SAGIT
< DE NOEUDS DE CARACTERES.
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE.
LBI K
SCLD MOCG=K < (B)=OCTET0(MOT0 DU NOEUD), AVEC SON BIT D
< PARITE ('BITPAR') A 0.
SWBR A,A < (A)=OCTET1=FONCTION.
LR A,X < (X)=FONCTION DEMANDEE AU CCI.
CPI NFCCI < VALIDATION DE LA FONCTION.
JLE SYSR51 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< JE NE SAIS PAS, MAIS LA SITUATION
< EST DELICATE, CAR ON RISQUE DE S'EMPETRER
< DE PLUS EN PLUS ; UNE SOLUTION SERAIT PEUT
< ETRE DE PRENDRE L'INDEX DU NOEUD D'INTER-
< ROGATION GENERALE (N5-N0), PUIS DE FAIRE
< UN 'JMP E784'...
<
SYSR51: EQU $
LA &AFCCI < (A)=@DU MODULE TRAITANT CETTE
< FONCTION (X).
PLR X < RESTAURE INDEX COURANT DE
< LA GRAMMAIRE.
ADRI XCCIM1-XCCIM0,X < PASSAGE AU MOT1 DU NOEUD COURANT
< OU AU NOEUD SUIVANT.
PSR A < EMPILEMENT DE L'ADRESSE DU
< MODULE DE TRAITEMENT.
RSR < BRANCHEMENT VERS LE MODULE.
<
< N O P D U C C I :
<
CCINOP: EQU E784
<
< G O B A C K D U C C I :
<
CCIBAK: EQU $
LY YSER-DCTESC,W < RESTAURATION DE Y, EN VUE
< DE NE PAS PERDRE LE REGISTRE Y
< DU DEBUG PAR EXEMPLE...
CCIBAC: EQU $
VALBAC:: VAL ME000
LA CE000
CP SRCOTO-DCTESC,W < VALIDATION DU GO BACK.
JNE SYSR52 < OK, IL Y A UN APPEL DE SOUS-
< GRAMMAIRE EN COURS.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT-ETRE COMME INDIQUE CI-DESSUS...
<
SYSR52: EQU $
LX SRCOTO-DCTESC,W < RESTAURATION DE L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI
< AVEC SRCOTO.
STA SRCOTO-DCTESC,W < MISE DE SRCOTO A 'E000, POUR
< INDIQUER QU'IL N'Y A PLUS
< D'APPEL DE SOUS-GRAMMAIRE
< EN COURS.
JMP E784 < VERS LA BOUCLE DU CCI.
<
<
< I N T E R R O G A T I O N E S C L A V E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME ENVOIE
< UN MESSAGE A L'UTILISATEUR
< SUR 'NSPOUT', LIT SA REPONSE
< SUR 'NSPIN', PUIS LUI EN
< FAIT L'ECHO SUR 'NSPOUT'...
<
<
< ARGUMENT :
< (L)=ADRESSE DE 'DCTSER',
< (W)=ADRESSE DE 'DCTESC',
< (B)=INDICATEUR DE FAIRE DE L'ECHO OU PAS :
XEECHO:: VAL EXIST < FAIRE DE L'ECHO,
XNECHO:: VAL NEXIST < NE PAS FAIRE DE L'ECHO ; ON NOTERA QUE
< DANS LE CAS DU TEMPS PARTAGE, CECI PEUT
< ETRE BY-PASSE PAR LA COMMANDE "!ECHO ON",
< MAIS QUI BIEN SUR NE PEUT ETRE FRAPPE
< AVANT L'ENTREE DU MOT DE PASSE, OUFFF...
<
<
LMES1:: VAL 4
CCII: EQU $
PSR X < SAVE INDEX COURANT GRAMMAIRE.
PSR B < ET SAUVEGARDE DE L'INDICATEUR D'ECHO...
LBI LMES1 < (B)=LONGUEUR A PRIORI DU MESSAGE,
BSR ACHKIN < MAIS EST-ON INTERACTIF ???
< RENVOIE :
< (A)='NSPIN' DE L'UTILISATEUR...
JNE Z1200Y < NON, DONC (B) EST BON...
PSR X,L < OUI, IL S'AGIT D'UN UTILISATEUR INTER-
< ACTIF, LE NOMBRE DE "?" QUE L'ON VA
< EDITER EST FONCTION DU NIVEAU D'EMPILE-
< MENT DE CET 'IDESC'...
LR A,X < (X)='NPSIN' DE L'UTILISATEUR,
BSR ACADCT < (L)=ADRESSE DE LA 'DCT' DE LA VISU...
LA VAR+APILID
LR A,L < (L)=ADRESSE DE LA PILE D'EMPILEMENT DES
< UTILISATEURS PAR "!U" SUR CETTE VISU,
LA O,L < (A)=POINTEUR DE LA PILE :
ANDI XLCPIL < (A)=LONGUEUR COURANTE,
XWOR%1: VAL XLCPIL=K
IF XWOR%1-K,,XEIF%,
SLRS XWOR%1
XEIF%: VAL ENDIF
ADR A,B < ON AJOUTE AU MESSAGE DE BASE 'MESCCI'
< UN NOMBRE DE "?" EGAL AU NIVEAU D'IMBRI-
< CATION DES UTILISATEURS PAR "!U" SUR
< CETTE VISU...
PLR X,L
Z1200Y: EQU $
LRM A
WORD MESCCI < (A)=ADRESSE DU MESSAGE ">".
BSR AMESSO < EMISSION DU MESSAGE VERS
< L'ESCLAVE ET ATTENTE.
<
< LECTURE DE LA REPONSE ESCLAVE SUR NSPIN :
<
< ON A ICI :
< (Y)=NSPTYP SUR NSPOUT,
< (A)=W=ADRESSE DCT(ESCLAVE).
<
ADRI BUFESC-DCTESC,A < (A)=@MOT DU BUFFER ESCLAVE DANS
< LA DCT-ESCLAVE.
SLLS NOCMO=K < CONVERSION EN UNE ADRESSE OCTET.
STA VAR+DEMCCI+T+AMDEM
IF FGR-FAVR,,XEIF%,
IF ATTENTION : IL Y A UNE INCOHERENCE
IF DANS LES CODES DES FONCTIONS DE
IF LECTURE !!!
XEIF%: VAL ENDIF
IF FGR-K,,XEIF%,
IF ATTENTION : IL DOIT Y AVOIR DU CODE OU L'ON
IF EXPLOITE IMPLICITEMENT LE FAIT QUE 'FGR'=0 !!!
XEIF%: VAL ENDIF
LA IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS :
RBT IDESCX
STA IDDESC-DCTESC,W < A PRIORI ON RAZE 'IDESCX' INDIQUANT
< AINSI QU'IL N'Y A PLUS DE TRAPPE EN
< COURS... (ON LE FAIT JUSTE AVANT LA
< DEMANDE DE LECTURE SUR 'NSPIN')
TBT IDESC9 < ALORS UN ECHO IMMEDIAT EST-IL DEMANDE ???
LAI FGR < (A)=FONCTION DE LECTURE SANS ECHO A
< PRIORI...
JNC Z1200Z < NON, DONC (A) EST BON ; CELA SIGNIFIE
< QUE SOIT L'ECHO IMMEDIAT N'EST PAS DE-
< MANDE (PAR "!ECHO OFF"), SOIT QU'ON
< EST EN BATCH (OU LES COMMANDES "!ECHO"
< SONT INTERDITES...).
LAI FAVRE < OUI :
< DANS LE CAS DU TEMPS PARTAGE, ON MET EN
< PLACE UNE FONCTION DE LECTURE AVEC ECHO,
< CE QUI PERMET DE VOIR CE QUE L'ON TAPPE
< (C'EST PAS TROP TOT...), LA FONCTION
< D'ECRITURE QUI SUIVRA PERMETTANT DE VOIR
< LA COMMANDE REELLEMENT INTERPRETEE APRES
< LES EVENTUELS 'RUBOUT', 'BREAK' ET
< 'ALT-MODE'...
Z1200Z: EQU $
STA VAR+DEMCCI+T+OPDEM
< MISE EN PLACE DE LA FONCTION DE LECTURE
< AVEC OU SANS ECHO...
LXI PHIN
LBY &TASSGN-DCTESC,W < (A)=NSPIN DE L'ESCLAVE.
SWBR A,A < GENERATION D'UN 'NSPTYP' VERS LE PERI-
< PHERIQUE 'NSPOUT' DE L'ESCLAVE...
STA VAR+DEMCCI+XXNSP < MAJ DE NSPTYP DE DEMCCI.
LAD VAR+DEMCCI
LR W,X < SAVE @DCT-ESCLAVE DANS X.
LR A,W < (W)=@DEMCCI.
< ON A ICI :
< (W)=ADRESSE DEMCCI,
< (X)=ADRESSE DCT(ESCLAVE).
Z1200: EQU $ < REBOUCALGE EN CAS D'ERREUR
< A LA LECTURE DU MESSAGE USER.
LAI LCCI < COMPTE D'OCTETS MAX DU CCI.
STA ARGDEM+CODEM < INITIALISATION DU CODEM DE
< DEMCCI, OU REINITIALISATION DANS
< LE CAS D'UN BOUCLAGE POUR
< ERREUR A LA LECTURE.
BSR ACHAND < ENVOI DE LA DEMANDE DE LECTURE SUR LE
< 'NSPIN' DE L'ESCLAVE.
WAIT WEIO < ATTENTE DE FIN DE LECTURE
< SUR LE NSPIN.
<
< RAPPEL :
< DANS LE CAS DES VISUS, LE CODEM
< DE LA DEMANDE CONTIENT LE NBRE
< DE CARACTERES REELLEMENT LUS.
<
YCCITO:: VAL 2 < DUREE D'UNE MISE EN SOMMEIL EVEN-
< TUEL DU 'CCI' LORS D'ERREURS D'ENTREE-
< SORTIE...
LA ARGDEM+ETADEM < COMMENT S'EST PASSE L'ENTREE ???
JAE Z1200X < TRES BIEN...
CPI EVINAC < MAL, EST-CE UNE FONCTION INACCESSIBLE ???
< (NOTA : ON NE DISCRIMINE PAS LES VISUS
< DU RESTE, CAR CE PHENOMENE NE PEUT
< SE RENCONTRER QUE SUR LES VISUS...)
JNE Z1200 < NON, ON RECOMMENCE IMMEDIATEMENT...
PSR X < ET OUI, SINON CA FAIT DES ALARMES !!!
LXI YCCITO < OUI,
BSR ADODO < FAIT DODO MON PETIT CCI... CE PHENOMENE
< EST LIE AU INTERFERENCES DES TIME-OUT
< SUR VISUS ET DU CURSEUR GRAPHIQUE...
PLR X
JMP Z1200 < ET ON ITERE...
Z1200X: EQU $
<
< OK, DEMANDE EXECUTEE, IL Y A
< PEUT-ETRE DES CONNEXIONS
< MATRICIELLES A EXPLOITER :
<
PLR B < (B)=INDICATEUR D'ECHO,
IF XNECHO-K,,XEIF%,
IF ATTENTION : LES 3 TESTS SUIVANTS SONT IDIOTS !!!
XEIF%: VAL ENDIF
CPZR B < ALORS UN ECHO EST-IL DEMANDE ???
JE Z1200T < NON, DONC ON SAUTE LES CONNEXIONS MATRI-
< CIELLES...
PSR A,X < OUI :
LA ARGDEM+OPDEM
ANDI MKOPDM < (A)=FONCTION COURANTE, ET
< (W)=ADRESSE DE LA DEMANDE COURANTE...
SVC SVCM8 < VERS LA DUPLICATION EVENTUELLE DE LA
< DEMANDE (W) SUR LES PERIPHERIQUES
< CONNECTES AU PERIPHERIQUE COURANT...
PLR A,X
Z1200T: EQU $
<
< ECRITURE DE LA REPONSE ESCLAVE SUR NSPOUT :
<
LAI FGW < FONCTION D'ECRITURE...
STA ARGDEM+OPDEM < DEMANDE D'ECRITURE.
STY NSPTYP < MISE EN PLACE DU NSPTYP SUR
< NSPOUT A PARTIR DE Y POSITIONNE
< PAR 'AMESSO'.
CPZR B < ALORS ET L'ECHO ???
JE Z1200S < PAS D'ECHO...
BSR ACHAND < ECHO : ENVOI DE LA DEMANDE D'ECRITURE
< SUR NSPOUT.
Z1200S: EQU $
<
< PREPARATION DE L'ANALYSE SYNTAXIQUE :
< (PUIS ATTENTE DE FIN D'OPERATION)
<
LR X,A < (A)=@DCT-ESCLAVE.
ADRI BUFESC-DCTESC,A < (A)=@BUFFER ESCLAVE (DCTESC).
SBT BITX < POSITIONNEMENT DU BIT D'INDEXATION
STA VAR+ABUFGR < GENERATION D'UN RELAI INDIRECT
< INDEX VERS LE BUFFER ESCLAVE
< A PARTIR DU HANDLER DE SERVICE.
STZ VAR+XBUFGR < INDEX INITIAL VERS LE BUFFER
< ESCLAVE (DCTESC).
CPZR B < ALORS, ET L'ECHO ???
JE Z1200R < PAS D'ECHO, ON SORT...
WAIT WEIO < ECHO : ATTENTE DE FIN D'ECRITURE...
<
< OK, DEMANDE EXECUTEE, IL Y A
< PEUT-ETRE DES CONNEXIONS
< MATRICIELLES A EXPLOITER :
<
PSR A,X
LA ARGDEM+OPDEM
ANDI MKOPDM < (A)=FONCTION COURANTE, ET
< (W)=ADRESSE DE LA DEMANDE COURANTE...
SVC SVCM8 < VERS LA DUPLICATION EVENTUELLE DE LA
< DEMANDE (W) SUR LES PERIPHERIQUES
< CONNECTES AU PERIPHERIQUE COURANT...
PLR A,X
<
< PARCOURS DE LA GRAMMAIRE :
<
Z1200R: EQU $
LR X,W < RESTAURE (W)=@DCT-ESCLAVE.
PLR X < RESTAURE INDEX COURANT GRAMMAIRE.
LA DEMESC-DCTESC+T+CODEM,W
STA VAR+MBUFGR < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
STZ FSERV-DCTESC,W < RAZ A PRIORI DE FSERV, AU CAS
< OU UN ALT-MODE AURAIT ETE RECU
< PENDANT L'ECHANGE DES MESSAGES.
JMP E784 < VERS L'ENTREE SUIVANTE DE LA
< GRAMMAIRE DU CCI.
<
< A P P E L D ' U N E R O U T I N E :
<
CCIR: EQU $
< ON A ICI :
< (L)=ADRESSE DCT(SERVICE).
< (W)=ADRESSE DCT(ESCLAVE).
BSR &AOTCCI < MOT1=@DE LA ROUTINE.
ADRI XCCINX,X < ACCES A L'INDEX DE L'UN DES
< 2 NOEUDS SUIVANTS.
JMP CCIJMP
<
< E N V O I D ' U N M E S S A G E :
<
CCIM: EQU $
<
< ON A ICI :
< (B)=LONGUEUR OCTETS DU MESSAGE.
<
CPZR B
JE E785 < RIEN A FAIRE : LE MESSAGE EST
< VIDE (UTILISE PAR LE 'MAIL').
LA &AOTCCI < (A)=MOT1(NOEUD)=@MESSAGE.
BSR AMESSO < ENVOI DU MESSAGE ET ATTENTE.
E785: EQU $
ADRI XCCINX,X < PASSAGE AU NOEUD SUIVANT DANS LE
< CAS OU LE NOEUD COURANT FAIT
< 2 MOTS DE LONG.
AE784: JMP E784 < ACCES AU NOEUD SUIVANT (ET RELAI 'E784').
<
< D I S C O N N E X I O N E S C L A V E :
<
CCID: EQU $
LX INFINI < EN VUE DU PROCHAIN APPEL AU CCI.
< QUI PROVOQUERA UN END-JOB PAR
< L'INTERMEDIAIRE DU RUN-SVCC.
<
< S U S P E N S I O N D U C C I :
<
CCIS: EQU $
STX RECOTO-DCTESC,W < SAVE INDEX COURANT DE L'ESCLAVE
< DANS LA GRAMMAIRE DU CCI.
PLR B
<
< S O R T I E D U C C I :
<
E953: EQU $
STY YSER-DCTESC,W < SAUVEGARDE A PRIORI DU REGISTRE
< Y DE SERVICE.
<
< RETOUR A PRIORI AU MODE CCI INTERACTIF :
<
BSR ASMMK <<<< MASK IT
LA IDESC-DCTESC,W
RBT IDESCI < MODE INTERACTIF A PRIORI.
STA IDESC-DCTESC,W
BSR ASMDK <<<< DEMASK IT
RSR < ET C'EST TOUT...
<
< R E C O N N A I S S A N C E D I R E C T E :
<
CCIDIR: EQU $
BSR ACARAC < (A)=CARACTERE COURANT DU BUFESC.
CPI KZ < VALIDATION PRELIMINAIRE PAR
< RAPPORT AU 'Z'.
JG Z720 < ERREUR : HORS L'INTERVALLE A-Z.
ADRI -KAROND,A < TRANSLATION PAR RAPPORT AU '@' (='A'-1).
JALE Z720 < ERREUR : HORS L'INTERVALLE A-Z.
<
< CAS OU LE CARACTERE COURANT EST DANS
< L'INTERVALLE 'A'-'Z' :
<
LR X,Y < SAVE X DANS Y.
ADR A,X < LE CARACTERE COURANT VA ETRE
< UTILISE POUR INDEXER UNE
< TABLE DE RELAIS DE NOEUDS.
LX &AOTCCI < (X)=@NOEUD SUIVANT OU '0000.
CPZR X
JNE Z980 < OK, LE NOEUD COURANT EST
< RECONNU, ET X CONTIENT L'
< ADRESSE DU NOEUD SUIVANT.
<
< CAS DES CARACTERES NON RECONNUS :
<
JE SYSR53 < OK, (X)=K.
BSR ASYSER < E R R E U R S Y S T E M E ...
SYSR53: EQU $
LR Y,X < RESTAURE L'INDEX COURANT DE LA
< GRAMMAIRE DU CCI QUI DONNE LE
< NOEUD OU ALLER EN CAS DE NON
< RECONNAISSANCE.
JMP Z720 < VERS LE RETOUR SUR LE CARACTERE
< NON RECONNU.
<
< R E C O N N A I S S A N C E I N V E R S E E :
<
CCINC: EQU $
BSR ACARAC < ACCES AU CARACTERE COURANT DE
< BUFESC.
<
< ON A ICI :
< (A)=CARACTERE COURANT DE BUFESC,
< (B)=CARACTERE ATTENDU.
<
ADRI XNCOK-XNCNK,X < PREPARATION D'UN RETOUR OK
< A PRIORI.
CPR A,B < Y-A-T'IL COINCIDENCE ???
JE E786 < OK, IL Y A COINCIDENCE.
ADRI XNCNK-XNCOK,X < NON COINCIDENCE : ERREUR.
JMP Z720 < VERS UN RETOUR ARRIERE DANS
< LE BUFESC.
<
< R E C O N N A I S S A N C E U N C A R A C T E R E :
<
CCIC: EQU $
BSR ACARAC < ACCES AU CARACTERE COURANT DE
< BUFESC.
<
< ON A ICI :
< (B)=CARACTERE ATTENDU,
< (A)=CARACTERE COURANT.
<
CPR A,B < Y-A-T'IL COINCIDENCE...
E787: EQU $
JE E786 < OK : CARACTERE RECONNU, OU
< COINCIDENCE DE TYPE.
E787JN: EQU $
ADRI XCNK-XCOK,X < DANS LE CAS DE LA NON-RECONNAIS-
< SANCE OU DE LA NON COINCIDENCE
< DE TYPE IL FAUT ACCEDER AU MOT2.
Z720: EQU $ < ENTRY NON COINCIDENCE POUR CCINC.
DC VAR+XBUFGR < RETOUR ARRIERE SUR LE CARACTERE
< NON RECONNU.
E786: EQU $
<
< S A U T D A N S L A G R A M M A I R E :
<
CCIJMP: EQU $
<
< VALIDATION DE L'ADRESSE DU NOEUD SUIVANT :
<
LA &AOTCCI < ACCES A CE QUI EST POINTE
< PAR LE REGISTRE X.
ADGCCI:: VAL 1 < LA GRAMMAIRE DU CCI DOIT ETRE A DES
MKCCI:: VAL 'F000 < ADRESSES DU TYPE 1XXX (MASQUE BITS 0-3).
XWOR%1: VAL MKCCI=K
XWOR%1: VAL -XWOR%1
SLRS -XWOR%1 < ACCES AUX BITS0-3.
CPI ADGCCI < EST-CE UNE ADRESSE DE LA
< GRAMMAIRE DU CCI ???
JE Z980X1 < OUI, ON VA S'Y BRANCHER...
<
< TESTS DES SAUTS IMPLICITES A 'N10'
< AVEC CODE D'ERREUR UTILISATEUR :
<
MCCIER:: VAL 'F000 < "RACINE" COMMUNE DES CODES D'ERREURS,
< QU'ON NE DOIT PAS RETROUVER SUR AUCUN
< AUTRE NOEUD DE LA GRAMMAIRE SOUS PEINE
< DE FAUSSES ERREURS...
CPI MCCIER>XWOR%1 < ALORS, EST-CE UN BRANCHEMENT IMPLICITE
< AU NOEUD D'ERREUR 'N10' ???
JNE AE784 < NON, ON EST DONC EN PRESENCE
< D'UN AUTO-RELAI.
LA &AOTCCI < OUI :
< (A)=CODE D'ERREUR UTILISATEUR,
STA BOXESC-DCTESC,W < QUE L'ON RENVOIE PAR 'BOX', ET QUE L'ON
< EDITER APRES BRANCHEMENT A 'N10' SI
< L'UTILISATEUR N'EST PAS EN MODE INTER-
< PRETATIF...
LRM X
WORD N10 < ET BRANCHEMENT AUTOMATIQUE A 'N10',
JMP Z980 < VERS CE BRANCHEMENT EFFECTIF...
<
< CAS DES BRANCHEMENTS EXPLICITES :
<
Z980X1: EQU $
<
< ACCES A L'ADRESSE DU NOEUD SUIVANT :
<
LX &AOTCCI < ACCES A L'ADRESSE DU NOEUD
< SUIVANT.
<
< BRANCHEMENT :
<
Z980: EQU $ < ENTRY 'RECONNAISSANCE DIRECTE'.
LA AOTCCI < RELAI VERS LE NOEUD 0
< DE LA GRAMMAIRE DU CCI.
RBT BITX < (A)=ADRESSE DU NOEUD 0 PAR RAZ
< DU BIT D'INDEX.
SBR A,X < (X)=INDEX NOEUD SUIVANT.
JMP AE784 < ACCES AU NOEUD SUIVANT.
<
< A P P E L S O U S - G R A M M A I R E :
<
CCICAL: EQU $
LA SRCOTO-DCTESC,W
CP INFINI < VERIFICATION QUE L'APPEL N'EST
< PAS IMBRIQUE DANS UN AUTRE
< APPEL.
JE SYSR54 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR JE PENSE LA 'SYSER' QUI EST
< SITUEE EN 'E784' ENVIRON...
<
SYSR54: EQU $
STX SRCOTO-DCTESC,W < SAUVEGARDE DE L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI DANS
< SRCOTO.
IC SRCOTO-DCTESC,W < SRCOTO DOIT CONTENIR EN FAIT
< L'INDEX DU NOEUD SUIVANT.
JMP CCIJMP < LA SUITE DU TRAITEMENT EST
< IDENTIQUE AU CCI JUMP.
<
< T Y P E U N C A R A C T E R E :
<
CCICT: EQU $
BSR ACARAC < ACCES AU CARACTERE COURANT
< DE BUFESC.
<
< ON A ICI :
< (A)=CARACTERE COURANT DE BUFESC,
< (B)=TYPE ATTENDU.
<
LYI CCITZZ < INITIALISATION.
CPI HZERO < CARACTERE<"0"...
ADCR Y
CPI HNEUF+E < CARACTERE=CHIFFRE...
ADCR Y
CPI KA < CARACTERES ENTRE LES CHIFFRES
< ET LES LETTRES...
ADCR Y
CPI KZ+E < CARACTERE>"Z"...
ADCR Y
CPR Y,B < COMPARAISON DU TYPE CHERCHE,
< AVEC LE TYPE DU CARACTERE COURANT.
JMP E787 < VERS LA DETERMINATION DU
< NOEUD SUIVANT.
<
< C H A R G E M E N T D ' U N P R O C E S S E U R :
<
<
< A T T E N T I O N :
< ON A ICI : (B)=K.
< (CF. LE FORMAT DE LA FONCTION F8 DU CCI) !!!
<
CCILP: EQU $
LA &AOTCCI < (A)=@DK DU PROCESSEUR SUR LE
< DISQUE DE SWAPPING.
ADRI XLPTO-XLPAD,X
LY &AOTCCI < (Y)=TAILLE OCTET MEMOIRE NECESSAIRE
< AU PROCESSEUR.
ADRI XLPRUN-XLPTO+XCCINX,X
PSR A < SAVE @DK DU PROCESSEUR.
<
< MISE EN PLACE DE LA ROUTINE DE FIN
< DE SERVICE, QUI POSITIONNERA L'ADRESSE
< DE LANCEMENT DU PROCESSEUR :
<
LA ARUNP
SBT XFSERV < PAS DE RECOVERY SI FSERV EST
< DEJA POSITIONNE.
BSR AFSERV < TEST ET RANGEMENT DE FSERV.
TBT XFSERV < TEST EN RETOUR DE L'EXECUTION
< DE AFSERV.
PLR A < RESTAURE (A)=@DK DU PROCESSEUR.
JC CCIS < FSERV N'A PAS ETE MODIFIE ;
< IL Y A SUREMENT UN ALT-MODE
< EN COURS ; ON IGNORE DONC LE
< LOAD-PROCESSOR, ET ON FAIT UNE
< SUSPENSION DU CCI POUR CETE
< ESCLAVE AFIN D'EXECUTER LA
< FIN DE SERVICE (D'ABORT !!!).
<
< OK, LE PROCESSEUR VA ETRE CHARGE :
<
STA DEMSWP-DCTESC+T+OPDEM,W
< CETTE ADRESSE DISQUE EST TRANSMISE
< AU SWAPER (IN) PAR L'INTERMEDIAIRE
< DE L'OPDEM DE LA DEMANDE DE SWAP.
STY DEMSWP-DCTESC+T+CODEM,W
< MISE A JOUR DE LA DEMANDE DE
< SWAPPING.
STX RECOTO-DCTESC,W < SAVE L'INDEX COURANT DE
< L'AUTOMATE DU CCI.
ADRI -D,K < DESTRUCTION DU REGISTRE B
< EMPILE A L'ENTREE DE CCI.
<
< ON A ICI :
< (B)=K (CE QUI EST PARFAIT POUR 'ARGAM1'...)
<
BSR ARGAM1 < ON EST DANS UNE SITUATION
< IDENTIQUE A CELLE DE LA 1ERE
< ALLOCATION MEMOIRE D'UN ESCLAVE.
<
< ON A ICI :
< BIT0(B)=1 : POUR FORCER LE SWAPPER,
< (B)=RANG DE L'ALLOCATEUR NECESSAIRE.
<
ADRI DCTESC-DEMSWP,W < RESTAURE (W)=@DCT-ESCLAVE.
JMP E953 < VERS LA SUSPENSION DU CCI.
<
< T E S T N U M E R O D E C O M P T E :
<
CCIACN: EQU $
LA &AOTCCI < (A)=CARACTERE 0 & 1 DE L'.
ADRI XACN2-XACN1,X
LB &AOTCCI < (B)=CARACTERES 2 & 3 DE L'.
CCIACP: EQU $
ADRI XACNNK-XACN2,X < RETOUR EN ERREUR AU CCI A PRIORI.
<
< COMPARAISON DU NUMERO DE L'UTILISATEUR
< AVEC CELUI CONTENU DANS (A,B) :
<
IF XXACN-2,,XEIF%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
CP ACNESC-DCTESC,W
JNE CCIJMP < NON COINCIDENCE.
LR B,A < 2EME PARTIE...
CP ACNESC-DCTESC+U,W
JNE CCIJMP < NON COINCIDENCE.
<
< CAS OU LE NUMERO DE COMPTE DE L'UTILISATEUR
< COINCIDE AVEC CELUI DU NOUED COURANT :
<
ADRI XACNOK-XACNNK,X < RETOUR OK AU CCI.
JMP CCIJMP
<
< T E S T D U N U M E R O D E C O M P T E : S Y S :
<
CCISYS: EQU $
LA ACNSYS
LB ACNSYS+U < (A,B)=NUMERO DE COMPTE DU SYSTEME.
ADRI XCCIM0-XCCIM1,X < RETOUR SUR LA FONCTION...
JMP CCIACP < VERS LE TEST DE ":SYS"...
<
< T E S T < E O M > :
<
CCIEOM: EQU $
BSR ACARAC < (A)=CARACTERE COURANT DE BUFGR.
JE CCIJMP < C'EST UN LIMITEUR (RETOUR-CHARIOT,
< 'EON' OU BIEN ENFIN LE POINT...).
JMP E787JN < ET BIEN NON, CE N'EST PAS UN CARACTERE
< LIMITEUR...
<
< T E S T I N T E R P R E T A T I F :
<
CCINT: EQU $
LA IDESC-DCTESC,W
TBT IDESCI < TEST DU BIT DE MODE DU CCI.
ADCR X < ON FAIT +1 SUR L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI (X) SI
< LE CCI EST EN MODE NON
< NON-INTERPRETATIF POUR CET ESCLAVE.
IF XCCINX-BIT,,XEIF%,
IF ATTENTION : 'ADCR' NE MARCHERA PAS !!!
XEIF%: VAL ENDIF
JMP CCIJMP < VERS L'ACCES AU NOEUD SUIVANT.
<
< T E S T D U M O D E D E L ' U T I L I S A T E U R :
<
<
< DEFINITION :
< UN USER EST DIT INTERACTIF SI NSPIN=NSPOUT,
< ET NON INTERACTIF DANS LE CAS CONTRAIRE.
<
CCIUSR: EQU $
BSR ACHKIN < COMPARAISON DE NSPIN ET DE
< NSPOUT DE L'UTILISATEUR.
JE CCIJMP < NSPIN=NSPOUT : L'UTILISATEUR
< EST CONSIDERE COMME ETANT
< INTERACTIF.
ADRI XUSRNI-XUSRUI,X < NSPIN#NSPOUT : L'UTILISATEUR
< EST CONSIDERE NON INTERACTIF.
JMP CCIJMP
PAGE
<
<
< C O M P A R A I S O N D U N S P I N E T D U
< N S P O U T D E L ' U T I L I S A T E U R :
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< RESULTAT :
< (A)=NSPIN DE L'UTILISATEUR.
< INDICATEURS POSITIONNES PRES POUR FAIRE UN
< 'JE' SI NSPIN=NSPOUT.
<
<
CHKIN: EQU $
PSR X < DANS LE CAS D'UN APPEL PAR LE
< CCI : SAVE L'INDEX COURANT DE LA
< GRAMMAIRE.
LXI PHIN
LBY &TASSGN-DCTESC,W
LXI PHOUT
CPBY &TASSGN-DCTESC,W
PLR X < DANS LE CAS D'UN RETOUR AU CCI :
< RESTAURE L'INDEX COURANT DE LA
< GRAMMAIRE.
RSR
PAGE
CALL #SISP CMS5 DOL1#
<
<
< I N I T I A L I S A T I O N D U P
< D ' U N P R O C E S S E U R :
<
<
< FONCTION :
< APPELEE EN FIN DE SERVICE UTILISATEUR,
< LORSQUE CELUI-CI A DEMANDE UN PROCESSEUR DU
< SYSTEME ; ELLE MODIFIE LE REGISTRE K :
< K <-- 2 ,
< ET MET A CETTE ADRESSE (K) L'ADRESSE DE
< LANCEMENT DU PROCESSEUR, QUI DEVIENT
< L'ADRESSE DE RETOUR DU 'SVC CCI'.
< SI L'APPEL A EU LIEU PAR QUIT, LE
< REGISTRE K EST RAZE,
< ET LE REGISTRE P EST INITIALISE
< DIRECTEMENT.
< DE PLUS ELLE RAZE LES REGISTRES
< A,B,X,Y,C,L,W DU PROCESSEUR DNAS
< LA PST UTILISATEUR.
<
<
< A T T E N T I O N :
< ON DOIT DONC RESERVER EN TETE DE
< CHAQUE PROOCESSEUR UNE ZONE D'AU MOINS
< 2 MOTS POUR QU'IL CONSERVE SON
< INTEGRITE LORS D'UN 'RUNP'...
<
<
< ARGUMENT :
< (W)=ADRESSE DEMSER.
< (DESTRUCTIBLE).
<
<
RUNP: EQU $
<
< A T T E N T I O N :
< QUAND ON EST ICI, LA ZONE
< MEMOIRE DE L'UTILISATEUR EST RESIDENTE !!!!
<
LX RECOTO-DEMSER,W < RECUPERATION DE L'INDEX COURANT
< DE LA GRAMMAIRE DU CCI.
ADRI -XCCINX,X < PASSAGE SUR L'ADRESSE DE
< LANCEMENT DU PROCESSEUR.
LX &AOTCCI < (X)=@LANCEMENT DU PROCESSEUR.
STX PRESC-DEMSER,W < PRESC RECOIT A PRIORI L'ADRESSE
< DE LANCEMENT DU PROCESSEUR DE
<
< BASE DE CMS4 QUE L'ON LANCE.
<
< E N T R Y ' G O B P E ' :
<
<
< ON A ICI :
< (X)=FUTUR REGISTRE P (OU DE RETOUR),
< (W)=ADRESSE DEMSER.
<
<
CPZ PSTESC-DEMSER+RS,W < TEST DU MODE DE L'UTILISATEUR :
< MAITRE : APPEL PAR SVC,
< ESCLAVE : APPEL PAR QUIT.
IF MS-BITSIG,,XEIF%,
IF ATTENTION : LE TEST EST IDIOT !!!
XEIF%: VAL ENDIF
JGE Z870 < L'ESCLAVE ETANT EN MODE ESCLAVE,
< ON PEUT INITIALISER DIRECTEMENT
< SON REGISTRE P AVEC L'ADRESSE
< DE LANCEMENT DU PROCESSEUR.
<
< CAS D'UN ESCLAVE EN MODE MAITRE : ON NE
< PEUT QU'INITIALISER LE P DE RETOUR
< DU SVC AVEC L'ADRESSE DE LANCEMENT
< DU PROCESSEUR :
<
LA PSTESC-DEMSER+RSLO,W < (A)=(SLO).
BSR APDADR < (A)=SLO*16 (EN MOTS)
ADRI XMOT2,A < (A)=(SLO)+2, POUR INITIALISER
< LE REGISTRE K (ON PREND
< (SLO)+2 AU CAS OU LE PRESC
< SERAIT NUL, CE QUI SIGIFIE
< UN PASSAGE PAR LE SVC CCI !!!).
XR A,W < (W)=ADRESSE ABSOLUE SOMMET PILE
< UTILISATEUR
STX O,W < ADRESSE DE LANCEMENT DU PROCESSEUR
XR A,W
LAI XMOT2
STA PSTESC-DEMSER+RK,W < STOCKAGE DU K
< TRANSLATABLE DE L'UTILISATEUR
LXI RW-RA+Z < POUR RAZ DE : A,B,X,Y,C,L,W.
JMP Z871 < VERS L'INITIALISATION DES
< REGISTRES DE L'ESCLAVE.
<
< CAS D'UN ESCLAVE EN MODE ESCLAVE,
< ON PEUT INITIALISER DIRECTEMENT
< SON REGISTRE P AVEC L'ADRESSE DE
< LANCEMENT DU PROCESSEUR (QUIT) :
<
Z870: EQU $
STX PSTESC-DEMSER+RP,W < INITIALISATION DIRECTE DE 'P'.
LXI RK-RA+Z < POUR RAZ DE : A,B,X,Y,C,L,W,K.
Z871: EQU $
LA FSERV-DEMSER,W < POUR DISCRIMINER RUNP DE GOBPE.
STZ FSERV-DEMSER,W < RAZ DE LA ROUTINE DE FIN DE
< SERVICE.
CP AGOBPE < ETAIT-CE GOBPE ???
JE Z1140 < OUI, ON NE TOUCHE DONC PAS
< AUX REGISTRES DE L'UTILISATEUR.
<
< CAS DE RUNP : RAZ DES REGISTRES DU PROCESSEUR :
<
E960: EQU $
STZ PSTESC-DEMSER,W
ADRI P,W < REGISTRE SUIVANT DANS LA PST
< DE L'UTILISATEUR.
JDX E960 < AU SUIVANT...
Z1140: EQU $ < ENTRY POUR GOBPE.
RSR < GO BACK TO HDLSER.
PAGE
<
<
< G E S T I O N D U ' P R E S C ' U T I L I S A T E U R :
<
<
< FONCTION :
< ! : PROVOQUE UNE REMISE A 0 DU PRESC,
< ! : PROVOQUE UN RETOUR AU PROGRAMME
< DE L'UTILISATEUR, TEL QUE :
< P(ESCLAVE)<--(PRESC).
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< C O M M A N D E ! < E O T > :
<
<
RPRESC: EQU $
STZ PRESC-DCTESC,W < LA COMMANDE '!' REMET
< A 0 LE PRESC DE L'ESCLAVE.
RSR < ET C'EST TOUT...
<
<
< C O M M A N D E ! < R / C > :
<
<
MPRESC: EQU $
LA AGOBPE < (A)=@ROUTINE DE FIN DE SERVICE
< PERMETTANT UN RETOUR AU PROGRAMME
< ESCLAVE PAR 'PRESC'.
JMP Z932 < VERS LE POSITIONNEMENT DE
< 'FSERV'.
<
<
< R E T O U R P R O G R A M M E
< E S C L A V E P A R P R E S C :
<
<
< FONCTION :
< CETTE ROUTINE DE FIN DE SERVICE PERMET
< UN RETOUR AU PROGRAMME ESCLAVE PAR
< PRESC ; CE RETOUR EST TRAITE COMME
< L'INITIALISATION D'UN PROCESSEUR
< DE BASE DE CMS4.
< EN FAIT, SI (PRESC)<0 : LE ALT-MODE
< SOLITAIRE EST IGNORE.
<
<
< A T T E N T I O N :
< DANS LE CAS OU BIT0(DEMSWP)=1,
< C'EST-A-DIRE LORSQUE LE SWAPPING
< EST BLOQUE POUR UN ESCLAVE, LE
< RETOUR A PRESC EST REMPLACE PAR
< UN ABORT. C'EST UN CAS QUI SE RENCONTRE
< DANS LE DEBUG, LORSQUE L'ON FAIT
< PAR EXEMPLE 'S,0', PUIS 'M...'
< LE TOUT SUIVI D'UN ALT-MODE...
<
<
< T R E S I M P O R T A N T :
< LE MOT D'ADRESSE (SLO)+XMOTX CORRESPOND
< AU MOT 'CDRET' DEFINI DANS LE SYSTEME
< D'ENSEIGNEMENT 'SMC' ; LES PROCES-
< SEURS DE 'SMC' L'UTILISE PARFOIS
< POUR SAVOIR SI UN ALT-MODE A ETE RECU ;
< IL FAUT DONC QUE CETTE CORRESPONDANCE
< SUBSISTE :
<
< CDRET=(SLO)+XMOTX...
<
<
< ARGUMENT :
< (W)=ADRESSE DEMSER.
< (DESTRUCTIBLE).
<
<
GOBPE: EQU $
XMOTX:: MOT XMOT2 < MOT UTILISE DANS L'ESPACE UTILISATEUR
< POUR INDIQUER LA RECEPTION D'UN ALT-
< MODE SOLITAIRE, EN DONNANT LE 'P' ACTIF
< A CE MOMENT ; LES AUTRES REGISTRES SONT
< INCHANGES...
CPZ DEMSWP-DEMSER+XXNSP,W
JL Z1500 < BIT0(DEMSWP)=1 : LE SWAPPING
< EST BLOQUE POUR CET ESCLAVE,
< ON VA DONC EN FAIT ABORTER.
<
< CAS OU BIT0(DEMSWP)=K : RETOUR A PRESC.
<
LA RECOTO-DEMSER,W < (A)=INDEX COURANT DE LA GRAMMAIRE
< DU CCI DE L'ESCLAVE.
CP INFINI < UN LOGOUT EST-IL DEMANDE ???
JE Z871 < OUI, ALORS LE ALT-MODE QUI
< PROVOQUE CE RETOUR AU PROGRAMME
< UTILISATEUT EST IGNORE...
LX PRESC-DEMSER,W < RECUPERATION DANS X DU PRESC
< COURANT DE L'ESCLAVE.
CPZR X < MAIS EN REALITE, EST-CE BIEN
< UN P DE RETOUR ???
JL Z871 < ET BIEN NON, PRESC<0 INDIQUE
< QUE LES ALT-MODES SOLITAIRES
< DOIVENT ETRE IGNORES...
PSR B,Y < PRENONS LE ALT-MODE EN COMPTE :
LA PSTESC-DEMSER+RSLO,W
BSR APDADR
LR A,Y < (A)=Y=(SLOESC) EXPRIME EN MOTS...
CPZ PSTESC-DEMSER+RS,W < ALORS QUEL EST LE MODE ???
IF MS-BITSIG,,XEIF%,
IF ATTENTION : LE TEST EST IDIOT !!!
XEIF%: VAL ENDIF
JGE Z930X1 < ESCLAVE...
<
< CAS DU MODE MAITRE : LE ALT-MODE
< SOLITAIRE EST APPARU ALORS QU'UN
< 'SVC' ETAIT EN COURS :
<
AD PSTESC-DEMSER+RK,W
XR A,W < 'W' POINTE L'ENTREE COURANTE DE LA
< PILE 'K', ET DONNE DONC :
LB O,W < (B)=REGISTRE 'P' DE RETOUR DU 'SVC'...
STX O,W < QUE L'ON REMPLACE PAR LE 'PRESC' (X).
XR A,W
ADRI -XMOTX,A
CPR A,Y < LE MOT 'XMOTX' CORRESPONDRAIT-IL
< AU SOMMET DE LA PILE OU L'ON A RANGE
< LE 'PRESC' DE RETOUR ???
JE Z930X3 < OUI, C'EST LE CAS EN PARTICULIER OU
< L'ON UTILISE LA COMMANDE 'MPRESC'
< A LA SUITE D'UNE TRAPPE...
JMP Z930X2 < VERS L'INDICATION DU ALT-MODE...
<
< CAS DU MODE ESCLAVE : LE ALT-MODE
< SOLITAIRE EST APPARU PENDANT LE
< RUN DU PROGRAMME, OU ALORS QU'UN
< 'QUIT 0' ETAIT EN COURS :
<
Z930X1: EQU $
LB PSTESC-DEMSER+RP,W < (B)=REGISTRE 'P' COURANT,
STX PSTESC-DEMSER+RP,W < QUE L'ON REMPLACE PAR LE 'PRESC' (X).
<
< INDICATION A L'UTILISATEUR PAR
< 'XMOTX' QU'UN ALT-MODE SOLITAIRE
< EST APPARU : ON MET DANS 'XMOTX'
< LE 'P' COURANT...
<
Z930X2: EQU $
XR Y,W
STB XMOTX,W < ET VOILA...
XR Y,W
Z930X3: EQU $
PLR B,Y
JMP Z871 < VERS LA SORTIE, ET L'ANNULATION
< DU 'FSERV' EN COURS...
<
< CAS OU BIT0(DEMSWP)=1 : ABORT.
<
Z1500: EQU $
LA AABORT < (A)=@ROUTINE DE FIN DE SERVICE
< D'ABORT,
STA FSERV-DEMSER,W < QUI REMPLACE LA ROUTINE DE FIN
< DE SERVICE DE RETOUR A PRESC
< DESTINEE AU HANDLER DE SERVICE.
JMP Z1140 < VERS UN RETOUR IMMEDIAT AU
< HANDLER DE SERVICE.
PAGE
<
<
< E X E C U T I O N D E S D E M A N D E S
< D E P R O C E E D :
<
<
<
<
< P R O C E E D :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE PAR
< L'INTERMEDIARE DE LA GRAMMAIRE DU CCI,
< LORS DE LA RENCONTRE DE LA COMMANDE
< '!GO'. ELLE POSITIONNE LA DEMANDE D'UNE
< ROUTINE DE FIN DE SERVICE.
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
PROCED: EQU $
LA AGOON < @ROUTINE DE FIN DE SERVICE, POUR
< EXECUTION DU PROCEED.
<
< E N T R Y M P R E S C :
<
Z932: EQU $
<
< ON A ICI :
< (A)=ADRESSE ROUTINE DE FIN DE SERVICE
< A METREE DANS 'FSERV'.
<
BSR AFSERV < TEST ET RANGEMENT DE FSERV.
RSR < IL FAUT EVIDEMMENT QU'UNE
< SUSPENSION DU CCI SUIVE (CF.
< LA GRAMMAIRE DU CCI).
<
<
< R E T O U R E S C L A V E :
<
<
< FONCTION :
< CETTE ROUTINE EST PAPELEE EN FIN DE
< SERVICE, ELLE A A SA CHARGE LA
< MODIFICATION DU REGISTRE P DE RETOUR
< L'ESCLAVE, TEL QUE L'ON DEPASEE
< LA SVC CCI.
<
<
< ARGUMENT :
< (W)=ADRESSE DEMSER.
<
<
GOON: EQU $
STZ FSERV-DEMSER,W < SUPPRESSION DE LA ROUTINE DE
< FIN DE SERVICE.
LA PSTESC-DEMSER+RS,W < DISCRIMINATION DE L'APPEL AU 'CCI' :
TBT SVCS < PAR UN 'SVC' ???
JC Z842 < SVCS=1 : L'APPEL A EU LIEU PAR 'SVC'...
<
< CAS D'UN ESCLAVE EN MODE ESCLAVE ;
< L'APPEL A EU LIEU PAR QUIT :
<
CPZ PSTESC-DEMSER+RP,W < TEST DU REGISTRE P(ESCLAVE).
JE Z60 < P(ESCLAVE) EST NUL, ON EST
< SUREMENT SUR LE QUIT INITIAL
< DE L'ESPACE MEMOIRE ESCLAVE.
IC PSTESC-DEMSER+RP,W < ON INCREMENTE DIRECTEMENT
< LE REGISTRE P DE L'ESCLAVE,
< PUISQUE CELUI-CI EST EN
< MODE ESCLAVE.
JMP Z60 < RETOUR SANS TOUCHER AU REGSITRE
< X DE L'ESCLAVE LORS D'UN QUIT.
<
< CAS D'UN ESCLAVE EN MODE MAITRE ;
< L'APPEL A DONC EU LIEU PAR SVC :
<
Z842: EQU $
PSR A < SAUVEGARDE DE 'RS'...
LRM A
WORD RETSVC < (A)=VALEUR DU REGISTRE 'P' D'UN UTILI-
< SATEUR LORSQUE CELUI-CI A FAIT UN
< 'SVC'...
CP PSTESC-DEMSER+RP,W
< L'UTILISATEUR AYANT SVCS=1, AVANT DE LE
< (RE-)METTRE EN MODE MAITRE, VERIFIONS
< QU'IL A BIEN LE BON REGISTRE 'P' ???
PLR A < RESTAURE :
< (A)=REGISTRE 'S'...
JNE Z60 < IL EST DIFFERENT, ON LE LAISSE DONC
< INCHANGE, MAIS SURTOUT, ON NE REMET
< PAS L'UTILISATEUR EN MODE MAITRE !!!
< CELA PEUT SE PRODUIRE DE LA FACON
< SUIVANTE :
< 1 - L'UTILISATEUR EST SOUS "DEBUG",
< 2 - IL A FAIT : "S,0" PUIS A MODIFIE
< LE REGISTRE 'P' PAR "P,...",
< 3 - ENFIN, IL EST SORTI DU "DEBUG"
< PAR LA COMMANDE "!GO" ;
< DONC, ARRIVANT ICI SUITE AU "!GO", ON
< TROUVE 'SVCS'=1, ON DEDUIT QU'IL Y EU
< 'SVC', ET ON REFORCE DONC LE MODE
< MAITRE QUI AVAIT ETE ANNULE SOUS LE
< "DEBUG" PAR L'UTILISATEUR... MAIS 'RP'
< N'EST PLUS BON, ON LAISSE DONC L'UTILI-
< SATEUR EN MODE ESCLAVE...
SBT MS < DANS LE CAS D'UN APPEL PAR 'SVC', ON
STA PSTESC-DEMSER+RS,W < ON REMET A PRIORI L'UTILISATEUR EN
< MODE MAITRE (AU CAS OU IL SERAIT
< PASSE SOUS "DEBUG"...).
LA PSTESC-DEMSER+RSLO,W < (A)=(SLO).
BSR APDADR < (A)=SLO*16
AD PSTESC-DEMSER+RK,W < (A)=K ABSOLUTISE
XR A,W < (W)=K ABSOLU
< (A)=ADRESSE DCTESC
CPZ O,W < TEST DU P DE RETOUR
JE Z60Z < S'IL EST NUL, ON NE FAIT RIEN
< CAR ON EST SUREMENT A LA SUITE
< D'UN ALT-MODE OU DU LOGIN
IC O,W < SAUTONS LE 'SVC CCI'. EN EFFET
< A L'ENTREE DU 'SVC CCI', ON
< FAIT -1 SUR LE REGISTRE P DE RETOUR
XR A,W < (W)=ADRESSE DCT ESCLAVE
< (A)=K ABSOLU
<*******************************************************************************
BSR ASTXES < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
STZ PSTESC-DEMSER+RX,W < RAZ DU REGISTRE X DE L'ESCLAVE
<*******************************************************************************
Z60: EQU $
RSR < RETOUR A L'ESCLAVE.
Z60Z: EQU $
XR A,W < (W)=ADRESSE DCT ESCLAVE
< (A)=K ABSOLU
JMP Z60
CALL #SISP CMS5 DOL2#
PAGE
<
<
< R O U T I N E S D E S E R V I C E D U C C I :
<
<
<
<
< E M I S S I O N M E S S A G E :
< R E C E P T I O N M E S S A G E :
<
<
< ARGUMENTS :
< (W)=ADRESSE DE LA DCT-ESCLAVE,
< (L)=ADRESSE DE LA DCT-SERVICE,
< (A)=ADRESSE MOT MESSAGE : EMISSION DEMANDEE SUR 'PHOUT',
< =0 : RECEPTION DEMANDEE SUR PHIN DANS BUFESC,
< (B)=LONGUEUR OCTET DU MESSAGE.
< (LORS D'UNE EMISSION).
<
<
< RESULTATS :
< (A)=ADRESSE DCT(ESCLAVE).
< (Y)=NSPTYP SUR NSPIN/OUT DE L'ESCLAVE.
<
<
USE L,DCT0
USE W,DEM0
MESSI: EQU $ < RECEPTION SUR PHIN.
LAI FGR < DEMANDE DE LECTURE.
MESSO: EQU $ < DEMANDE D'EMISSION SI (A)#0, ET
< DE RECEPTION SI (A)=K.
PSR X < SAVE INDEX COURANT GRAMMAIRE.
JAE E854 < UNE RECEPTION EST DEMANDEE.
IF FGR-K,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%: VAL ENDIF
<
< PREPARATION DE L'EMISSION VERS NSPOUT :
<
LXI PHOUT < NVP DU PERIPH.OUT.
SLLS NOCMO=K < CONVERSION DE L'ADRESSE-MOT
< EN UNE ADRESSE OCTET.
STA VAR+DEMCCI+T+AMDEM
LAI FGW < OPDEM D'UNE ECRITURE.
<
< REALISATION DE L'EMISSION/RECEPTION :
<
E855: EQU $
STB VAR+DEMCCI+T+CODEM
STA VAR+DEMCCI+T+OPDEM
LBY &TASSGN-DCTESC,W
SWBR A,A < (A)='NSPTYP' D'UNE DEMANDE DE LECTURE/
< ECRITURE SUR 'NSPIN'/'NSPOUT' DE
< L'ESCLAVE...
STA VAR+DEMCCI+XXNSP
LR A,Y < SAVE LE NSPTYP DANS Y, UTILISE
< LORS DE L'EMISSION DE L'INTERRO-
< GATION DU CCI.
LAD VAR+DEMCCI
XR A,W
<
< ON A ICI :
< (A)=ADRESSE DCT(ESCLAVE).
< (W)=ADRESSE DEMCCI.
<
Z846: EQU $
BSR ACHAND < ENVOI DE LA DEMANDE.
WAIT WEIO < ATTENTE IMMEDIATE DE LA FIN
< DE L'OPERATION.
CPZ ARGDEM+ETADEM < TEST DES CONDITIONS DE RETOUR ???
JNE Z845 < ON EST PROBABLEMENT EN PRESENCE
< D'UN TERMINAL DE TYPE VISU
< GRAPHIQUE QUI SE TROUVE EN MODE
< GRAPHIQUE, OU BIEN UN 'ALT-MODE'
< A ETE ENVOYE PAR L'ESCLAVE
< PENDANT LA SORTIE DU MESSAGE ;
< CE SONT LES SEULS CAS
< D'ERREUR POSSIBLE (???).
<
< OK, DEMANDE EXECUTEE, IL Y A
< PEUT-ETRE DES CONNEXIONS
< MATRICIELLES A EXPLOITER :
<
PSR A,X
LA ARGDEM+OPDEM
ANDI MKOPDM < (A)=FONCTION COURANTE, ET
< (W)=ADRESSE DE LA DEMANDE COURANTE...
SVC SVCM8 < VERS LA DUPLICATION EVENTUELLE DE LA
< DEMANDE (W) SUR LES PERIPHERIQUES
< CONNECTES AU PERIPHERIQUE COURANT...
PLR A,X
<
< FIN DE 'MESSI'/'MESSO' :
<
PLR X < RESTAURE (X)=INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
LR A,W < RESTAURE (W)=@DCT-ESCLAVE.
LA FSERV-DCTESC,W < ACCES AU FSERV DE L'ESCLAVE,
< AFIN DE SAVOIR SI UN OU
< PLUSIEURS ALT-MODE(S) ONT ETE
< EMIS PAR L'UTILISATEUR PENDANT
< LE MESSAGE.
CP AABORT < UN ABORT A-T'IL ETE DEMANDE ???
< (C'EST-A-DIRE 2 ALT-MODES ONT-
< ILS ETE FRAPPES???) ; CE TEST EST
< RENDU OBLIGATOIRE PAR LA
< POSSIBILITE QU'A UN UN PROGRAMME
< ESCLAVE DE BOUCLER SUR UN APPEL
< AU CCI NON INTERACTIF ; ET DANS
< CES CONDITIONS, IL FAUT QUAND
< MEME POUVOIR ABORTER CE
< PROGRAMME !!!
JE Z1520 < TOUT ABORT DEMANDE EST CONSERVE!!!
STZ FSERV-DCTESC,W < ET OUI, IL FAUT ENCORE RAZER
< FSERV AU CAS OU UN ALT-MODE
< AURAIT ETE FRAPPE PENADANT LA
< SORTIE D'UN MESSAGE (CF. !DATE) ;
< C'EST PAS POUR DIRE, MAIS
< L'INTRODUCTION DES 2 ALT-
< MODES D'ABORT N'A PAS SIMPLIFIE
< LES CHOSES...
Z1520: EQU $
LR W,A < RESTAURE : (A)=@DCT-ESCLAVE.
RSR
<
< TRAITEMENT DES ERREURS D'EXECUTION :
<
Z845: EQU $
<
< NOTA :
< LE REGISTRE X EST DESTRUCTIBLE.
<
LX ARGDEM+OPDEM
PSR X < SAUVEGARDE DE L'OPDEM COURANT
< DE LA DEMANDE DU CCI.
LXI FAVCG < FONCTION 'CLOSE GRAPHIQUE'.
STX ARGDEM+OPDEM < GENERATION D'UNE DEMANDE
< DE 'CLOSE GRAPHIQUE'.
PLR X < POUR EVITER DES DEBORDEMENTS
< DE LA PILE DU HDL-SERVICE.
<
< ON A ICI :
< (W)=ADRESSE DEMCCI.
< (X)=OPDEM DE LA DEMANDE REELLE.
<
BSR ACHAND < ENVOI DE LA DEMANDE DE
< 'CLOSE GRAPHIQUE'.
WAIT WEIO < ATTENTE DE FIN DE 'CLOSE
< GRAPHIQUE'.
STX ARGDEM+OPDEM < RESTAURE L'OPDEM DE LA DEMANDE.
CPZ ARGDEM+ETADEM < ALORS ???
JE Z846 < CELA C'EST BIEN PASSE...
LXI YCCITO
BSR ADODO < LE 'CCI' EST MIS EN SOMMEIL AFIN DE
< PERMETTRE UN EVENTUEL CHANGEMENT DE
< L'ETAT DE LA VISU SANS BLOQUER LE
< SYSTEME SUR DES RETOURS EN ERREURS
< PERPETUELS !!!
JMP Z846 < NOUVELLE TENTATIVE D'EXECUTION
< DE LA DEMANDE.
<
< PREPARATION DE LA RECEPTION DE NSPIN :
<
E854: EQU $
LXI PHIN
LA DEMESC-DCTESC+T+CODEM,W
STA VAR+MBUFGR < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
LR W,A < (A)=@DCT-ESCLAVE.
ADRI BUFESC-DCTESC,A < (A)=@MOT DE BUFESC.
SBT BITX < CONSTITUTION D'UN RELAI EN
< VUE D'UNE EVENTUELLE ANALYSE
< SYNTAXIQUE DU MESSAGE RECU.
STA VAR+ABUFGR
STZ VAR+XBUFGR
SLLS NOCMO=K < CONVERSION EN UNE @OCTET DE
< L'ADRESSE BUFFER (A NOTER QUE
< LE BIT D'INDEXATION A DISPARU...)
STA VAR+DEMCCI+T+AMDEM
LAI FGR < OPDEM D'UNE LECTURE SANS ECHO.
LBI LCCI < COMPTE D'OCTETS MAX.
JMP E855
PAGE
<
<
< C A R A C T E R E C O U R A N T D E B U F E S C :
<
<
< FONCTION :
< CETTE ROUTINE FOURNIT LE
< CARACTERE COURANT DU 'BUFESC'
< DANS LE REGISTRE 'A' ; DE PLUS
< ELLE ELIMINE LES 'NULLS', ET
< CECI A CAUSE DE LA DIRECTIVE
< "ASCI" DE L'ASSEMBLEUR QUI EN
< GENERE LORSQUE LE NOMBRE DE
< CARACTERES EST IMPAIR. ENFIN,
< ELLE INDIQUE AU DEMANDEUR SI
< LE CARACTERE NON NUL RENVOYE
< EST UNE FIN DE MESSAGE ('R/C',
< 'EON' OU BIEN ".").
< DE PLUS, SAUF LORSQUE LA DEMANDE
< VIENT DES COMMANDES DU TYPE "!M..."
< (CE QUE L'ON IDENTIFIE PAR UN TEST
< DE MASQUAGE DES INTERRUPTIONS), LE
< BIT DE PARITE EST SYSTEMATIQUEMENT
< EFFACE...
<
<
< RESULTAT :
< (A)=CARACTERE COURANT DE BUFESC (NON 'NULL'),
< ='EOT' SI ON SE TROUVE EN BOUT DE BUFFER CCI.
< XBUFGR : PROGRESSE D'UNE UNITE,
< INDICATEURS POSITIONNES SUR UN TEST DE LIMITEUR.
< ('R/C', 'EON' OU ".")
<
<
CARAC: EQU $
CARAC0: EQU $ < REBOUCLAGE SUR 'NULL'...
<
< ACCES AU CARACTERE COURANT :
<
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
LXI KEON < 'EOT' A PRIORI.
LA VAR+XBUFGR < (A)=INDEX COURANT DU BUFFER CCI.
CPI LCCINT < VALIDATION...
JLE Z305X2 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT L'INDEX
< DU BUFFER 'CCI' PEUT ETRE EN
< DEBORDEMENT ; EXAMINER 'ABUFGR'
< ET SURTOUT 'MBUFGR' !!!
<
Z305X2: EQU $
CP VAR+MBUFGR < EST-ON EN BOUT DU BUFFER "VISIBLE" ???
XR A,X < (A)='EOT' A PRIORI,
< (X)=INDEX COURANT DU BUFFER CCI.
JGE Z305 < LORSQU'ON EST EN BOUT DE
< BUFFER CCI, ON RENVOIE DANS
< A UN 'EOT' SIMULANT UN .
LBY &VAR+ABUFGR < (A)=CARACTERE COURANT DE BUFESC.
TBT BITPAR < A-T'IL LA PARITE ???
JNC Z305X1 < NON...
PSR A < OUI, ON LE SAUVEGARDE,
BSR ASMIT < QUEL EST L'ETAT DES INTERRUPTIONS ???
< (C'EST UN TEST PEU ELEGANT DES COMMAN-
< DES "!M... ; EN EFFET, ELLES UTILISENT
< LE BIT DE PARITE : CF. 'KCRP' ET 'KEOTP')
XWOR%1: VAL K
XWOR%1: VAL CORBT?IPM=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL CORBT?IOM=FMASK(K?XWOR%1=FCINST
CPI XWOR%1 < ALORS LES INTERRUPTIONS SONT-ELLES
< MASQUEES ???
PLR A < RESTAURE : (A)=CARACTERE COURANT...
JNE Z305X1 < OUI, DONC ON NE TOUCHE PAS AU BIT
< DE PARITE : C'EST UNE COMMANDE "!M...".
RBT BITPAR < NON, ON ELEMINE LA PARITE AFIN D'IGNORER
< LA PROVENANCE DU CARACTERE...
Z305X1: EQU $
Z305: EQU $
IC VAR+XBUFGR < PROGRESSION DE L'INDEX COURANT
< DE BUFESC.
PLR X < RESTAURE INDEX GRAMMAIRE.
<
< TEST DE LIMITEUR :
<
CPI KCR < EST-CE LE RETOUR-CHARRIOT ???
JE Z305JE < OUI...
CPI KEON < EST-CE ???
JE Z305JE < OUI...
CPI KPOINT < EST-CE LE POINT ???
JAE CARAC0 < ON ELIMINE LES 'NULL', AFIN DE FACILI-
< TER L'ECRITURE DES PROGRAMMES UTILI-
< SATEUR EXPLOITANT LA DIRECTIVE "ASCI"
< DE L'ASSEMBLEUR QUI EN GENERE EN BOUT
< DE CHAINES EN CAS D'UN NOMBRE IMPAIR
< DE CARACTERES.
< CE 'JAE' EST MIS APRES LE TEST SUR
< 'EON' A CAUSE DES DEBORDEMENTS DE
< L'INDEX 'XBUFGR' : AINSI ON NE BOUCLERA
< EN CAS D'UNE SUITE DE 'NULLS' EN FIN
< FIN DE BUFFER, SANS CARACTERE DE FIN DE
< MESSAGE EXPLICITE...
Z305JE: EQU $
<
< SORTIE :
<
RSR
<
<
< F I N D E N O M :
<
<
EON:: VAL KEON < CARACTERE DE 'FIN DE NOM'.
PAGE
<
<
< D E P L A C E M E N T D A N S ' B U F G R ' :
<
<
< FONCTION :
< CE MODULE PERMET D'AVANCER
< OU DE RECULER DANS LE BUFFER
< UTILISATEUR 'BUFGR'.
< DEUX ENTRIES SONT DISPO-
< NIBLES : L'UNE POUR AVANCER
< ('ICXBUF'), ET L'AUTRE POUR
< RECULER ('DCXBUF').
<
<
< ARGUMENT :
< (B)=VALEUR ABSOLUE DU DEPLACEMENT.
<
<
DCXBUF: EQU $ < ENTRY 'RECULER' :
NGR B,B < AFIN D'AVOIR UN DEPLACEMENT ARRIERE...
ICXBUF: EQU $ < ENTRY 'AVANCER' :
LA VAR+XBUFGR < (A)=INDEX COURANT,
ADR B,A < ON SE REPOSITIONNE EN RELATIF,
STA VAR+XBUFGR < ET ON MET A JOUR...
RSR
PAGE
<
<
< I N I T I A L I S A T I O N D E ' V A L E S C ' :
<
<
< ARGUMENTS :
< (B)=VALEUR POSITIVE A DONNER A 'VALESC',
< (W)=ADRESSE DE 'DCTESC'.
<
<
< RESULTAT :
< (VALESC)=(B).
<
<
PSTVAL: EQU $
STB VALESC-DCTESK,W < AIN'T IT HARD...
RSR
PAGE
<
<
< C H A N G E M E N T D E ' C A R A L T ' S U R ! W :
<
<
< FONCTION :
< LORS DE LA FRAPPE DE !W, ON REMPLACE
< 'CARALT' LORSQU'IL S'AGIT D'UN UTILISATEUR
< INTERACTIF, PAR LE DERNIER CARACTERE FRAPPE
< ENTRE "!W" ET ; S'IL N'EXISTE PAS,
< 'CARALT' DEMEURE INCHANGE...
<
<
CCIALT: EQU $
BSR ACHKIN < RENVOIE : (A)=NSPIN,
JE CCIAL1 < OK, NSPIN=NSPOUT (UTILISATEUR
< INTERACTIF COMME LE PREVOIT LA GRAMMAIRE.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR COMMENT ON A PU EN ARRIVER LA !!!
<
JMP CCIAL2 < ET ON SORT...
CCIAL1: EQU $
PSR X,L
LR A,X < (X)=NSPIN,
BSR ACARAC < (A)=CARACTERE COURANT DU 'BUFESC' ; A
< NOTER QUE, VUE LA GRAMMAIRE DU 'CCI',
< IL NE PEUT S'AGIR D'UN ...
LR A,B < (B)=CARACTERE COURANT ; A NOTER QUE L'ON
< FAIT AINSI, CAR 'CARAC' A BESOIN DE
< LA BASE 'L' !!!
BSR ACADCT < (L)=ADRESSE DE LA DCT(NSPIN)...
STB VAR+CARALT < LE CARACTERE COURANT DEVIENT 'CARALT'...
PLR X,L
CCIAL2: EQU $
RSR
PAGE
<
<
< C A R A C T E R E S D E C O M M A N D E
< D U S G N :
<
<
SPLUS:: VAL KPLUS < INSERTION D'UN CHEMIN,
SMOINS:: VAL KMOINS < SUPPRESSION D'UN CHEMIN.
PAGE
<
<
< I N S E R T / D E L E T E A C N :
<
<
< RESULTAT :
< (Y)=7, POUR VALIDATION ACN DANS 'ACNON',
< OPDEM(DEMCCI)=2 (FONCTION INSERT/DELETE).
<
<
LOGNEW: EQU $
LA MEMV
TBT MEMXXX < INSERT/DELETE ACN AUTORISES ???
JC LOGNW1 < OUI, ON Y VA...
ADRI XCCIER,X < NON, RETOUR EN ERREUR...
JMP LOGNW2 < ET ON SORT...
LOGNW1: EQU $
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
< DU CCI.
LX VAR+DEMCCI+T+CODEM
LAI EON < EN EFFET, ON RAJOUTE EN QUEUE
< DE L'ACN UN 2EME POUR
< INITIALISER A VIDE LE SOUS-
< CATALOGUE DES NOMS DE CE
< NUMERO DE COMPTE.
STBY &VAR+ABUFGR < STORE IN BUFFER.
IC VAR+DEMCCI+T+CODEM < ON FAIT COMME SI CE 2EME
< AVAIT ETE ENVOYE PAR
< LE DEMANDEUR.
PLR X < RESTAURE L'INDEX DE LA GRAMMAIRE.
XVACN7:: VAL XXACN*NOCMO+W+W+W
LYI XVACN7 < EN EFFET, DANS LE CAS D'UN
< INSERT/DELETE, ON A :
< ::=<+/->
< .
LAI FGID < FONCTION INSERT/DELETE.
STA VAR+DEMCCI+T+OPDEM
LOGNW2: EQU $
RSR
<
<
< P R E P A R A T I O N D ' U N L O G I N :
<
<
< RESULTAT :
< (Y)=5, POUR VALIDATION ACN DANS 'ACNON',
< OPDEM(DEMCCI)='A (FONCTION TEST).
<
<
LOGOLD: EQU $
XVACN5:: VAL XXACN*NOCMO+W
LYI XVACN5 < DANS LE CAS D'UN LOGIN, ON :
< ::=K4>.
LAI FGT < FONCTION DE TEST.
STA VAR+DEMCCI+T+OPDEM
RSR
<
<
< C H E C K N U M E R O D E C O M P T E
< A U L O G I N :
<
<
< FONCTION : CETTE ROUTINE EST APPELEE PAR
< LE CCI LORS DE LA RENCONTRE DE 'LOGIN'.
< ELLE RECUPERE L'ACN, ET PAR
< L'INTERMEDIAIRE DE HDLTRI, LE VALIDE.
<
<
< ARGUMENTS :
< (Y)=5, SI LOGIN NORMAL,
< 7, SI OPERATION INSERT/DELETE ACN,
< OPDEM(DEMCCI)='A, SI LOGIN NORMAL,
< '2, SI OPERATION INSERT/DELETE ACN,
< (L)=ADRESSE DCT(SERVICE),
< (W)=ADRESSE DCT(ESCLAVE).
<
<
ACNON: EQU $
LA VAR+DEMCCI+T+CODEM
SB VAR+XBUFGR < (A)=LONGUEUR DE L'ACN SUPPOSE.
CPR A,Y < VALIDATION : RAPPELONS QU'UN
< ACN EST :
< ::=.
< (AVEC <+>/<-> DANS LE CAS
< INSERT/DELETE).
JNE Z42 < ERREUR DE FORMAT.
<
< CAS OU LA LONGUEUR EST CORRECTE :
<
STA VAR+DEMCCI+T+CODEM < MAJ CODEM POUR HDLTRI.
LA VAR+DEMCCI+T+AMDEM
AD VAR+XBUFGR < (A)=@OCTET DE L'ACN SUPPOSE.
STA VAR+DEMCCI+T+AMDEM < MAJ AMDEM EN VUE DE HDLTRI.
STZ VAR+DEMCCI+T+ASDEM
LAI NSPTRI
SWBR A,A
STA VAR+DEMCCI+XXNSP < GENERATION DU NSPTYP DE DEMANDE
< D'HDLTRI.
LAD VAR+DEMCCI
XR A,W < (W)=@DEMCCI (VERS HDLTRI),
< (A)=SAVE W (@DCT-ESCLAVE).
BSR ACHAND < ENVOI DE LA DEMANDE A HDLTRI.
WAIT WEIO < ATTENTE DE FIN DE TEST DANS
< L'ARBRE DU SYSTEME.
LR A,W < RESTAURE (W)=@DCT-ESCLAVE.
<
< TEST DES CONDITIONS DE RETOUR :
<
LA VAR+DEMCCI+T+ETADEM
JANE Z42 < ACN NON RECONNU : ERREUR.
<
< DISCRIMINATION LOGIN/OPERATION-ACN :
<
LR Y,A
CPI XVACN7 < EST-CE UN INSERT/DELETE 'ACN' ???
JE Z43X < OUI, C'EST TOUT.
<
<
< L O G I N :
<
<
<
< OK, ACN RECONNU, L'UTILISATEUR
< PEUT RENTRER DANS LE SYSTEME :
<
DC VAR+DEMCCI+T+CODEM < SUPPRESSION DE ENN VUE
< DU MOVE DE L'ACN VERS LA DCT
< DE L'UTILISATEUR.
LAI FGW < FONCTION D'ECRITURE.
STA VAR+DEMCCI+T+OPDEM
LAD ACNESC-DCTESC,W < (A)=@MOT DE L'ACN DANS DCT-ESCLAVE.
SLLS NOCMO=K < (A)=@OCTET OU METTRE L'ACN
< DANS DCT-ESCLAVE.
STA VAR+DEMCCI+T+ASDEM
LAI NSPMEM
SWBR A,A
STA VAR+DEMCCI+XXNSP < GENERATION D'UN NSPTYP VERS
< HDLMEM, POUR DEPLACER L'ACN
< RECONNU DU BUFFER VERS ACNESC.
LAD VAR+DEMCCI
XR A,W < (W)=@DEMCCI,
< (W)=@DCT-ESCLAVE.
BSR ACHAND < ENVOI DE LA DEMANDE DE MOVE.
BSR ACHANW < ATTENTE DE FIN DE MOVE.
LR A,W < RESTAURE (W)=@DCT-ESCLAVE.
<
< SORTIE DE LA ROUTINE :
<
Z43: EQU $
RSR
<
< RETOUR EN ERREUR DE LA ROUTINE :
<
Z42: EQU $
ADRI XCCIER,X < PROGRESSION DE L'INDEX COURNAT
< DE LA GRAMMAIRE DU CCI (ERREUR).
JMP Z43 < VERS LA SORTIE.
<
<
< I N S E R T / D E L E T E A C N :
<
<
Z43X: EQU $
PSR X
LX VAR+XBUFGR < (X)=INDEX COURANT DU BUFFER CCI,
LBY &VAR+ABUFGR < (A)=CARACTERE COURANT "+" OU "-".
CPI SMOINS < EST-CE UN 'DELETE' ???
LAI SPLUS < EN TOUT CAS,
STBY &VAR+ABUFGR < ON FORCE UN 'INSERT'...
PLR X
JNE Z43 < CE N'EST PAS UN 'DELETE', ON SORT...
<
< CAS DU 'DELETE' D'UN :
<
LAI FGT < (A)=FONCTION DE TEST...
STA VAR+DEMCCI+T+OPDEM
LAI XVACN5 < (A)=LONGUEUR EN OCTETS POUR UN TEST...
STA VAR+DEMCCI+T+CODEM
IC VAR+DEMCCI+T+AMDEM
< ON SAUTE LE CARACTERE "-"...
STZ VAR+DEMCCI+T+ASDEM
LAD VAR+DEMCCI
XR A,W < (W)=ADRESSE DE LA DEMANDE VERS 'HDLTRI',
BSR ACHAND < ENVOI D'UN DEMANDE DE TEST DE ...
WAIT WEIO < ATTENTE DE FIN DE TEST,
LR A,W < RESTAURE W...
LA VAR+DEMCCI+T+ETADEM < ALORS ???
JANE Z43 < OK, L' N'EXISTE PLUS, LE 'DELETE'
< S'EST BIEN PASSE : IL N'Y AVAIT PAS
< DE CATALOGUE DERRIERE LUI (MIS A PART
< LE PREMIER ).
<
< CAS OU L' EXISTE ENCORE : SON
< CATALOGUE N'ETAIT PAS VIDE, IL FAUT
< DONC RECREER SA RACINE ...
<
LAI FGID < (A)=FONCTION INSERT/DELETE : NE PAS OUBLI
< QU'ON A REMPLACE "-" PAR "+" DANS LE
< BUFFER DU CCI ==> 'INSERT'...
STA VAR+DEMCCI+T+OPDEM
LAI XVACN7 < (A)=LONGUEUR EN OCTETS POUR UN 'INSERT'.
STA VAR+DEMCCI+T+CODEM
DC VAR+DEMCCI+T+AMDEM
< POSITIONNEMENT SUR LE "+"...
STZ VAR+DEMCCI+T+ASDEM
LAD VAR+DEMCCI
XR A,W < (W)=ADRESSE DE LA DEMANDE A 'HDLTRI',
BSR ACHAND < ENVOI D'UNE DEMANDE DE REINSERTION
< DE L' ET SURTOUT DE LA RACINE
< DE SON CATALOGUE NON VIDE...
BSR ACHANW < ATTENTE AVEC 'SYSER' SUR DEFAUT...
LR A,W < RESTAURE W...
JMP Z42 < ET ON FAIT UNE SORTIE EN ERREUR
< PUISQUE FINALEMENT ON N'A PAS DELETE...
PAGE
<
<
< M E M O R I S A T I O N D ' U N L O G I N
< I N I T I A L S O U S : S Y S E T T E S T :
<
<
< FONCTION :
< LE BIT 'IDESC2' DE LA 'DCTESC' MEMORISE
< SI LE LOGIN INITIAL A EU LIEU SOUS ":SYS"
< OU PAS. ON DISPOSE, SI CELA EST LE CAS D'UNE
< COMMANDE SPECIALE !L DE CHANGEMENT DE NUMERO
< DE COMPTE EN VOL...
< DE PLUS, APRES CHAQUE LOGIN
< SOUS ":SYS", ON RETABLIT SYSTEMA-
< TIQUEMENT L'UTILISATION DU TOM
< ED ESSAP, AU CAS OU L'ON EN SERAIT
< A UNE PHASE DE REINITIALISATION
< GENERALE DU SYSTEME, AU COURS DE
< LAQUELLE LE PREMIER LOGIN SOUS ":SYS"
< NE NECESSITE PAS LE TOM ED ESSAP,
< AU CAS OU JE NE SERAIS PAS LA ??!??!
<
<
< M E M O R I S A T I O N :
<
<
INDSYS: EQU $
LA IDDESC-DCTESC,W
SBT IDESC2 < MEMORISATION DE ":SYS" INITIAL...
STA IDDESC-DCTESC,W
NLS
<
< RETABLISSEMENT SYSTEMATIQUE DU TOM ED ESSAP :
<
PSR A,W
LRM A,W
WORD N335X1
WORD AN335
STA O,W < LORS DU TEST DU NUMERO DE COMPTE, APRES
< LE LOGIN, ON SE BRANCHERA SI ":SYS" SUR
< LE NOEUD 'N335' D'ENTREE DU TOM ED
< ESSAP...
PLR A,W
LST
RSR
<
<
< T E S T :
<
<
TESSYS: EQU $
LA IDDESC-DCTESC,W
TBT IDESC2 < ETAIT-ON INITIALEMENT SOUS ":SYS" ???
JC TESSY1 < OUI, OK...
ADRI XCCIER,X < NON, ERREUR...
TESSY1: EQU $
RSR < ET C'EST TOUT...
<
<
< P O I N T D E N O N R E T O U R :
<
<
< FONCTION :
< LA COMMANDE "!L" PERMET
< LORSQU'ON S'EST LOGUE INITIALE-
< MENT SOUS ":SYS", ET QUE L'ON
< Y EST PLUS D'INHIBER DEFINITI-
< VEMENT LE RETOUR POSSIBLE A
< L' ":SYS", D'OU LE NOM...
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
PNRET: EQU $
LA IDDESC-DCTESC,W
TBT IDESC2 < ALORS ETAIT-ON INITIALEMENT SOUS ":SYS" ?
RBT IDESC2 < A PRIORI, POINT DE NON RETOUR...
STA IDDESC-DCTESC,W
JC PNRET1 < OK, ON ETAIT INITIALEMENT SOUS ":SYS" (ON
< N'Y EST PLUS D'AILLEURS, C'EST LA GRAM-
< MAIRE DU 'CCI' QUI L'A DEJA VERIFIE LORS-
< QU'ON ARRIVE ICI...), ON NE POURRA PLUS
< Y REVENIR, NI PLUS CHANGER NON PLUS
< DYNAMIQUEMENT D'...
ADRI XCCIER,X < IL N'Y A PAS EU DE LOGIN INITIAL SOUS
< ":SYS", OU BIEN UN POINT DE NON RETOUR
< A DEJA ETE FRANCHI...
PNRET1: EQU $
RSR < ET C'EST TOUT...
PAGE
<
<
< G E S T I O N D E S P R I O R I T E S :
<
<
< FONCTION :
< ON DISPOSE DE 2 PRIORITES :
< 1 - LA PRIORITE NORMALE (ETAT INITIAL,
< ET SUITE A LA COMMANDE "!L0"),
< 2 - LA PRIORITE INFERIEURE (SUITE A
< LA COMMANDE "!L1").
< LA PRIORITE INFERIEURE PROVOQUE
< UN SWAPPING OUT A PRIORI, SANS
< UTILISER L'"HORLOGE" DE SWAPPING,
< ET PEUT PROVOQUER UNE INTERUPTION
< DE CET UTILISATEUR, LORSQU'UN
< AUTRE EST EN FIN DE SERVICE...
<
<
< ARGUMENT :
< (W)=ADRESSE DE LA 'DCT-ESCLAVE'.
<
<
LPRIO: EQU $
<
<
< P R I O R I T E N O R M A L E :
<
<
LPRIO0: EQU $
LA IDDESC-DCTESC,W
RBT IDESC6 < IDESC6=0 : PRIORITE NORMALE...
JMP LPRIOA < VERS LA MEMORISATION...
<
<
< P R I O R I T E I N F E R I E U R E :
<
<
LPRIO1: EQU $
LA IDDESC-DCTESC,W
SBT IDESC6 < IDESC6=1 : PRIORITE INFERIEURE...
<
< MEMORISATION DE LA PRIORITE :
<
LPRIOA: EQU $
STA IDDESC-DCTESC,W
RSR
PAGE
<
<
< C O M M A N D E D E S C O M M A N D E S :
<
<
< FONCTION :
< CETTE COMMANDE PERMET D'ENCHAINER
< AUTOMATIQUEMENT UNE SERIE DE COMMANDES
< , ,... EN RESPECTANT LA
< SYNTAXE SUIVANTE, ET A CONDITION D'ETRE
< UN UTILISATEUR TEMPS PARTAGE ('NSPIN'=
< 'NSPOUT') :
<
< !M....
<
< OU EST LE PREMIER CARACTERE RENCONTRE
< DERRIERE "!M" ET QUI DEFINIT LE SUBSTITUT DE
< POUR CHACUNE DES COMMANDES ; IL
< EST ALORS REMPLACE PAR ...
<
<
< ATTENTION :
< LA COMMANDE "!M" EST LA SEULE
< POUR LAQUELLE, SAUF IMMEDIATEMENT
< DERRIERE LE "M", LE CARACTERE
< 'KPOINT' (".") N'EST PAS CONSIDERE
< COMME LIMITEUR, AFIN EN PARTICULIER
< POUVOIR RENCONTRER DES "!C." DANS
< "!M"...
<
<
STBAV: EQU $
BSR ACARAC < ACCES AU CARACTERE COURANT DANS 'A', ET
< TEST D'UN LIMITEUR DES LE DEBUT :
JE STBAV4 < EFFECTIVEMENT C'EST "!M"...
LR A,Y < (Y)=LIMITEUR UTILISE POUR LES COMMANDES
< INTERMEDIAIRES ().
BSR ACHKIN < (A)=NSPIN DE L'UTILISATEUR :
JE STBAV5 < OK, ON A BIEN : 'NSPIN'='NSPOUT'...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR POURQUOI LE TEST SUR L'INTERACTIVITE
< EST ICI NEGATIF, ALORS QUE DANS LA GRAMMAIRE
< IL FUT POSITIF !!!
<
JMP STBAV4 < ET ON ABANDONNE...
STBAV5: EQU $
PSR B,X,L < SAUVEGARDE DE L'INDEX COURANT DE LA
< GRAMMAIRE DU 'CCI' (X) ET L'ADRESSE
< DE 'DCTSER' (L).
LR L,B < (B)=ADRESSE DE 'DCTSER' (POUR PERMETTRE
< L'ACCES AU 'BUFESC').
LR A,X < (X)='NSPIN',
BSR ACADCT < (A)=(L)=ADRESSE DE LA 'DCTVIS' DE
< L'UTILISATEUR...
BSR ABETA2 < (A)=BETA(SIT(VISU(NSPIN))) :
IF XXSIT0-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT (AINSI QU'AILLEURS
IF DANS LE SYSTEME) EST IDIOT !!!
XEIF%: VAL ENDIF
JAGE STBAV6 < OK, LA VISU N'EST PAS EN ATTENTE...
LXI FIVALT < ALLONS BON, LA VISU EST EN ATTENTE,
< MAIS N'EST -CE PAS POUR LE TEST DU
< "ALT-MODE" ???
LA &VISOTO < (A)=ETAT SUITE A UN "ALT-MODE",
CP ETAT1 < L'ETAT COURANT DE LA VISU NE SERAIT-IL
< PAS CELUI QUI SUIT LA RECEPTION D'UN
< PREMIER "ALT-MODE" ???
JE STBAV8 < OUI, DONC ON ABANDONNE IMMEDIATEMENT,
< EN ERREUR, BIEN QU'EN FAIT CELA SOIT
< UN PEU INDIFFERENT...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT CETTE VISU PEUT
< ETRE EN ATTENTE, ALORS QUE SON UTILISATEUR
< EST DANS LE 'CCI' !!! IL SE PEUT QU'ELLE
< SOIT ASSIGNEE PAR QUELQU'UN D'AUTRE, QUI
< A LANCE UNE ENTREE-SORTIE DESSUS, ALORS
< QUE SON POSSESSEUR UTILISE LE 'CCI'
< INTERPRETATIF...
<
JMP STBAV8 < ET ON ABANDONNE... (MAIS EN ERREUR...)
STBAV6: EQU $
<
< BOUCLE DE RECUPERATION DES CARACTERES :
<
BSR ASMMK < ON MASQUE LES INTERRUPTIONS AFIN D'ACCE-
< DER PROPREMENT AU BUFFER D'ANTICIPATION
< DE LA VISU (ON MASQUE GLOBALEMENT, ET NON
< PAS AU NIVEAU DE CHAQUE CARACTERE, POUR
< DES RAISONS DE PERFORMANCE...).
STBAV1: EQU $
<
< ON A ICI :
< (B)=ADRESSE DE 'DCTSER',
< (Y)=LIMITEUR DE CHAQUE COMMANDE,
< (L)=ADRESSE DE LA 'DCTVIS'.
<
XR B,L < AFIN D'ACCEDER A 'DCTSER' :
BSR ACARAC < (A)=CARACTERE COURANT DU 'BUFESC', ET
< TEST DE LIMITEUR...
XR B,L < AFIN D'ACCEDER A 'DCTVIS'...
JE STBAV2 < C'EST LA FIN DE LA COMMANDE "!M"...
STBAVA: EQU $ < RETOUR LORSQUE "." A ETE DETECTE, ET
< BETEMENT DECLARE COMME UN LIMITEUR
< PAR 'CARAC', CE QUI EST FAUX DANS
< LA COMMANDE "!M"...
CPR A,Y < NON, ALORS EST-ON SUR ???
JNE STBAV3 < NON, ON GARDE LE CARACTERE (A)...
LAI KEON < OUI, ON LE REMPLACE PAR 'EON'...
STBAV3: EQU $
KEOTP:: VAL COSBT?BITPAR=FMASK(K?KEOT=FCINST
< 'EOT' AVEC BIT DE PARITE,
KCRP:: VAL COSBT?BITPAR=FMASK(K?KCR=FCINST
< 'CR' AVEC BIT DE PARITE.
CPI KCRP < EST-CE LE 'CR' AVEC BIT DE PARITE ???
JE STBAV9 < OUI, CELA NE CONSTITUE PAS UNE ERREUR,
< ET CELA PERMET AUX UTILISATEURS, MAIS
< SURTOUT AUX COMMANDES PRE-PROGRAMMEES
< DE FORCER DES 'CR' ET DES 'EOT', ET SUR-
< TOUT DE LES DISTINGUER (CF. 'DEBUG'...).
CPI KEOTP < EST-CE 'EOT' AVEC BIT DE PARITE ???
JE STBAV9 < OUI, MEME REMARQUE...
TBT BITPAR < NON, ALORS COMMENT EST LE BIT DE PARITE ?
JC STBAWC < POSITIONNE, ERREUR !!!
SBT BITPAR < AFIN D'ASSURER LA COMPATIBILITE AVEC
< LES VRAIES ENTREES VISUS, ON FORCE
< LE BIT DE PARITE ('BITPAR').
<
< INSERTION DU CARACTERE (A)
< DANS LE BUFFER D'ANTICIPATION :
<
STBAV9: EQU $ < CAS DE 'KCRP' ET 'KEOTP'...
LR A,X < (X)=SAVE LE CARACTERE ENTRE...
LA VAR+KCWIO < ACCES AU NOMBRE DE CARACTERES EN ATTENTE,
CPI XXVNCM-Z-Z < Y-A-T'IL DEBORDEMENT ???
< NOTA : ON FAIT '-Z-Z' AFIN QU'UN
< 'ALT-MODE' TAPPE ENSUITE NE PROVOQUE
< PAS UNE 'SYSER' DANS 'ITVIS' POUR
< DEBORDEMENT DU BUFFER...
JGE STBAWC < OUI : CE CARACTERE EST IGNORE !!!
LA VAR+ICWIN < NON, (A)=INDEX D'INSERTION...
ADRI I,A < PROGRESSION DE L'INDEX,
CPI XXVNCW < DEBORDE-T'IL ???
JL STBAW7 < NON...
NTRN
LAI XXVIN+I/XXVNCW(K=FCREST < OUI, ON LE REINITIALISE...
TRN
STBAW7: EQU $
XR A,X < (A)=CARACTERE LU,
STBY &VAR+ALVCW < QUE L'ON MET DANS LE BUFFER,
IC VAR+KCWIO < ET UN CARACTERE DE PLUS...
STX VAR+ICWIN < PUIS MISE A JOUR DE L'INDEX.
BSR ARVHDL < ON REVEILLE (ENFIN, ON AGIT SUR 'SIT')
< LE 'HDLVIS(IN)' POUR DES RAISONS DE
< COMPATIBILITE AVEC 'HDLMUL'...
JMP STBAV1 < AU CARACTERE SUIVANT...
<
< FIN NORMALE :
<
STBAV2: EQU $ < CAS D'UN LIMITEUR RENCONTRE :
CPI KPOINT < LE LIMITEUR RENCONTRE NE SERAIT-IL PAS
< PAR MALHEUR LE CARACTERE 'KPOINT' ???
JE STBAVA < OUI, "!M" EST LA SEULE COMMANDE DU 'CCI'
< POUR LAQUELLE 'KPOINT' N'EST PAS UN
< LIMITEUR AU MEME TITRE QUE OU
< ...
BSR ASMDK < ON DEMASQUE LES INTERRUPTIONS...
PLR B,X,L < RESTAURE :
< (X)=INDEX DE LA GRAMMAIRE DU 'CCI',
< (L)=ADRESSE DE 'DCTSER'...
STBAV4: EQU $
RSR
<
< SORTIE EN ERREUR :
<
STBAWC: EQU $
BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS...
STBAV8: EQU $
PLR B,X,L < RESTAURE L'INDEX DE LA GRAMMAIRE DU
< 'CCI', ET L'ADRESSE DE 'DCTSER'...
ADRI XCCIER,X < POUR UN RETOUR EN ERREUR AU 'CCI'...
JMP STBAV4 < VERS LA SORTIE...
PAGE
<
<
< C O M M A N D E D E C O M M A N D E S
< P R E P R O G R A M M E E S :
<
<
< FONCTION :
< LA COMMANDE "!N PERMET
< DE REFERENCER DES COMMANDES "!M..."
< PRE-PROGRAMMEES DANS LA GRAMMAIRE
< DU 'CCI'.
<
<
KLIMS:: VAL KSLASH < CARACTERE LIMITEUR UTILISE COMME SUBSTI-
< TUT DE ; VOIR DANS "!M"...
<
<
< V A L I D A T I O N E T I N I T I A L I S A T I O N :
<
<
< ARGUMENT :
< (L)=ADRESSE DE 'DCTSER',
< (W)=ADRESSE DE LA 'DCTESC',
< VALESC=NUMERO DE LA COMMANDE PREPROGRAMMEE.
<
<
P1COM: EQU $
<
< VALIDATION DU NUMERO DE COMMANDE :
<
LA VALESC-DCTESK,W < (A)=NUMERO DE LA COMMANDE DEMANDEE :
WORD CPCOM0 < VALIDATION INFERIEURE ???
JL P1COM1 < ERREUR, N'EXISTE PAS...
WORD CPCOMN < VALIDATION SUPERIEURE ???
JGE P1COM1 < ERREUR, N'EXISTE PAS...
<
< POINTONS SUR LA COMMANDE :
<
PSR W < SAUVEGARDE DE L'ADRESSE DE 'DCTESC',
LRM W
WORD LCOMP < (W)=ADRESSE DE LA LISTE DES RELAIS
< INDEXES VERS LES DIFFERENTES COMMAN-
< COMMANDES,
ADR A,W < (W)=ADRESSE DU RELAI VERS LA COMMANDE
< DESIREE,
LA O,W < (A)=RELAI INDEXE VERS LA COMMANDE...
IF BITX-BITSIG,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JAL P1COM3 < OK, LE RELAI EST BON...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR SI LE RELAI EST VRAIMENT
< MAUVAIS, OU SI C'EST SON ADRESSE !!!
<
P1COM3: EQU $
PLR W < RESTAURE :
< (W)=ADRESSE DE 'DCTESC'.
XM VAR+ABUFGR < MISE DANS LE RELAI COURANT DU BUFFER
< DU RELAI VERS LA COMMANDE COURANTE, ET
< (A)=SAVE LE RELAI COURANT VERS LE
< BUFFER 'BUFESC',
STA VALESC-DCTESK,W < QUE L'ON MET EN TEMPORAIRE (JUSQU'A
< 'P3COM') DANS 'VALESC'...
STZ VAR+XBUFGR < ET ON POINTE SUR LE DEBUT DE LA
< COMMANDE DEMANDEE, SUR LA DEFINITION
< DE ; A NOTER QUE "!M" EST IMPLI-
< CITE...
LAI LCCINT
STA VAR+MBUFGR < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
<
< SORTIE :
<
P1COM2: EQU $
RSR
<
< SORTIE EN ERREUR :
<
P1COM1: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR AU 'CCI'...
JMP P1COM2 < VERS LA SORTIE...
<
<
< E R R E U R S Y S T E M E :
<
<
P2COM: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE :
< REPERER LA COMMANDE "!M..." PRE-
< PROGRAMMEE COURANTE, ET VOIR COMMENT
< ELLE A PU ETRE REFUSEE !!!
<
RSR
<
<
< F I N D E " ! N " :
<
<
< FONCTION :
< CE MODULE RETABLIT LES CONDITIONS
< INITIALES D'AVANT "!N" ; MAIS EST-CE
< VRAIMENT UTILE : ON NE RETABLIT PAR
< 'XBUFGR', NI 'MBUFGR', ET CELA A
< L'AIR DE BIEN MARCHER !!!
<
<
P3COM: EQU $
LA VALESC-DCTESK,W < (A)=RELAI INDEXE VERS 'BUFESC',
STA VAR+ABUFGR < CE QUI PERMET DE REGENERER LE RELAI
< COURANT DU BUFFER POUR LE 'CCI'...
RSR
<
<
< C O M M A N D E S P R E - P R O G R A M M E E S
< D E
< C O M M A N D E S P R E - P R O G R A M M E E S :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST UTILISE
< POUR COMMUNIQUER UN NUMERO DE
< COMMANDE "!N" IMPLICITE, PERMETTANT
< DE COMPACTER EN QUELQUE SORTE PAR
< EXEMPLE LES ASSIGNATIONS LES PLUS
< FREQUENTES...
<
<
< ARGUMENTS :
< (B)=NUMERO DE "!N" IMPLICITE,
< (W)=ADRESSE DE 'DCTESC'.
<
<
< RESULTATS :
< VALESC(DCTESC)=NUMERO DE "!N" IMPLICITE
< COMPATIBLE AVEC 'P1COM'.
<
<
P4COM: EQU PSTVAL
PAGE
<
<
< D E S A S S I G N A T I O N G L O B A L E
< D E L A T A S S G N :
<
<
< FONCTION :
< CES 2 ROUTINES APPELEES PAR L'INTERMEDIAIRE
< DE LA COMMANDE !CLOSE, PERMETTENT DE FAIRE
< SUR CHAQUE ENTREE DE TASSGN !ASSIGN NVP=S ;
< ON PARCOURT TASSGN D'UNE MANIERE INCREMENTALE
< DE NVP=PHOUT+1 A NVP=2*LTASGN-1.
<
<
< ARGUMENT :
< YSER(DCTESC)=LE NVP COURANT SUR LEQUEL
< ON TENTE UN !ASSIGN...=S.
<
<
< I N I T I A L I S A T I O N N V P :
<
<
< RESULTAT :
< YSER(DCTESC)=PHOUT.
<
<
INVP2: EQU $
XMAXIO:: VAL PHOUT < MAXIMUM A PRIORI...
IF PHIN-PHOUT,XEIF%,XEIF%,
XMAXIO: VAL PHIN < ET BIEN NON, C'EST 'PHIN' LE MAX...
XEIF%: VAL ENDIF
LYI XMAXIO < Y <-- MAX(PHIN,PHOUT).
STY YSER-DCTESC,W < INITIALISATION YSER(DCTESC)=2.
RSR < C'EST TOUT...
<
<
< P R O G R E S S I O N D U N V P C O U R A N T :
<
<
< RESULTAT :
< YSER(DCTESC)<--(YSER(DCTESC))+1,
< X<--(X)+1, SI YSER>=2*LTASSGN.
< (CF. LA ROUTINE 'NVPAS')
<
<
NVPP1: EQU $
IC YSER-DCTESC,W < +1 SUR LE NVP COURANT.
LA YSER-DCTESC,W < (A)=NVP COURANT POUR LES
< VALIDATIONS D'USAGE.
JMP Z810 < VERS 'NVPAS'.
PAGE
<
<
< A S S I G N A T I O N : N V P --> N S P :
<
<
< FONCTION :
< CES ROUTINES SONT PAPPELLEES LORS DE
< LA RENCONTRE D'UNE COMMANDE D'ASSIGNATION
< D'UN NVP A UN NSP ; LA SYNTAXYE EN EST :
<
< !ASSIGN =.
<
<
< ARGUMENTS :
< (L)=ADRESSE DCT(SERVICE),
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< V A L I D A T I O N D ' U N N V P :
<
<
< FONCTIONS :
< 'NVPAS' : DETERMINE SI LE 'NVP' EST ASSIGNE,
< 'NVPASD' : IDEM, MAIS SANS RECUPERER LE 'NVP' DANS
< LE BUFFER D'ANALYSE SYNTAXIQUE (UTILISE
< PAR LA COMMANDE DE DELETE FICHIER) AUQUEL
< CAS 'Y' EST UN ARGUMENT DONNANT LE 'NVP'...
<
<
< RESULTAT :
< (Y)=NVP SI NVP NON ASSIGNE,
< NVP.OR.'FF80, SI NVP DEJA ASSIGNE (Y<0).
<
<
NVPAS: EQU $
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
LX VAR+XBUFGR < (X)=RANG DU 1ER CARACTERE DU
< NVP SUPPOSE.
LAD VAR+ABUFGR < (A)=@RELAI VERS LE BUFFER.
BSR AHEXIN < CONVERSION NUMERIQUE DU NVP
< DANS LE REGISTRE A ; CELUI-CI EST
< DANS LE BUFFER D'ENTREE CODE
< EN HEXA-DECIMAL.
STX VAR+XBUFGR < SAVE NOUVEL INDEX COURANT DU
< MESSAGE.
PLR X < RESTAURE (X)=INDEX GRAMMAIRE.
<
< VALIDATION DU NVP :
<
CPI XMAXIO < IL EST INTERDIT D'ASSIGNER
< PHIN ET PHOUT.
JLE Z72 < ERREUR.
Z810: EQU $ < ENTRY POUR 'NVPP1'.
CPI NOCMO*LTASGN
JGE Z72 < ERREUR.
<
< OK, NVP RECONNU :
<
LR A,Y < TRANSMISSION DU NVP PAR Y A
< ASSIGN EVENTUELLEMENT.
NVPASD: EQU $
XR X,Y < (X)=NVP, (Y)=INDEX GRAMMAIRE CCI.
LBY &TASSGN-DCTESC,W
JAE Z206 < (A)=K : LE NVP N'EST PAS ASSIGNE.
XWOR%1: VAL MSKNSP=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE...
XSKNSP:: VAL MSKNSP>XWOR%1)MFFFF
LAI XSKNSP < (A)='FF80 : LE NVP EST ASSIGNE.
Z206: EQU $
IF NSPVID-K,,XEIF%,
IF ATTENTION: CE QUI SUIT EST MAUVAIS !!!
XEIF%: VAL ENDIF
ORR A,X < X<0 SI NVP DEJA ASSIGNE.
XR X,Y < RESTAURE :
< (X)=INDEX GRAMMAIRE CCI,
< (Y)=NVP SI PAS ASSIGNE,
< NVP.OR.'FF80 SI DEJA ASSIGNE.
Z73: EQU $
RSR
<
< ERREUR : NVP INVALIDE :
<
Z72: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR AU CCI.
JMP Z73
<
<
< A S S I G N D U M M Y :
<
<
< FONCTION :
< CE MODULE IDENTIQUE A 'ASSIGN',
< PERMET D'ASSIGNER UN NVP AU NSP
< DUMMY (NSPDUM), QUI PERMET DE
< FAIRE DES SVC DONT LES DEMANDES SONT
< IGNOREES, SANS POUR CELA PROVOQUER
< UN RETOUR EN ERREUR.
<
<
< SYNTAXE :
< !ASSIGN =
<
<
< ARGUMENTS :
< CF. 'ASSIGN' SAUF POUR LE REGISTRE
< B DONT LE CONTENU EST POSITIONNE
< ICI-MEME PUISQUE L'INTERPRETEUR
< DE LA GRAMMIARE DU CCI RAZE
< SYSTEMATIQUEMENT LE BIT0 DE CHQUE
< NOEUD !!!
<
<
DUMMY: EQU $
LBI NSPDUM < (B)=NSP DUMMY.
<
<
< A S S I G N D A N S T A S S G N :
<
<
< ARGUMENTS :
< (B)=NSP DEMANDE (OCTET0 DU NOEUD COURANT DE
< LA GRAMMAIRE DU CCI),
< (Y)=NVP DEMANDE SI PAS ASSIGNE,
< NVP.OR.'FF80 SI DEJA ASSIGNE,
< (TRANSMIS PAS NVPAS),
< (W)=ADRESSE DCT-ESCLAVE.
<
<
ASSIGN: EQU $
PSR X < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
LR B,A < (A)=NSP DEMANDE.
CPI NSPVID
JE Z207 < C'EST UNE DESASSIGNATION, PAR
< CONSEQUENT LE SIGNE DE Y EST
< INDIFFERENT (NVP DEJA ASSIGNE
< OU PAS )...
<
< CAS D'UNE ASSIGNATION :
<
CPZR Y
JL Z208 < ERREUR : LE NVP EST DEJA ASSIGNE
< ALORS QU'UNE ASSIGNATION EST
< DEMANDEE SUR LUI.
CPI NSPDUM < EST-CE UNE ASSIGNATION DUMMY ???
JE Z207 < OUI, IL N'Y A DONC PAS DE
< LOCATION A FAIRE ; ON VA
< DIRECTEMENT VERS L'ASSIGNATION
< DANS TASSGN.
<
< TEST ET LOCATION DU NSP :
<
LR A,X < (X)=NSP DEMANDE.
LBI XXNLOC < MODE DE LOCATION SANS ATTENTE
< DANS LE CAS OU LE NSP EST
< DEJA LOUE.
BSR ALODCT < TEST PUIS LOCATION EVENTUELLE.
CPZR B < TEST DE LA LOCATION.
JNE Z208 < ERREUR : LE NSP EST DEJA LOUE :
< A NOTER QUE CE PEUT ETRE POUR
< CET ESCLAVE ; EN EFFET, ON
< NE PEUT ASSIGNER PLUSIEURS NVP
< SUR LE MEME NSP.
CPZR Y < RE-TEST DE Y (NVP).
Z212: EQU $
JG SYSR55 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT-ETRE UN 'JMP Z208'...
<
SYSR55: EQU $
<
< R E A L I S A T I O N D E L ' A S S I G N :
<
Z207: EQU $
LXI XSKNSP)MFFFF < MASQUE DE RECUPERATION DU
< NVP QUELQUE SOIT SON SIGNE.
ANDR Y,X < (X)=NVP DEMANDE.
Z214: EQU $
<
< ON A ICI :
< (X)=NVP DEMANDE.
< (A)=NSP DEMANDE.
< (OU PHIN/PHOUT POUR !ASSIGN I/O).
<
STBY &TASSGN-DCTESC,W < ASSIGNATION DANS TASSGN.
PLR X < RESTAURE INDEX COURANT DE
< LA GRAMMAIRE DU CCI.
Z209: EQU $
RSR
<
< ERREUR : NVP DEJA ASSIGNE LORS D'UNE ASSIGNATION :
<
Z208: EQU $
PLR X < RESTAURE INDEX GRAMMAIRE CCI.
ADRI XCCIER,X < RETOUR EN ERREUR AU CCI.
JMP Z209
<
<
< A S S I G N S U R I N / O U T :
<
<
< I M P O R T A N T :
< DANS LE CAS DES !ASSIGN I/O, IL
< N'Y A PAS DE LOCATION DES DCT, CE
< QUI PERMET PLUSIEURS ASSIGNATIONS
< I/O SUMULTANEES, ET DE PLUS CELA
< PERMET UN FONCTIONNEMENT CORRECT
< DES JOBS BATCH FAISANT DES ASSIGN =I
< (DONC SUR CR1), ALORS QUE CR1 EST
< ASSIGNE A LA CONSOLE QUI A EMIS
< LA COMMANDE !X...
<
<
< ARGUMENTS :
< (W)=ADRESSE DCT(ESCLAVE).
< (B)=NVP (PHIN/PHOUT),
< (Y)=NVP DEMANDE.
<
<
ASSIO: EQU $
PSR X < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
LR B,X < (X)=NVP (PHIN/PHOUT).
Z208X: EQU $
LBY &TASSGN-DCTESC,W
JANE SYSR56 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT-ETRE CORRIGER 'TASSGN'
< DE LA 'DCTESC', PUIS FAIRE
< UN 'JMP Z208X'...
<
SYSR56: EQU $
CPZR Y < TEST PRELIMINAIRE D'ASSIGNATION ???
JL Z208 < ERREUR : LE NVP EST DEJA ASSIGNE.
LR B,A < OK : (A)=PHIN/PHOUT.
JMP Z207 < VERS LA REALISATION DE L'ASSIGN.
PAGE
<
<
< A S S I G N A T I O N D U S Y S T E M E
< D E G E S T I O N D E S N O M S :
<
<
< FONCTION :
< CETTE ROUTINE APPELEE PAR !SGN,
< FAIT LES ASSIGNATIONS SUIVANTES :
< 3-->NSPDLN,
< 4-->NSPSTN,
< 5-->NSPLON,
< 6-->NSPLNS,
< 7-->NSPLNU,
< 8-->NSPNXP,
< 9-->NSPNXS.
<
<
IF NSPDLN+I-NSPSTN,,XEIF%,
IF ATTENTION...
XEIF%: VAL ENDIF
IF NSPSTN+I-NSPLON,,XEIF%,
IF ATTENTION...
XEIF%: VAL ENDIF
IF NSPLON+I-NSPLNS,,XEIF%,
IF ATTENTION...
XEIF%: VAL ENDIF
IF NSPLNS+I-NSPLNU,,XEIF%,
IF ATTENTION...
XEIF%: VAL ENDIF
IF NSPLNU+I-NSPNXP,,XEIF%,
IF ATTENTION...
XEIF%: VAL ENDIF
IF NSPNXP+I-NSPNXS,,XEIF%,
IF ATTENTION...
XEIF%: VAL ENDIF
SGNAS: EQU $
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
< DU CCI.
<
< VERIFICATION QU'AUCUN NVP N'EST ASSIGNE :
<
LXI NSPSGN-NSPSG0+Z < (X)=NBRE DE VERIF A FAIRE.
LYI XMAXIO+E < (Y)=1ER 'NVP' A VERIFIER.
IF XMAXIO+E-NVPDLN,,XEIF%,
IF ATTENTION : LES 'NVP' DU 'SGN' MERDENT !!!
XEIF%: VAL ENDIF
Z220: EQU $
XR X,Y
LBY &TASSGN-DCTESC,W
CPI NSPVID
JNE Z208 < ERREUR : LE NVP (X) EST ENCORE
< ASSIGNE, ON S'ARRETE SUR LUI,
< ET LE ?SGN EST REFUSE.
XR X,Y
ADRI I,Y < NVP SUIVANT.
JDX Z220
<
< OK, LE ?SGN EST ACCEPTE :
<
LAI NSPSG0 < (A)=1ER NSP DE L'ASSIGNATION.
Z301: EQU $ < ENTRY DESASSIGN : (A)=NSPVID.
LXI NSPSGN-NSPSG0+Z < (X)=NBRE D'ASSIGNATIONS A FAIRE.
LYI XMAXIO+E < (Y)=1ER 'NVP' DE L'ASSIGNATION.
IF XMAXIO+E-NVPDLN,,XEIF%,
IF ATTENTION : LES 'NVP' DU 'SGN' MERDENT !!!
XEIF%: VAL ENDIF
<
< BOUCLE D'ASSIGNATION/DESASSIGNATION :
<
Z74: EQU $
XR X,Y < (X)=NVP COURANT ; (A)=NSP COURANT.
STBY &TASSGN-DCTESC,W
JAE Z302 < C'EST UN DESASSIGN DU SGN,
< A RESTE A LA VALEUR 0 (NSPVID).
ADRI I,A < PASSAGE AU NSP SUIVANT LORS
< D'UN ASSIGN DU SGN.
Z302: EQU $
XR X,Y < (X)=NBRE D'ASSIGNATIONS+1
< RESTANT A FAIRE.
ADRI I,Y < NVP SUIVANT.
JDX Z74 < ASSIGNATION SUIVANTE.
PLR X < RESTAURE (X)=INDEX COURANT
< DE LA GRAMMAIRE CCI.
RSR
AZ301: JMP Z301 < RELAI...
PAGE
<
<
< O P E N N E W F I L E :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE SUITE
< A UN !ASSIGN =N,.
< ELLE A A SA CHARGE D'OUVRIR UN FICHIER
< CLOSE ET INEXISTANT, DE RANGER LE
< DANS L'ARGBRE DU SYSTEME.
< ET DE MEMORISER LA CORRESPONDANCE
< ET .
<
<
< ARGUMENT :
< (Y)=NVP DEMANDE SI PAS ASSIGNE,
< NVP.OR.'FF80 SI DEJA ASSIGNE.
<
<
XBUFS1:: VAL LBUFES-Z < DERNIER OCTET DU BUFFER ESCLAVE,
XBUFS2:: VAL XBUFS1-I < AVANT-DERNIER OCTET...
CCINF: EQU $
<
< TEST PRELIMINAIRE D'ASSIGNATION DU NVP :
<
IF XSKNSP,XEIF%,,
IF ATTENTION : 'XSKNSP' DOIT ETRE NEGATIF !!!
XEIF%: VAL ENDIF
CPZR Y
JL Z72 < ERREUR : NVP DEJA ASSIGNE,
< ASSIGN REFUSE.
<
< VERIFICATION SIMPLISTE D'UNE POSSIBLE
< OUVERTURE DU FICHIER : ON VERIFIE QU'AU
< MOINS 'XXFICN' FICHIERS INEXISTANTS,
< AINSI QUE 'XXFICD' 'DCT-FICHIERS' SONT
< ALLOUABLES ; CETTE VERIFICATION EST
< FAITE HORS-PHASE CRITIQUE, ET EST
< DONC INTERRUPTIBLE, MAIS LES SEUILS
< DE TEST SONT CHOISIS DE TELLE FACON,
< QUE LA VALEUR DU RESULTAT DES TESTS
< SOIT VALABLE QUELQUE SOIT LE NOMBRE
< DE 'HDLSER' LES FAISANT SIMULTANEMENT...
< (SAUF EXCEPTION !!!!??????!)
<
LAI MEFX < (A)='ETAT CLOSE ET INEXISTANT'.
XXBKFE:: VAL L < NUMERO DU BIT COMMUNIQUANT A 'LOOKF'
< QU'UN COMPTAGE EST DEMANDE...
XXFICN:: VAL 20 < SEUIL ARBITRAIRE DU NOMBRE DE FICHIERS
< INEXISTANTS EN DECA DUQUEL L'OUVERTURE
< NEW EST REFUSEE...
IF XXFICN-Z,,,XEIF%
IF ATTENTION : 'XXFICN' EST MAUVAIS, SACHANT
IF QUE LE FICHIER DE NOM INTERNE 0 N'EST PLUS
IF ACCESSIBLE !!!
XEIF%: VAL ENDIF
IF XXFICN-NDCTF,,,XEIF%
IF ATTENTION : LA VALIDATION QUI EST FAITE PEUT
IF MALGRE TOUT PERMETTRE A 'OPNFIL' DE SE BLOQUER
IF EN ATTENTE DE FICHIER INEXISTANT (VOIR LE
IF NIVEAU DE SERVICE SUR LEQUEL ON SE TROUVE, UN
IF NIVEAU DE SERVICE PLUS PRIORITAIRE POUVANT
IF L'INTERROMPRE !!!
XEIF%: VAL ENDIF
XXFICD:: VAL 4 < SEUIL ARBITRAIRE DU NOMBRE DE 'DCT
< FICHIER' LIBRE EN DECA DUQUEL L'OPEN
< EST REFUSE; NOTONS QUE CETTE PROTECTION
< N'EST PAS EFFICACE A 100 POUR-CENT, EN
< EFFET, ENTRE CE TEST, ET L'ATTRIBUTION
< D'UNE 'DCTF', QUELQU'UN DE PLUS PRIO-
< RITAIRE PEUT S'EN ETRE EMPARE...
IF NDCTF-NESCLA,,,XEIF%
IF ATTENTION : IL N'Y A PAS ASSEZ DE 'DCTF' !!!
XEIF%: VAL ENDIF
SBT XXBKFE
BSR ALOOKF < DEMANDE A 'LOOKF' DANS 'A' DU NOMBRE
< DE FICHIERS REPONDANT A LA QUESTION...
CPI XXFICN < CELA SUFFIT-IL ???
JL Z72 < NON, L'ASSIGN EST REFUSE...
LA &ASDCTF < (A)=BETA(SDCTF),
BSR ABETA < QUE L'ON ETEND SUR 16 BITS...
CPI XXFICD < Y-A-T'IL ASSEZ DE 'DCTF' ???
JL Z72 < NON, L'ASSIGN EST REFUSE...
<
< OK, TENTATIVE D'OUVERTURE :
<
LAI MEFX < (A)='ETAT CLOSE ET INEXISTANT'...
SBT BITRFE < MODE DE RECHERCHE D'UN FICHIER
< D'ETAT DONNE.
LBI XEFF < FICHIER QUE L'ON METTRA A L'
< ETAT NON PARTAGEABLE & DE
< TRAVAIL.
PSR X < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
BSR AOPFIL
<
< ON A ICI :
< (X)=NSP ALLOUE AU FICHIER, OU
< =0 SI L'OUVERTURE EST IMPOSSIBLE.
<
CPZR X < TEST DE L'OUVERTURE.
JE Z208 < OPEN IMPOSSIBLE : RETOUR
< EN ERREUR AU CCI.
PSR L < SAVE @DCT-SERVICE.
BSR ACADCT < (L)=@DCT ALLOUEE AU FICHIER.
LA VAR+FILNOM < (A)=NOM DIRECT DU FICHIER.
PLR L < RESTAURE (L)=@DCT-SERVICE.
<
< MISE DU NOM-DIRECT DU FICHIER
< EN QUEUE DU BUFFER :
<
STA BUFESC-DCTESC+XBUFS1,W
LBI NSPSTN+X123X < AFIN D'INSERER LE NOM DANS
< L'ARBRE DU SYSTEME.
<
< MISE DE 'NSPSTN' DEVANT LE NOM-DIRECT
< DU FICHIER COMME MOT DE VALIDATION
< DU NOM-DIRECT (CF. OPEN OLD) :
<
STB BUFESC-DCTESC+XBUFS2,W
ADRI -X123X,B
BSR ACCIF < INSERTION DU NOM DANS L'ARBRE
< DU SYSTEME, AVEC LA CORRES-
< PONDANCE : ---
< .
<
< TEST DES CONDITIONS DE RETOUR DE HDLSTN :
<
JANE Z210 < ERREUR : LE NOM EXISTE SUREMENT
< DEJA : ON VA REFERMER LE FICHIER
< QUI A ETE OUVERT.
<
< OK, L'OPEN NEW FILE EST CORRECT :
<
Z211: EQU $
LR X,A < (A)=NSP DE SGF ALLOUEE AU FICHIER.
XWOR%1: VAL XNVPF=K < ACCES AU MASQUE 'NVP DE FICHIER'.
SBT NBITMO-B-XWOR%1 < MEMORISATION QUE C'EST UN
< NSP DE GESTION DE FICHIERS.
<
< REALISATION DE L'ASSIGNATION :
<
CPZR Y < TEST DU NVP DEMANDE.
JMP Z212 < VERS UNE RE-VALIDATION DU NVP,
< ET L'ASSIGNATION.
<
< ERREUR A L'OPEN : REFERMETURE DU FICHIER :
<
Z210: EQU $
LR X,A < (A)=NSPDCTF.
SBT BITCFN < FERMETURE PAR NSPF.
LBI MCFR < FERMETURE EN MODE RELEASE.
BSR ACLFIL < FERMETURE DU FICHIER OUVERT
< PAR ERREUR.
CPZR Y < TEST DES CONDITIONS DE RETOUR.
JE Z208 < VERS UN RETOUR EN ERREUR AU CCI.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< EXAMINER LES CONDITIONS DE
< RETOUR ; EN EFFET PUISQU'ON
< A REUSSI A OUVRIR CE FICHIER,
< ON DOIT POUVOIR LE FERMER !!!
<
JMP Z208
PAGE
<
<
< O P E N O L D F I L E :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE SUITE
< A UN : !ASSIGN =O,,
< OU A : !ASSIGN =D-,
< ELLE RECUPERE PAR L'INTERMEDIAIRE DE
< L'ARBRE DU SYSTEME LE
< ASSOCIE A .
<
<
< ARGUMENT :
< (Y)=NVP DEMANDE SI PAS ASSIGNE,
< NVP.OR.'FF80 SI DEJA ASSIGNE.
<
<
CCIOF: EQU $
<
< VALIDATION PRELIMINAIRE DU NVP :
<
CPZR Y
JL Z72 < ERREUR : NVP DEJA ASSIGNE,
< ASSIGN REFUSE.
LA &ASDCTF < (A)=BETA(SDCTF),
BSR ABETA < QUE L'ON ETEND SUR 16 BITS...
CPI XXFICD < Y-A-T'IL ASSEZ DE 'DCTF' ???
JL Z72 < NON, L'ASSIGN EST REFUSE...
<
< OK, RECUPERATION DU :
<
STZ BUFESC-DCTESC+XBUFS2,W
STZ BUFESC-DCTESC+XBUFS1,W
< A T T E N T I O N : CE RAZ EST
< DESTINE A EVITER DE REPRENDRE
< UN UTILISE
< PRECEDEMMENT AU CAS OU LE
< DONNE EN ARGUMENT
< NE SERAIT EN FAIT QU'UN
< POUR LEQUE LA VALEUR SERAIT
< INFERIEURE A 'LBUFES'.
LBI NSPLON
BSR ACCIF < APPEL DE HDLLON, QUI RENVERRA
< EN QUEUE DE BUFESC LE ASSOCIE A .
JANE Z72 < ERREUR : LE NOM N'EXISTE PAS,
< ASSIGN REFUSE.
<
< OK, LE EXISTE :
<
LNOMS:: VAL 40 < LONGUEUR MAXIMALE DES NOMS 'SGN'.
LA DEMESC-DCTESC+T+CODEM,W
SB DEMESC-DCTESC+XBOX,W
< NOTA : SI IL S'AGIT BIEN D'UN FICHIER
< 'A' DOIT ALORS CONTENIR LA LONGUEUR
< DU NOM EXTERNE DU FICHIER...
JALE Z72 < CODEM<=BOX : LA VALEUR EST TROP GRANDE
< POUR ETRE CELLE D'UN FICHIER...
CPI LNOMS
AJGZ72: JG Z72 < CODEM-BOX>LNOMS : LA VALEUR PARAIT TROP
< PETITE...
< (ET RELAI...)
<
< VALIDATION DU NOM-DIRECT PRESUME PAR
< LE MOT LE PRECEDANT :
<
LAI NSPSTN+X123X < MOT DE VALIDATION ATTENDU
CP BUFESC-DCTESC+XBUFS2,W
JNE Z72 < FICHIER INVALIDE (NON CREE PAR
< UN ASSIGN NEW) ; ERREUR.
LA BUFESC-DCTESC+XBUFS1,W
<
< ON A ICI :
< (A)= DU FICHIER.
<
LBI XEFF < ETAT A DONNER A CE FICHIER :
< NON PARTAGEABLE ET DE TRAVAIL.
PSR X < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
JAL Z208 < ERREUR : NOM DIRECT ERRONE.
CP NMFIL < VALIDATION SUPERIEURE,
JGE Z208 < ERREUR : NOM DIRECT ERRONE.
BSR AOPFIL < OUVERTURE DU FICHIER
< DE (A) DONNE.
CPZR X < TEST DES CONDITIONS DE RETOUR.
JE Z208 < L'OPEN EST IMPOSSIBLE ,
< L'ASSIGN EST REFUSE.
JMP Z211 < OK, VERS L'ASSIGNATION.
AZ214: JMP Z214 < RELAI...
PAGE
<
<
< C L O S E D ' U N E A S S I G N A T I O N :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE SUITE A
< UN ?ASSIGN =S/R, ET A
< A SA CHARGE LA DESSIGNATION DU NVP,
< ET LA FERMETURE DU FICHIER SI LE NSP
< AUQUEL IL EST ASSIGNE EST UN NSPF.
<
<
< A T T E N T I O N :
< ATTENTION DANS LE CAS D'UN RELEASE
< SUR UN NSPF LE N'EST
< PAS DELETE DE L'ARBRE DU SYSTEME.
<
<
< ARGUMENT :
< (Y)=NVP SI PAS ASSIGNE,
< NVP.OR.'FF80 SI NVP ASSIGNE,
< (B)=MODE DE FERMETURE :
< ='80 : MODE SAVE,
< ='30 : MODE RELEASE.
< (W)=ADRESSE DCT(ESCLAVE).
<
<
CCICLF: EQU $
<
< TEST PRELIMINAIRE DU NVP :
<
CPZR Y
JG AJGZ72 < ERREUR : NVP NON ASSIGNE,
< IL N'Y A DONC RIEN A FAIRE.
<
< OK, DESASSIGNATION :
<
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
< DU CCI.
LXI XSKNSP)MFFFF
ANDR Y,X < (X)=NVP DEMANDE.
LBY &TASSGN-DCTESC,W
CPI XMAXIO < EST-CE UNE ASSIGNATION I/O ???
JLE Z215 < OUI, DANS LE CAS I/O, IL
< N'Y A PAS DE DELOCATION DE DCT.
XWOR%1: VAL XNVPF=K < ACCES AU MASQUE 'NVP DE FICHIER'.
TBT NBITMO-B-XWOR%1 < LE NSP ASSIGNE AU NVP ESTIL
< UN NSP DE SGF ????
JC Z213 < OUI : NSPF.
< OU BIEN C'EST LE NSP 'DUMMY' !!!
<
< TRAITEMENT DE 'DKU' :
< (ENVOI DE "!DK F" ET DE
< "!DK S0 OFF" IMPLICITES ET
< ENFIN DE "!DK =FFFF")
<
CPI NSPDKU < EST-CE 'DKU' ???
JNE Z300X3 < NON...
PSR A,B,X < OUI :
LR A,X < (X)='NSPDKU'...
LRM A,B < "!DK S0 OFF" :
WORD Z300X4 < (A)=ADRESSE DE RETOUR DE 'PS0OFF',
WORD PS0OF1 < (B)=ADRESSE DU SOUS-PROGRAMME DE MISE
< DE LA SYNCHRONISATION SUR LE
< SECTEUR 0 'OFF'.
PSR A,B < EMPILEMENT DE L'ADRESSE DE RETOUR POUR
< SIMULER UN 'BSR', ET DE L'ADRESSE DU
< SOUS-PROGRAMME,
RSR < VERS LEQUEL ON VA EN METTANT (B) DANS
< 'P' PAR UN 'PSR'/'RSR'...
Z300X4: EQU $ < ADRESSE DE RETOUR...
LRM A,B < "!DK F" :
WORD Z300X5 < (A)=ADRESSE DE RETOUR DE 'PFAST',
WORD PFAST1 < (B)=ADRESSE DU SOUS-PROGRAMME DE MISE
< EN MODE 'FAST' DE 'DKU'.
PSR A,B < EMPILEMENT DE L'ADRESSE DE RETOUR POUR
< SIMULER UN 'BSR', ET DE L'ADRESSE DU
< SOUS-PROGRAMME,
RSR < VERS LEQUEL ON VA EN METTANT (B) DANS
< 'P' PAR UN 'PSR'/'RSR'...
Z300X5: EQU $ < ADRESSE DE RETOUR...
LRM A,B < "!DK =FFFF" :
WORD Z300X6 < (A)=ADRESSE DE RETOUR DE 'PSLOWA',
WORD PSLOWA < (B)=ADRESSE DU SOUS-PROGRAMME D'AUTORI-
< SATION DES GROUPES DE BLOCS ENTRE-
< LACES DE 'DKU'.
PSR A,B < EMPILEMENT DE L'ADRESSE DE RETOUR POUR
< SIMULER UN 'BSR', ET DE L'ADRESSE DU
< SOUS-PROGRAMME,
LR X,B < (B)='NSPDKU'...
RSR < VERS LEQUEL ON VA EN METTANT (B) DANS
< 'P' PAR UN 'PSR'/'RSR'...
Z300X6: EQU $ < ADRESSE DE RETOUR...
PLR A,B,X
Z300X3: EQU $
<
< TRAITEMENT DU DISQUE SUPPORT DE
< L'EXTENSION D'ADRESSAGE :
<
MONT0:: VAL NEXIST < NUMERO DE VOLUME DONNE AU NUMERO DE
< VOLUME COURANT 'VOLNUM' LORSQU'IL N'Y A
< PAS DE VOLUME MONTE PAR LA COMMANDE
< "!DKU...".
CPI NSPDKG < ALORS, LE 'NSP' (A) EST-IL CELUI DU
< DISQUE D'EXTENSION D'ADRESSAGE ???
JNE Z300X1 < NON...
PSR A < SAUVEGARDE DU 'NSP'...
LA IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS UTILISATEUR :
TBT IDESC8 < ALORS, Y-A-T'IL UN VOLUME MONTE ???
JNC Z300X2 < NON, RIEN A FAIRE...
RBT IDESC8 < OUI,
STA IDDESC-DCTESC,W < ON LE DEMONTE :
PLR A < RESTAURE : (A)='NSP'...
PSR A,X,L < OUI, ON SAUVEGARDE...
LR A,X < (X)='NSP' DU DISQUE D'EXTENSION,
BSR ACADCT < (A)=(L)=ADRESSE DE SA 'DCT'.
WORD LAVOLU < CECI EST EN FAIT L'INSTRUCTION SUIVANTE :
< 'LA VAR+ABVOLU', QU'ON NE PEUT ENCORE
< ECRIRE, PUISQUE 'ABVOLU' N'EST PAS
< ENCORE DEFINI...
< (A)=ADRESSE DU BUFFER DE DESCRIPTION
< DU VOLUME COURANT,
LR A,L < (L)=BASE DU BUFFER DE VOLUME...
WORD STZNUM < PLUS DE VOLUME COURANT : 'VOLNUM'=K EST
< L'INDICATEUR DE "BASE" INDIQUANT QU'IL
< N'Y A PAS DE VOLUME MONTE...
< (ATTENTION : C'EST UNE INSTRUCTION
< "REFERENCEE EN AVANT"...)
IF MONT0-K,,XEIF%,
IF ATTENTION : LE 'STZ' EST IDIOT !!!
XEIF%: VAL ENDIF
LAI NSPVID
WORD STANSP < PLUS DE 'NSP' SUPPORT D'UN VOLUME,
< (ATTENTION : C'EST UNE INSTRUCTION
< "REFERENCEE EN AVANT"...)
PLR A,X,L
JMP Z300 < IL EST INUTILE DE FAIRE LES TESTS SUR
< LES 'NSP' DU 'SGN'...
<
< CAS DES AUTRES 'NSP' : EST-CE LE 'SGN' ???
<
Z300X1: EQU $
CPI NSPSG0
JL Z300 < CE N'EST PAS UN NSP DU SGN.
CPI NSPSGN
JG Z300 < CE N'EST PAS UN NSP DU SGN.
<
< CAS D'UN NSP DU SGN, ON
< VA DESASSIGNER TOUS LES NVP
< CONCERNES :
<
LAI NSPVID < DESASSIGN.
JMP AZ301 < VERS LA DESASSIGNATION DU SGN.
<
< DANS LE CAS D'UN NSP QUI N'EST NI DU SGF,
< NI DU SGN, ON DELOUE LA DCT CORRESPONDANTE :
<
Z300X2: EQU $
PLR A < RESTAURE : (A)='NSP'...
Z300: EQU $
XR A,X < (X)=NSP A DELOUER, (A)=SAVE NVP.
BSR ADLDCT < DELOCATION DU NSP (X).
XR A,X < RESTAURE (X)=NVP, (A)=NSP.
Z215: EQU $
LAI NSPVID < EN VUE DU DESASSIGN.
JMP AZ214 < VERS LA DESASSIGNATION.
<
< TRAITEMENT DES NSP DE SGF :
<
Z213: EQU $
XWOR%1: VAL XNVPF=K < ACCES AU MASQUE 'NVP DE FICHIER'.
RBT NBITMO-B-XWOR%1 < (A)=NSP DE SGF.
JAE Z215 < NSP=NSPDUM : LE NVP ETAIT
< ASSIGNE AU NSP DUMMY ; ON VA
< DONC JUSTE LE DESASSIGNER !!!
SBT BITCFN < MODE D'APPEL DE 'CLOSE-FILE'
< PAR NSP.
CMCFSR:: VAL N
ADRI CMCFSR,B < (B)='30 OU '80, EN EFFET,
< L'INTERPRETEUR DU CCI RAZE
< LE BIT0 DE L'OCTET0 DE
< CHAQUE NOEUD.
<
< ON A ICI :
< (A)=NSP ALLOUE AU FICHIER A FERMER,
< (B)=MODE DE FERMETURE (RELEASE OU SAVE).
< (X)=NVP QUE L'ON DESASSIGNE.
< (W)=ADRESSE DCT(ESCLAVE).
<
Z230: EQU $
BSR ACLFIL < TENTATIVE DE FERMETURE DU
< FICHIER DANS LE MODE PRECISE (B).
<
< TEST DES CONDITIONS DE RETOUR :
<
XR A,Y < (A)=CONDITIONS DE RETOUR,
< (Y)=NSPF (BIT0=1).
JAE Z215 < OK, LE CLOSE DU FICHIER A ETE
< ACCEPTE, ALLONS DESASSIGNER.
CPI ECEO < LE CLOSE A-T'IL ETE REFUSE POUR
< 'OPEN ENREGISTREMENT EN COURS' ???
JE SYSR57 < OUI, ALLONS FERMER L'ENREGIS-
< TREMENT.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< ET BIEN TOUT DEPEND DU CODE DE RETOUR...
<
SYSR57: EQU $
<
< FERMETURE DE L'ENREGISTREMENT DANS LE
< MEME MODE QUE CELUI DEMANDE POUR LE FICHIER :
<
LAI FOFCR < CODE 'CLOSE RELEASE' A PRIORI.
XWOR%1: VAL MCFS=K-NBITMO+B < POUR DISCRIMINER SAVE/RELEASE :
XWOR%1: VAL -XWOR%1 < CE BIT=K (RELEASE) =1 (SAVE).
TBT NBITMO+XWOR%1 < LE DESASSIGN DU FICHIER EST-IL
< SAVE OU RELEASE ??? :
< SAVE : BIT8(B)=1 (B='80),
< RELEASE : BIT8(B)=K (B='30).
ADCR A < (A)=6 SI CLOSE RELEASE,
< =7 SI CLOSE SAVE.
STA DEMESC-DCTESC+T+OPDEM,W
SWBR Y,A < (Y)=NSPF (BIT0=1).
RBT NBITOC+BITCFN < (A)=NSPTYP VERS LE HANDLER SGF
< ALLOUE AU FICHIER.
STA DEMESC-DCTESC+XXNSP,W
ADRI DEMESC-DCTESC,W < (W)=@DEMANDE DE CLOSE ENREGIS-
< TREMENT.
BSR ACHAND < ENVOI DE LA DEMANDE DE CLOSE
< ENREGISTREMENT SAVE/RELEASE.
WAIT WEIO < ATTENTE DE FIN DE CLOSE.
ADRI DCTESC-DEMESC,W < (W)=@DCT-ESCLAVE.
<
< TEST DES CONDITIONS DE RETOUR
< DU CLOSE ENREGISTREMENT :
<
LA DEMESC-DCTESC+T+ETADEM,W
JAE SYSR58 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< JE NE SAIS PAS, MAIS SI CETTE 'SYSER'
< A LIEU, C'EST QUE PROBABLEMENT, ON EN
< A EU UNE LORS DU 'CLFIL' QUI A PRECEDE...
<
SYSR58: EQU $
<
< LE CLOSE ENREGISTREMENT A ETE ACCEPTE :
<
LR Y,A < RESTAURE (A)=NSPF (BIT0(A)=1).
< A NOTER QUE B EST OK ('80 OU '30).
JMP Z230 < TRY AGAIN TO CLOSE THE FILE !!!!
PAGE
<
<
< D E L E T E U N N O M D E F I C H I E R :
<
<
< FONCTION :
< CE MODULE DETRUIT UN NOM DE FICHIER,
< APRES QUE CE DERNIER AIT ETE OUVERT
< EN 'OLD', PUIS FERMER EN 'RELEASE' ;
< IL NE PEUT SE PRODUIRE D'ERREUR, SAUF
< ANOMALIE SYSTEME...
<
<
< ARGUMENTS :
< (W)=ADRESSE DE LA DCT(ESCLAVE),
< (XBUFGR)=INDEX DU PREMIER CARACTERE DU NOM.
<
<
DELFIL: EQU $
LBI NSPDLN
BSR ACCIF < DESTRUCTION DU NOM EXTERNE...
JAE DELFI1 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE POURQUOI, ALORS QU'ON
< A PU L'OUVRIR EN 'OLD', LE FERMER
< EN 'RELEASE', ON NE PEUT DETRUIRE
< SON NOM EXTERNE !!!
<
DELFI1: EQU $
RSR
PAGE
<
<
< T E S T A B S E N C E D E S ' N U L L S '
< D A N S U N E C A R T E " ! A S S I G N " :
<
<
< FONCTION :
< ETANT DONNE QUE "!ASSIGN =N,"
< DONNE NAISSANCE A UN ITEM DE NOM
< ET QUI VA AU BOUT DE
< 'BUFESC', LE DU
< FICHIER SE TROUVE DANS CET ITEM
< A UNE DISTANCE DU DEBUT DETERMINEE
< UNE FOIS POUR TOUTE LORS DE SA
< CREATION (OPEN-NEW) ; SI DONC DES
< 'NULLS' SONT INTRODUITS DANS LA
< CARTE "!ASSIGN...", LA LONGUEUR DU
< DIT ITEM VA CHANGER, ET LE
< DEVENIR IRRECUPERABLE...
<
<
ABSNUL: EQU $
<
< DEFINITION DE LA CARTE "!ASSIGN" (NEW) :
<
@!ASSIGN N=X,
IF KOL1=FCGET-KCCI,,XEIF%,
IF ATTENTION : IL FAUT UN "!" EN TETE DE LA CARTE !!!
XEIF%: VAL ENDIF
XWOR%1: VAL KOLTED=FMASK+KOL1=FVAL
XWOR%1: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%1
XWOR%2: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%2: VAL KOLC=FMASK+KVIR=FVAL?XWOR%2
XWOR%3: VAL XWOR%1=XWOR%2 < RECHERCHE DU LIMITEUR ","...
IF XWOR%3-KOL0-KOLON,XEIF%,,
IF ATTENTION : IL MANQUE LE LIMITEUR "," !!!
XEIF%: VAL ENDIF
XLPASS:: VAL XWOR%3-KOL1+Z < LONGUEUR EN OCTETS DE LA CARTE "!ASSIGN".
<
< VALIDATION DE LA CARTE :
< "!ASSIGN" COURANTE :
<
LA VAR+XBUFGR < (A)=INDEX DU PREMIER CARACTERE DU
< ,
CPI XLPASS+KOL0 < EST-IL BON (+KOL0, CAR 'XLPASS' EST UNE
< LONGUEUR, ET NON UN INDEX...) ???
JE ABSNU1 < OUI...
ADRI XCCIER,X < NON, IL Y A DES 'NULLS', LA CARTE
< "!ASSIGN..." COURANTE EST DONC REFUSEE...
ABSNU1: EQU $
RSR < ET ON RETOURNE A LA GRAMMAIRE...
PAGE
<
<
< I N T E R F A C E E N T R E C C I E T L E
< S Y S T E M E D E G E S T I O N D E S N O M S :
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
< (B)=NSPLON OU NSPSTN SUIVANT QUE LE MODE
< DU FICHIER EST OLD OU NEW...
< (XBUFGR) POINTE SUR LE 1ER CARACTERE DU NOM.
<
<
< RESULTAT :
< (A)=CONDITIONS DE RETOUR DE HDLLON/HDLSTN.
<
<
CCIFIL: EQU $
SWBR B,A
SBT VBOX < AFIN DE RECUPERER LA LONGUEUR DE LA
< VALEUR ASSOCIEE AU NOM...
STA DEMESC-DCTESC+XXNSP,W < GENERATION D'UN NSPTYP VERS
< HDLLON OU HDLSTN.
LA VAR+DEMCCI+T+AMDEM
AD VAR+XBUFGR < (A)=@OCTET DU NOM ARGUMENT DE
< L'ASSIGNATION.
STA DEMESC-DCTESC+T+AMDEM,W
LAI NOCMO*LBUFES
SB VAR+XBUFGR < (A)=NBRE D'OCTETS DE LA ZONE
< ALLANT DU 1ER CARACTERE DU
< NOM JUSQU'AU BOUT DU BUFESC.
STA DEMESC-DCTESC+T+CODEM,W
LAI FGSGNN < LA VALEUR SUIT LE NOM.
STA DEMESC-DCTESC+T+ASDEM,W
LAI FGSGNA < FONCTION AVEC CONCATENATION
< DE L'ACN DEVANT LE NOM.
XXXSGF:: VAL WAITB < BIT A POSITIONNER DANS L'OPDEM A
< DESTINATION DU 'SGN' POUR INDIQUER
< QUE L'ITEM EN CAUSE EST UN ITEM DE
< TYPE "SGF"...
XWOR%1: VAL COSBT?XXXSGF=FMASK(K=FCINST
IF XWOR%1(XMDSLO,,XEIF%,
IF ATTENTION : RECOUVREMENT ENTRE 'XMDSLO' ET 'XXXSGF' !!!
XEIF%: VAL ENDIF
IF XWOR%1(MKOPDM,,XEIF%,
IF ATTENTION : RECOUVREMENT ENTRE 'MKOPDM' ET 'XXXSGF' !!!
XEIF%: VAL ENDIF
SBT XXXSGF < INDIQUONS AU "SGN" QU'IL S'AGIT DU "SGF".
STA DEMESC-DCTESC+T+OPDEM,W
ADRI DEMESC-DCTESC,W < (W)=@DEMANDE DEMESC.
BSR ACHAND < ENVOI DE LA DEMANDE.
WAIT WEIO < ATTENTE DE LA REPONSE.
ADRI DCTESC-DEMESC,W < RESTAURE (W)=@DCT-ESCLAVE.
STA DEMESC-DCTESC+T+OPDEM,W
< REMISE DE L'OPDEM A 2, CAR LE
< SGN L'A MIS A 0, ET IL SE PEUT
< QU'UN 'OMOV2' SUIVE CET APPEL
< AU CCI !!...!!!.
LA DEMESC-DCTESC+T+ETADEM,W
RSR < RETOUR AVEC (A)=CONDITIONS.
PAGE
<
<
< C H E C K T A S S G N A U L O G O U T :
<
<
< FONCTION :
< CETTE ROUTINE EST PAPPELEE SUITE A
< ?BYE, ET VERIFIE QUE QUE TOUS LES
< NVP A L'EXCEPTION DE PHIN ET PHOUT
< SONT DESASSIGNES ; SINON, LE
< BYE EST REFUSE.
<
<
CHKASG: EQU $
PSR X < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
LXI NOCMO*LTASGN-Z < INDEX DU DERNIER NVP.
Z216: EQU $
LBY &TASSGN-DCTESC,W
CPI NSPVID < TEST DU NSP ASSIGNE AU NVP (X).
JNE Z217 < LE NVP ETANT ENCORE ASSIGNE,
< ON ARRETE L'EXPLORATION DE TASSGN
JDX Z216 < AU NVP SUIVANT
BSR ASYSER < E R R E U R S Y S T E M E ...
Z217: EQU $
LR X,A < (A)=NVP ENCORE ASSIGNE.
PLR X < RESTAURE INDEX GRAMMAIRE CCI (X).
CPI XMAXIO
JGE SYSR59
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< CERTAINEMENT UN RETOUR EN ERREUR
< AU 'CCI' PAR (X)#0, MAIS ATTENTION,
< LE 'JE Z218' QUI SUIT NE PEUT FONCTIONNER
< CORRECTEMENT, CAR ENTRE LE 'CPI' ET LUI,
< IL Y A EU LA 'SYSER'...
<
SYSR59: EQU $
JE Z218 < C'EST MAX(PHIN,PHOUT), LE ?BYE
< EST DONC ACCEPTE, TOUS LES
< NVP SONT DESASSIGNES SAAUF
< PHIN & PHOUT.
ADRI XCCIER,X < RETOUR EN ERREUR AU CCI, AU
< MOINS UN NVP (DIFFERENT DE PHIN
< ET PHOUT) EST ENCORE ASSIGNE.
Z218: EQU $
RSR
PAGE
<
<
< C O M M A N D E D E C O N N E X I O N S
< M A T R I C I E L L E S :
<
<
< FONCTION :
< EN GENERAL, ON DISPOSE DE 2 NSP, SOIENT
< NSP1 ET NSP2 DONNES DANS CET ORDRE
< DANS UNE COMMANDE '?CM '. LA COMMANDE
< CM GERE LES CONNEXIONS DE NSP1 VERS
< NSP2, C'EST-A-DIRE QUE TOUT CE QUI
< SE PASSERA SUR NSP1 SERA REPRODUIT
< SUR NSP2.
<
<
< S A V E N S P 1 :
<
<
< ARGUMENT :
< (B)=NSP1.
<
<
< RESULTAT :
< (Y)=NSP1, TRANSMIS AUX ROUTINES SUIVANTES.
<
<
CMP1: EQU $
LR B,Y < (Y)=NSP1.
RSR
<
<
< N S P I N / O U T D E M A N D E C O M M E N S P 1 :
<
<
< ARGUMENT :
< (B)=NVP (PHIN/PHOUT).
<
<
< RESULTAT :
< (Y)=+NSPIN/NSPOUT.
<
<
CMP5: EQU $
PSR X < SAVE INDE COURANT DE LA
< GRAMMAIRE DU CCI.
LR B,X < (X)=NVP (PHIN/PHOUT).
Z218X: EQU $
LBY &TASSGN-DCTESC,W
JANE SYSR5A
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT-ETRE CORRIGER 'TASSGN' DE
< 'DCTESC', PUIS UN 'JMP Z218X'...
<
SYSR5A: EQU $
LR A,Y < (Y)=NSP1=+NSPIN/NSPOUT.
PLR X < RESTAURE (X)=INDEX GRAMMAIRE CCI.
RSR
<
<
< D I S C R I M I N A T I O N C O N N E X I O N
< D I S C O N N E X I O N :
<
<
< ARGUMENT :
< (Y)=NSP1.
<
<
< RESULTAT :
< (Y)=-NSP1.
<
<
CMP4: EQU $
NGR Y,Y
RSR < FACILE, N'EST-IL PAS ?????
<
<
< R A Z T O U T E S C O N N E X I O N S
< I S S U E S D E N S P 1 :
<
<
< ARGUMENT :
< (Y)=NSP1.
<
<
CMP2: EQU $
XR X,Y < (Y)=SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI,
< (X)=NSP1.
ADR X,X < EN EFFET, MATX EST UNE TABLE
< DE DOUBLE-MOTS.
IF UMATCO-2,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST MAUVAIS !!!
XEIF%: VAL ENDIF
RQST &ASMATX <<<NSP2,
< SI Y>0 : CONNEXION NSP1-->NSP2.
<
<
< RESULTAT :
< (B)=NSP2 (NSPIN/NSPOUT).
<
<
CMP6: EQU $
PSR X < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI.
LR B,X < (X)=NVP DEMANDE (PHIN/PHOUT).
Z81XX: EQU $
LBY &TASSGN-DCTESC,W
JANE SYSR5B < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT-ETRE CORRIGER 'TASSGN' DE
< 'DCTESC', PUIS UN 'JMP Z81XX'...
<
SYSR5B: EQU $
LR A,B < (B)=NSP2 (NSPIN/NSPOUT).
PLR X < RESTAURE PROVISOIRE DE L'INDEX
< COURANT DE LA GARMMAIRE CCI.
JMP CMP3 < VERS LE TRAITEMENT STANDARD.
<
<
< C O N N E X I O N / D I C O N N E X I O N
< N S P 1 --> N S P 2 :
<
<
< ARGUMENTS :
< ABSVAL(Y)=NSP1,
< (B)=NSP2,
< SI Y<0 : DISCONNEXION NSP1-->NSP2,
< SI Y>0 : CONNEXION NSP1-->NSP2.
<
<
CMP3: EQU $
CPR Y,B
JE Z86 < LES AUTO-CONNEXIONS SONT
< INTERDITES ; ON NE VERIFIE PAS
< LES AUTO-DECONNEXIONS, PUISQU'
< IL EST IMPOSSIBLE D'AUTO-CONNECTER.
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
< DU CCI.
CPZR Y < DISCRIMINATION CONNEXION /
< DISCONNEXION.
JGE Z81 < CAS D'UNE CONNEXION.
<
< CAS D'UNE DISCONNEXION :
<
NGR B,B < ON MEMORISE DISCONNEXION
< PAR B<0.
NGR Y,Y < ON REND Y POSITIF, POUR
< POUVOIR INDEXER MATX.
Z81: EQU $
LR Y,X < (X)=NSP1.
ADR X,X < MATX EST UNE TABLE DOUBLE-MOTS.
LR B,Y < SAVE (Y)=+-NSP2.
RQST &ASMATX <<<NSP2.
<
< CAS D'UNE DISCONNEXION NSP1-->NSP2 :
<
NGR X,X < (X)=NSP2.
TBT L,X < ETAT DE LA CONNEXION A DETRUIRE.
JNC Z83 < ELLE N'EXISTE PAS, ERREUR.
RBT L,X < OK, RAZ.
JMP Z84 < SORTIE OK.
<
< CAS D'UNE CONNEXION NSP1-->NSP2 :
<
Z82: EQU $
TBT L,X < TEST DE L'ETAT DE LA CONNEXION.
JC Z83 < ERREUR : ELLE EXISTE DEJA.
SBT 0,X < OK, ON CONNECTE NSP1-->NSP2.
<
< MISE A JOUR DE MATX :
<
Z84: EQU $
LR Y,X < RESTAURE (X)=INDEX MATX.
STB &AMATX
ADRI -UMATCO+E,X
STA &AMATX < MAJ DE MATX.
PLR X < RESTAURE (X)=INDEX COURANT DE
< LA GRAMMAIRE DU CCI.
Z85: EQU $
PSR A
LAD &ASMATX
BSR ARLSE < FIN DE PHASE CRITIQUE
PLR A
RSR
<
< SORTIE EN ERREUR :
<
Z83: EQU $
PLR X < RESTAURE (X)=INDEX COURANT DE
< LA GRAMMAIRE DU CCI.
Z86: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR AU CCI.
JMP Z85 < SORTIE.
PAGE
<
<
< G E S T I O N D U ' M A I L ' A U X
< U T I L I S A T E U R S :
<
<
< FONCTION :
< CE MODULE EST APPELE SUITE
< A LA COMMANDE "!VI ..." ; ELLE
< MET EN PLACE LE MESSAGE 'MAIL'
< COURANT, EVENTUELLEMENT VIDE...
<
<
< ARGUMENTS :
< (L)=ADRESSE DE 'DCTSER',
< (W)=ADRESSE DE 'DCTESC'.
<
<
PMAIL: EQU $
PSR B,X,Y < SAUVEGARDES...
<
< DEFINITION DE LA CARTE "!VI " ('MAIL') :
<
@!VI /
IF KOL1=FCGET-KCCI,,XEIF%,
IF ATTENTION : IL FAUT UN "!" EN TETE DE LA CARTE !!!
XEIF%: VAL ENDIF
XWOR%1: VAL KOLTED=FMASK+KOL1=FVAL
XWOR%1: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%1
XWOR%2: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%2: VAL KOLC=FMASK+KSLASH=FVAL?XWOR%2
XWOR%3: VAL XWOR%1=XWOR%2 < RECHERCHE DU LIMITEUR "/"...
IF XWOR%3-KOL0-KOLON,XEIF%,,
IF ATTENTION : IL MANQUE LE LIMITEUR "/" !!!
XEIF%: VAL ENDIF
XLPVI:: VAL XWOR%3-KOL1+Z-W < LONGUEUR EN OCTETS DE LA CARTE "!VI ".
< (-W CAR LE LIMITEUR "/" N'EN FAIT PAS
< PARTIE...)
<
< DETERMINATION DE LA LONGUEUR
< DU MESSAGE 'MAIL' COURANT :
<
LA VAR+DEMCCI+T+CODEM
< (A)=NOMBRE DE CARACTERES DE LA COMMANDE
< "!VI ..." Y COMPRIS ,
ADRI -XLPVI-W,A < (A)=LONGUEUR DU MESSAGE 'MAIL' DEMANDE,
< NON COMPRIS (-W)...
JAL PMAIL3 < ?!??!??!
WORD CPMAIL < VALIDATION...
JLE PMAIL4 < OK, ELLE TIENT DANS 'MAIL'...
PMAIL3: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE, CAR TOUT A ETE
< DIMENSIONNE CORRECTEMENT !!!
<
JMP PMAIL5 < ET ON SORT IMMEDIATEMENT...
PMAIL4: EQU $
LR A,Y < (Y)=LONGUEUR DU NOUVEAU 'MAIL'...
<
< ACCES AU 'MAIL' GENERAL :
<
PSR L < SAUVEGARDE DE L'ADRESSE DE 'DCTSER',
LXI NSPTT < (X)='NSP' DU NOEUD DE 'MAIL' DE LA
< GRAMMAIRE DU 'CCI',
BSR ACADCT < (L)=ADRESSE DU NOEUD DE 'MAIL'...
<
< MISE EN PLACE DE LA LONGUEUR
< DU NOUVEAU 'MAIL' :
<
BSR ASMMK < MASQUAGE DES INTERRUPTIONS, AFIN QU'UN
< AUTRE UTILISATEUR N'HERITE PAS D'UN
< MESSAGE 'MAIL' BIZARRE...
LR Y,A < (A)=NOUVELLE LONGUEUR,
STBY XCCIM0,L < QUE L'ON MET EN PLACE DANS LE NOEUD DE
< 'MAIL' DE LA GRAMMAIRE...
<
< INITIALISATION DU TRANSFERT :
<
LX XCCIM1,L < (X)=ADRESSE DU MESSAGE 'MAIL',
PLR L < ET RESTAURE :
< (L)=ADRESSE DE 'DCTSER'...
LA VAR+ABUFGR < (A)=RELAI D'ACCES A 'BUFESC' (CETTE
< ECRITURE EST PLUS GENERALE QU'UN
< 'LAD' SUR 'BUFESC-DCTESC,W'...),
RBT BITX < (A)=ADRESSE DU BUFFER COURANT,
SBR A,X < (X)=DEPLACEMENT PERMETTANT DE PASSER DE
< 'BUFESC' A 'MAIL' AVEC LE MEME
< RELAI 'VAR+ABUFGR'...
PMAIL6: EQU $ < SAUVEGARDE DU 'DOLLAR'...
<*******************************************************************************
ADR A,A < DOUBLEMENT DE (A),
XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE...
<*******************************************************************************
$EQU PMAIL6 < ET ANNULATION DU CODE GENERE...
IF XWOR%1=FMASK(K?W=FCINST-NOCMO,,XEIF%,
IF ATTENTION : LE PASSAGE DE L'INDEX MOT A
IF L'INDEX OCTET PAR 'ADR' EST MAUVAIS !!!
XEIF%: VAL ENDIF
ADR X,X < (X)=INDEX OCTET INITIAL DE RANGEMENT DANS
< LA ZONE 'MAIL'...
<
< BOUCLE DE TRANSFERT DES
< CARACTERES DU NOUVEAU
< MESSAGE 'MAIL' :
<
PMAIL1: EQU $
CPZR Y < EN RESTE-T'IL A TRANSFERER ???
JE PMAIL2 < NON...
BSR ACARAC < OUI :
< (A)=CARACTERE COURANT DE 'BUFES' ; A
< NOTER QUE L'ON NE TESTE PAS EN RETOUR
< LES AFIN D'AUTORISER LES "."
< DANS LES 'MAIL', ET DE PLUS CE TEST
< SERAIT REDONDANT AVEC CELUI DE 'Y'...
STBY &VAR+ABUFGR < ET ON LE MET DANS 'MAIL'...
ADRI I,X < PROGRESION DE L'INDEX,
ADRI -I,Y < ET DECOMPTE DES CARACTERES RANGES...
JMP PMAIL1 < AU SUIVANT, S'IL EXISTE...
<
< FIN DES OPERATIONS :
<
PMAIL2: EQU $
BSR ASMDK < ON DEMASQUE LES INTERRUPTIONS...
PMAIL5: EQU $
PLR B,X,Y < ON RESTAURE LES REGISTRES,
RSR < ET ON FAIT UN RETOUR OK...
PAGE
<
<
< A C T I O N S U R L E S T A C H E S
< P A R A L L E L E S :
<
<
< FONCTION :
< CETTE ROUTINE ACCEDEE PAR LA COMMANDE
< !X SOUS :SYS, PERMET LA CREATION DE
< JOBS PARALLELES SUR LE PERIPHERIQUE
< ASSIGNE AU NVP ARGUMENT ; CE PERIPHERIQUE
< EST LE NSPIN DU JOB PARALLELE CREE.
< SI LE JOB EXISTE DEJA, L'ACTION DE LA COMMANDE
< EST EQUIVALENTE A UN ALT-MODE SUR UNE
< VISU.
<
<
< ARGUMENTS :
< (W)=ADRESSE DCT(ESCLAVE) DEMANDEUR,
< (L)=ADRESSE DCT(SERVICE).
< (Y)=NVP SI NON ASSIGNE (>0),
< =NVP.OR.'FF80 SI ASSIGNE (< 0).
<
<
TASK: EQU $
CPZR Y < TEST DU NVP ARGUMENT.
JGE Z281 < ERREUR : LE NVP N'EST PAS ASSIGNE
<
< CAS D'UN NVP ASSIGNE :
<
PSR X,L < SAVE INDEX GRAMMAIRE CCI,
< ET @DCT-SERVICE.
LXI XSKNSP)MFFFF
ANDR Y,X < (X)=NVP DEMANDE (ET DEJA ASSIGNE).
LBY &TASSGN-DCTESC,W < (A)=NSP DU PERIPHERIQUE IN
< DEMANDE.
LR A,Y < (Y)=NSP PERIPHERIQUE IN DEMANDE.
LXI PHIN
CPBY &TASSGN-DCTESC,W < LE PERIPHERIQUE DEMANDE NE
< SERAIT-IL PAS LE NSPIN DU
< DEMANDEUR ???
JE Z282 < OUI, ERREUR.
<
< ACCES A LA DCT DU PERIPHERIQUE IN DEMANDE :
<
ANDI XNVPF)MOCD
LR A,X < (X)=NSP DU PERIPHERIQUE IN DEMANDE.
BSR ACADCT < (L)=@DCT PERIPH. IN DEMANDE.
LBY IOID < (A)=NSP DU PERIPHERIQUE OUT
< ASSOCIE AU PERIPHERIQUE
< IN DEMANDE.
ANDI IOIDM < EN RAZANT LE BIT0 DE IOID, ON
< EXCLUE L'ACCES AUX FICHIERS !!!
JAE Z282 < ERREUR : CE PERIPHERIQUE OUT
< ASSOCIE N'EXISTE PAS.
<
< CAS OU LE PERIPHERIQUE IN DEMANDE
< EST ACCEPTABLE :
<
LR X,A < (A)='NSP' DU PERIPHERIQUE DEMANDE :
CPI NSPVI0 < EST-CE UNE VISU ???
JL TASK01 < NON...
CPI NSPVIN < ???
JG TASK01 < NON...
<
< CAS D'UNE VISU : IL FAUT
< REINITIALISER A PRIORI
< LE BUFFER D'ANTICIPATION :
<
PSR X
SVC SVCM10 < DANS LE CAS DE "!X..", ON ANNULE TOUS
< LES CARACTERES EN ATTENTE, EN REINITIA-
< LISANT 'KCWIO'...
PLR X
<
< TEST D'UN UTILISATEUR DEJA LOGUE :
<
TASK01: EQU $
RQST SPHEX <<<XWOR%1
ANDI XWOR%1 < (A)=NSP DU HANDLER DE SERVICE ASSOCIE,
JANE Z285Y < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT-ETRE LE MIEUX SERAIT-IL DE NE PAS
< REVEILLER L'ESCLAVE, EN FAISANT UN 'JMP Z285'...
<
Z285Y: EQU $
PSR X,L
LR A,X < (X)='NSP' DU HANDLER DE SERVICE,
BSR ACADCT < (A)=L=ADRESSE DE SA 'DCT',
BSR ARIT < ON LE REVEILLE...
PLR X,L
JMP Z285 < ET ON SORT EN SAUTANT LA MISE EN
< PLACE DE LA ROUTINE D'ABORT...
Z285X: EQU $
BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS...
LA AABORT < (A)=@ROUTINE D'ABORT DE FIN DE
< SERVICE.
SBT XFSERV < AFIN QUE FSERV NE LANCE PAS LE
< RECOVERY SI LE FSERV EST DEJA
< POSITIONNE POUR L'ESCLAVE
< ATTACHE.
XR W,L < (W)=@DCT-ESCLAVE ATTACHE.
BSR AFSERV < MISE EN PLACE D'UNE ROUTINE
< DE FIN DE SERVICE POUR L'ESCLAVE
< ATTACHE.
<
< NOTA :
< ON NE FAIT PAS 'ADOWN', CAR
< EN EFFET D'UNE PART CELA COMPLIQUE
< LES CHOSES (INTERFERENCES AVEC
< L'HORLOGE), MAIS SURTOUT ON FAIT
< UN 'FSERV' QUI EST EXPLOITE PAR
< L'AUTOMATE DE SERVICE QUI SERA
< AUTOMATIQUEMENT DECLENCHE LORS DE
< LA PROCHAINE INTERRUPTIOON D'HORLOGE...
<
XR W,L < (W)=@DCT-ESCLAVE DEMANDEUR.
TBT XFSERV < LA MISE EN PLACE DE LA ROUTINE
< D'ABORT A-T'ELLE EU LIEU ?????
JC Z282 < NON, ERREUR.
<
< RETOUR :
<
Z285: EQU $
PLR X,L < RESTAURE L'INDEX DE LA GRAMMAIRE
< DU CCI, ET @DCT-SERVICE.
Z286: EQU $
RSR < GO BACK.
<
<
< J O B P A R A L L E L E E N T R Y :
<
<
Z283: EQU $
<
< ON A ICI :
< (Y)=NSP DU PERIPHERIQUE IN DEMANDE,
< (W)=ADRESSE DCT(ESCLAVE) DEMANDEUR.
<
SBT IOIDX < MEMORISATION DE L'ATTACHEMENT
< D'UN ESCLAVE SUR LE PERIPHERIQUE
< IN DEMANDE.
STA IOID
LAD SPHEX
BSR ARLSE
<
< PREPARATION DU JOB-ENTRY :
<
LAI NSPJE
SWBR A,A
STA DEMESC-DCTESC+XXNSP,W < NSPTYP VERS HDLJE.
STY DEMESC-DCTESC+T+AMDEM,W
< LE NSP DU PERIPHERIQUE IN
< DEMANDE (Y) EST MIS EN AMDEM
< DE LA DEMANDE.
LAI K
XWOR%1: VAL PLK*NOCMO=K < PLK*NOCMO=TAILLE INITIALE DE L'ESPACE.
XWOR%1: VAL NBITMO-B-XWOR%1 < NUMERO DU BIT A POSITIONNER...
SBT XWOR%1 < POUR UNE DEMANDE DE '800 OCTETS.
STA DEMESC-DCTESC+T+CODEM,W
ADRI DEMESC-DCTESC,W < (W)=@DEMANDE DE JOB ENTRY.
BSR ACHAND < ENVOI DE LA DEMANDE DE JOB-ENTRY.
BSR ACHANW < ATTENTE DE FIN DE JOB-ENTRY.
ADRI DCTESC-DEMESC,W < RESTAURE (W)=@DCT-ESCLAVE
< DEMANDEUR.
JMP Z285 < VERS LE RETOUR.
<
< SORTIES EN ERREUR :
<
Z282: EQU $
PLR X,L < RESTAURE L'INDEX COURANT DE
< LA GRAMMAIRE DU CCI, ET
< @DCT-SERVICE.
Z281: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR AU CCI.
JMP Z286 < VERS LE RETOUR.
PAGE
<
<
< C O N T R O L E D E L A T R A C E :
<
<
< FONCTION :
< CE MODULE 'CCI' PERMET DE METTRE
< 'ON' OU 'OFF' LA TRACE SUIVANT LA
< COMMANDE "!TRACE...".
<
<
< NOTA :
< PAS DE MASQUAGE DES INTERRUPTIONS,
< POUR L'ACCES A 'SAVEX', CE SERAIT
< VRAIMENT SE COMPLIQUER POUR RIEN...
<
<
PTRAON: EQU $ < COMMANDE "!TRACE C ON" :
LA SAVEX < ACCES A L'INDICATEUR DE CONTROLE,
RBT XBTROF < ET ON AUTORISE LA TRACE...
JMP PTRA1 < VERS LA MISE EN PLACE...
PTRAOF: EQU $ < COMMANDE "!TRACE C OFF" :
LA MEMV < (A)=LISTE DES INDICATEURS 'MEMV' :
TBT MEMXXX < LA FONCTION EST-ELLE AUTORISEE ???
JNC PTRA2 < NON, ERREUR...
LA SAVEX < ACCES A L'INDICATEUR DE CONTROLE,
SBT XBTROF < ET INHIBITION DE LA TRACE...
<
< CONTROLE DE LA TRACE :
<
PTRA1: EQU $
STA SAVEX
<
< RETOUR :
<
PTRA3: EQU $
RSR
<
< SORTIE EN ERREUR :
<
PTRA2: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR AU 'CCI'...
JMP PTRA3 < ET ON SORT...
PAGE
IF OACTIV-EXIST,XEIF%8,,XEIF%8
<
<
< V I S U A L I S A T I O N D E L ' A C T I V I T E D U
< S Y S T E M E E N M O Y E N N E D E F I N I T I O N :
<
<
< FONCTION :
< LES COMMANDES "!ACTIVITE ON" ET
< "!ACTIVITE OFF" PERMETTENT D'ACTIVER
< OU INHIBER LE DISPOSITIF DE VISUALI-
< SATION DE L'ACTIVITE DU SYSTEME SOUS
< LA FORME D'UNE MATRICE (RECEPTEUR/EMETTEUR)
< SUR LE SYSTEME DE TELEVISION NUMERIQUE
< MOYENNE DEFINITION.
<
<
< D E S A C T I V A T I O N D U D I S P O S I T I F :
<
<
PACOFF: EQU $
LA AACTIV
RBT XACTIV < IL SUFFIT DE RENDRE PAIRE L'ADRESSE
< DU SOUS-PROGRAMME 'ACTIV'...
<
< MISE EN PLACE DE L'INDICATEUR
< D'ACTIVATION/INHIBITION :
<
PACTI2: EQU $
STA AACTIV < MISE A JOUR DU RELAI DU SOUS-PROGRAMME
< 'ACTIV'...
<
< FAUT-IL LIBERER LA 'CDAJ' ???
<
XCDAGL:: VAL K < VALEUR DU MOT 'ACDAG' LORSQU'AUCUNE
< COMMANDE "!CDAG" N'A ETE FRAPPEE,
XCDAGO:: VAL XCDAGL)MFFFF < VALEUR DU MOT 'ACDAG' LORSQU'UNE COMMAN-
< DE "!CDAG" A ETE FRAPPEE, ET QUE DONC
< UN UTILISATEUR S'EST ATTRIBUE LA 'CDA-
< COMMUNE', QUI NE L'EST DONC PLUS ???!!!?
XCDAJL:: VAL XCDAGL < INDICATEUR 'CDAJ' LIBRE,
XCDAJO:: VAL XCDAGO < INDICATEUR 'CDAJ' OCCUPEE.
TBT XACTIV < EST-CE "ON" OU "OFF" ???
JC PACTI4 < "ON", ON VIENT DONC DE S'APPROPRIER
< LA 'CDAJ' POUR LE COMPTE DU SYSTEME...
PSR W < "OFF",
LRM W
WORD ACDAJ5 < (W)=BASE LE VERROU D'ACCES A LA 'CDAJ',
STZ O,W < ET ON LA LIBERE...
IF XCDAJO-K,XEIF%,,XEIF%
IF ATTENTION : LE 'STZ' EST IDIOT !!!
XEIF%: VAL ENDIF
PLR W < RESTAURATION DE :
< (W)=ADRESSE DE 'DCTESC'...
PACTI4: EQU $
<
< RETOUR AU 'CCI' :
<
PACTI3: EQU $
RSR
<
<
< A C T I V A T I O N D U D I S P O S I T I F :
<
<
PACON: EQU $
<
< TEST D'AUTORISATION :
<
LA MEMV
TBT MEMXXX < LES FONCTIONS DANGEREUSES SONT-ELLES
< AUTORISEES ???
JNC PACTI1 < NON, L'ACTIVATION EST REFUSEE...
<
< TEST DE L'ETAT DU 'CBMJ' :
<
BSR ASMMK < ON MASQUE LES INTERRUPTIONS, CAR EN
< EFFET ON VA LIRE LE REGISTRE 'IM' PAR
< UN 'XIMR' ; A NOTER QU'ON NE PEUT UTILI-
< SER 'PIMMST' GENERE PAR 'PR1', CAR LE
< BIT 'NIVCBJ' DE 'IM' A PU ETRE MODIFIE
< A LA MAIN...
LAI MMOT < AFIN DE TOUT MASQUER...
XIMR A < LECTURE DE 'IM',
PSR A < SAUVEGARDE,
XIMR A < ET RESTAURATION...
BSR ASMDK < ET ON PEUT ALORS DEMASQUER.
PLR A < (A)=CONTENU DU REGISTRE 'IM' COURANT,
TBT NIVCBJ < ALORS LE SYSTEME DE TELEVISION NUMERI-
< QUE MOYENNE DEFINITION EST-IL ACCES-
< SIBLE ???
JC PACTI1 < NON, IL EST MASQUE...
<
< ESSAYONS DE S'APPROPRIER LA 'CDAJ' :
<
PSR W
LRM W
WORD ACDAJ4 < (W)=BASE LE VERROU D'ACCES A LA 'CDAJ',
LAI XCDAJO
XM O,W < ET ON TENTE DE S'APPROPRIER LA 'CDAJ' :
PLR W < RESTAURE :
< (W)=ADRESSE DE LA 'DCTESC'...
IF XCDAJO-K,XEIF%,,XEIF%
IF ATTENTION : LE 'JANE' QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
JANE PACTI1 < ET BIEN, LA 'CDAJ' EST DEJA OCCUPEE,
< DONC "!ACTIVITE ON" EST REFUSE...
<
< ACTIVATION DU DISPOSITIF :
<
LA AACTIV < OUI,
SBT XACTIV < IL SUFFIT DE RENDRE IMPAIRE L'ADRESSE
< DU SOUS-PROGRAMME 'ACTIV'...
JMP PACTI2 < VERS LA MISE A JOUR, ET LA SORTIE...
<
< SORTIE EN ERREUR :
<
PACTI1: EQU $
ADRI XCCIER,X < POUR UN RETOUR EN ERREUR AU 'CCI'...
JMP PACTI3 < VERS LA SORTIE...
XEIF%8: VAL ENDIF
PAGE
<
<
< V I S U A L I S A T I O N D E L ' A C T I V I T E D U
< S Y S T E M E E N B A S S E D E F I N I T I O N :
<
<
< FONCTION :
< LES COMMANDES "!ACTIVITE H",
< "!ACTIVITE R/V/B"
< PERMETTENT SOIT D'INHIBER ("H") LE
< DISPOSITIF, SOIT D'ACTIVER LA VISUALI-
< SATION DE PAGE DE 4K DE LA MEMOIRE
< "MAITRE" (0-64K) SUR LE SYSTEME DE
< TELEVISION NUMERIQUE SUR L'UN DES
< 3 CANAUX "R"/"V"/"B" AU CHOIX...
< ATTENTION : EN ADRESSANT LE
< DERNIER MOT DE LA MEMOIRE MAITRE,
< ON REFERENCE EN FAIT 'BMEMQ' (VOIR
< 'IDLE')...
<
<
< ARGUMENTS :
< (B)=NUMERO DU PROCESSEUR DE VISUALISATION ('TVPOFF',
< 'TVPR', 'TVPV' OU 'TVPB'),
< (W)=ADRESSE DE 'DCTESC',
< (VALESC)=ADRESSE DE LA PAGE A VISUALISER.
< SI CELLE-CI REFERENCE LE DERNIER MOT
< DE LA MEMOIRE, ELLE EST REMPLACEE PAR
< 'BMEMQ', PERMETTANT AINSI INDIRECTEMENT
< LA VISUALISATION D'UNE ZONE DE MEMOIRE
< QUELCONQUE...
<
<
PACTV: EQU $
IF NSPDKU-NSPSER,XEIF%,,
IF ATTENTION : IL FAUT QUE 'DKU' SOIT ININTERRUPTIBLE
IF PAR LES NIVEAUX DE SERVICE, AFIN QUE CE DISPOSITIF
IF FONCTIONNE CORRECTEMENT !!!
XEIF%: VAL ENDIF
<
< TEST D'AUTORISATION :
<
LA MEMV
TBT MEMXXX < LES FONCTIONS DANGEREUSES SONT-ELLES
< AUTORISEES ???
JNC PACTV1 < NON, L'ACTIVATION EST REFUSEE...
<
< TEST DE L'ACCESSIBILITE :
<
LA ETASYS
TBT TVEXIS < LE SYSTEME BASSE-DEFINITION EST-IL
< OPERATIONNEL ???
JNC PACTV1 < NON, ERREUR...
<
< MISE EN PLACE DE LA FONCTION :
<
LA VALESC-DCTESK,W < (A)=ADRESSE DE LA PAGE MEMOIRE A VISUA-
< LISER...
XWOR%1: VAL -DADR
XWOR%2: VAL LK>DADR*LSPACE=XWOR%1
CPI BIT>XWOR%2-Z < EST-CE LE DERNIER MOT DE LA MEMOIRE
< MAITRE ???
JNE PACTV2 < NON...
LRM A < OUI :
WORD BMEMQ < ON PREND ALORS COMME ADRESSE CELLE DU
< BUFFER DE COPIE DE 'IDLE'...
PACTV2: EQU $
XR A,B < (A)=NUMERO DU PROCESSEUR DE VISUALI-
< TION,
< (B)=ADRESSE DE LA PAGE A VISUALISER.
XWOR%1: VAL TVSIMU=K
IF XWOR%1-K,,XEIF%,
SLLS XWOR%1 < CADRAGE DU NUMERO DE PROCESSEUR,
XEIF%: VAL ENDIF
PSR W < SAUVEGARDE DE L'ADRESSE DE 'DCTESC'.
CALL #SISP CMS5 W ZERO#
BSR ASMMK < MASQUAGE DES INTERRUPTIONS...
STA TVCTRL-ZERO,W < MISE EN PLACE DU NUMERO DU PROCESSEUR
< DE VISUALISATION (SI "R", "V" OU "B"),
< OU DESACTIVATION DU DISPOSITIF (SI
< 'TVPOFF'),
STB TVMEME-ZERO,W < ET MISE EN PLACE DE L'ADRESSE DE LA
< PAGE A VISUALISER...
BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS,
PLR W < RESTAURE :
< (W)=ADRESSE DE 'DCTESC'.
<
< RETOUR :
<
PACTV3: EQU $
RSR
<
< RETOURS EN ERREUR AU 'CCI' :
<
PACTV1: EQU $
ADRI XCCIER,X < POUR UN RETOUR EN ERREUR AU 'CCI',
JMP PACTV3 < VERS LA SORTIE...
< REFUSEE...
PAGE
<
<
< M O D I F I C A T I O N D E L A Z O N E D E M E M O I R E
< Q U E L C O N Q U E C O P I E E P A R L ' I D L E :
<
<
< FONCTION :
< 'IDLE' COPIE EN PERMANENCE
< UNE ZONE DE MEMOIRE QUELCONQUE
< DANS UN BUFFER RESIDENT 'BMEMQ'.
< LA COMMANDE "!ACTIVITE M" PERMET DE
< MODIFIER LA DADR-ADRESSE DE LA
< ZONE DE MEMOIRE QUELCONQUE...
<
<
< ARGUMENT :
< (W)=ADRESSE DE LA 'DCTESC'.
<
<
PACTM: EQU $
<
< VALIDATION :
<
LA MEMV
TBT MEMXXX < LES FONCTIONS DANGEREUSES SONT-ELLES
< AUTORISEES ???
JNC PACTM1 < NON, LA COMMANDE EST REFUSEE !!!
<
< EXECUTION :
<
LA VALESC-DCTESK,W < OUI,
< (A)=DADR-ADRESSE DE LA ZONE MEMOIRE
< QUE L'ON SOUHAITE ATTEINDRE,
PSR W
LRM W
WORD AMEMQ < (W)=ADRESSE OU METTRE LA DADR-ADRESSE,
STA O,W < ET ON MODIFIE AINSI 'IDLE'...
PLR W
<
< RETOUR AU 'CCI' :
<
PACTM2: EQU $
RSR
<
< RETOUR EN ERREUR :
<
PACTM1: EQU $
ADRI XCCIER,X < POUR PROVOQUER UN RETOUR EN ERREUR...
JMP PACTM2 < ET VERS LA SORTIE...
PAGE
<
<
< M A J D E L A T A B L E D E T A B U L A T I O N :
<
<
< ARGUMENT :
< (B)=CONSTANTE DE TRANSLATION POUR
< L'UNE DES 2 TABLES D'INITIALI-
< SATION DE 'HDLSUR'.
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< R A Z D E A T A B U L :
<
<
INITAB: EQU $
PSR X,L,W < SAVE INDEX COURANT DE LA
< GRAMMAIRE DU CCI, L'ADRESSE DE LA 'DCT'
< DE SERVICE ET CELLE DE 'DCTESC'...
<
< RECUPERATION DE LA DCT DE LA VISU :
<
LXI PHIN
LBY &TASSGN-DCTESC,W
ANDI XNVPF)MOCD
LR A,X < (X)=NSPIN.
BSR ACADCT < RENVOIE (A)=@DCTIN.
LAD VAR+ATABUL
STA VALESC-DCTESK,W < SAVE @ATABUL DANS 'VALESC',
< POUR USAGE ULTERIEUR.
<
< INITIALISATION DE LA TABLE
< DE TABULATION DE 'PHIN' :
<
LRM W
WORD VARSUR+TABSUR < (W)=ADRESSE DE LA LISTE D'INITIALISATION
< DE LA TABULATION STANDARD,
ADR B,W < ON PEUT AINSI ATTEINDRE UNE LISTE DE
< REMISE A 0 SI :
< (B)=TABSU0-TABSUR...
LXI LCCI/NBITMO
IF LCCI/NBITMO-LTATAB,,XEIF%,
IF ATTENTION : LA LONGUEUR DES LISTES DE
IF TABULATION EST MAUVAISE !!!
XEIF%: VAL ENDIF
Z306: EQU $
LA LTATAB-D,W < (A)=VALEUR COURANTE D'INITIALISATION,
STA &VAR+ATABUL < ON INITIALISE (AVEC LA TABULATION STAN-
< DARD, OU LA REMISE A 0),
ADRI -D,W < ET PASSAGE A L'ENTREE SUIVANTE...
JDX Z306
PLR X,L,W
RSR
<
<
< D E F I N I T I O N D ' U N
< D E B U T D E Z O N E :
<
<
< DEBUT DE ZONE :
< IL EST PRECISE PAR UN "1" OU UN "/"
< TAPE PAR L'UTILISATEUR ; ALORS QUE
< LE CONTENU DE LA ZONE EST DEFINI PAR
< DES "0" OU DES " ".
<
<
ZONTAB: EQU $
PSR X < SAVE INDEX GRAMMAIRE CCI.
LA VALESC-DCTESK,W < RESTAURE (A)=@ATABUL.
LX VAR+XBUFGR < (X)=INDEX COURANT DU BUFFER CCI
ADRI -D,X < CAR CCI A DEJA FAIT +1 SUR
< L'INDEX DU BUFFER CCI ; ON A :
< (X)=INDEX DU DEBUT DE LA ZONE.
LYI FONSB1 < FONCTION SET BIT A 1.
BSR ATMOBT < MISE A 1 DU BIT DE DEBUT
< DE ZONE.
PLR X < RESTAURE INDEX GRAMMAIRE CCI.
RSR
PAGE
<
<
< C O M M A N D E D ' A U T O R I S A T I O N
< E T D ' I N H I B I T I O N D E
< L ' E C H O I M M E D I A T E N
< T E M P S P A R T A G E :
<
<
< FONCTION :
< CES 2 MODULES SONT REFERENCES
< PAR LA GRAMMAIRE DU 'CCI' POUR
< AUTORISER/INHIBER (ETAT INITIAL)
< L'ECHO IMMEDIAT DES COMMANDES
< DU 'CCI' (VOIR "!ECHO").
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
PECHO: EQU $
LA IDDESC-DCTESC,W
SBT IDESC9 < AUTORISATION...
PECHO1: EQU $
STA IDDESC-DCTESC,W
RSR
PECHON: EQU $
LA IDDESC-DCTESC,W
RBT IDESC9 < INHIBITION...
JMP PECHO1 < ET C'EST TOUT (JE FATIGUE POUR LES
< COMMENTAIRES...).
NLS
PAGE
<
<
< M O D I F I C A T I O N D U T O M E D E S S A P :
<
<
< FONCTION :
< LA COMMANDE !Z
< PERMET DE MODIFIER LE CARACTERE 'CTRLC' DU
< TOM ED ESSAP, ET AINSI MODIFIER CELUI-CI
< DYNAMIQUEMENT, ET MEME BLOQUER CARREMENT
< L'ACCES A ":SYS" ET ":JFC" EN METTANT UN
< CODE INEXISTANT...
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC',
< VALESC=CODE CHOISI...
<
<
ZPASS: EQU $
LA VALESC,W < (A)=CODE CHOISI POUR 'CTRLC',
JAL ZPASS1 < ERREUR...
CPI MOCD < TIENT-IL SUR UN OCTET ???
JG ZPASS1 < NON, ERREUR...
PSR X,L
LXI NSPASS
BSR ACADCT < (L)=ADRESSE MOT DE 'CTRLC'...
LA VALESC,W < (A)=CODE CHOISI QUE L'ON SAIT ETRE
< VALIDE MAINTENANT...
STBY O,L < ET ON L'INSERE DANS LE TOM ED ESSAP ;
< ON NOTERA QUE LE CODE '03 RESTAURE LE
< TOM ED ESSAP INITIAL ('KETX')...
PLR X,L
ZPASS2: EQU $
RSR < ET C'EST TOUT...
<
< SORTIES EN ERREUR :
<
ZPASS1: EQU $
ADRI XCCIER,X < ACCES AU NOEUD D'ERREUR...
JMP ZPASS2 < ET ON SORT...
PAGE
<
<
< C H E V A L D E T R O I E :
<
<
< FONCTION :
< CE MODULE TRANSCODE SUIVANT
< LA CONSTANTE MAGIQUE LE MESSAGE
< ENTRE PAR "!CMS" ENTRE "!L :SYS"
< ET LE TOM ED ESSAP ; CETTE METHODE
< PERMET DE VERIFIER ASSEZ SUREMENT
< QUE C'EST BIEN DIRECTEMENT AVEC
< LE 'CCI' QUE L'ON DIALOGUE, ET NON
< PAS AVEC UN PROGRAMME UTILISATEUR
< QUI SIMULERAIT SUR CETTE VISU
< TOUTE LA PROCEDURE DE DIALOGUE AFIN
< DE PRELEVER LE TOM ED ESSAP !!!
<
<
< ARGUMENTS :
< (L)=ADRESSE DE LA 'DCT' DE SERVICE.
< (XBUFGR)=INDEX COURANT DU BUFFER APRES "!CMS".
<
<
HORSE: EQU $
PSR B,X,W < SAUVEGARDES ESSENTIELLES...
<
< BOUCLE DE CHIFFRAGE :
<
HORSE2: EQU $
BSR ACARAC < (A)=CARACTERE COURANT DE 'BUFESC' :
JE HORSE1 < C'EST UN , ALLONS RE-EMETTRE LE
< MESSAGE TRANSCODE...
LX VAR+XBUFGR < NON, C'EST UN CARACTERE NORMAL,
ADRI -I,X < REVENONS DESSUS, AFIN DE LE CODER...
< (X)=INDEX DU CARACTERE A CODER...
LBI K < PAR PURE HYGIENE...
SCLD NBITMO-NBITCX < SAUVEGARDE DU PREMIER CHIFFRE HEXA-
< DECIMAL DU CARACTERE DANS 'B',
BSR ACHIFR < ET CHIFFRAGE DU DEUXIEME CHIFFRE HEXA-
< DECIMAL DU CARACTERE COURANT,
SCRD NBITMO-NBITCX < ET RECONSTITUTION D'UN CARACTERE CODE
< QUI NE DIFFERE QUE PAR SON DEUXIEME
< CHIFFRE HEXA-DECIMAL DU CARACTERE ENTRE..
STBY &VAR+ABUFGR < ET RE-INSERTION DU CARACTERE COURANT
< CHIFFRE DANS LE BUFFER,
JMP HORSE2 < VERS LE CARACTERE SUIVANT...
<
< EDITION DU MESSAGE CODE :
<
HORSE1: EQU $
LAD VAR+DEMCCI
LR A,W < (W)=ADRESSE DE LA DEMANDE D'EMISSION.
< (ELLE A ETE CORRECTEMENT POSITIONNEE
< LORS DE L'ECHO DE "!CMS")
BSR ACHAND < ENVOI DE "!CMS" CODEE...
BSR ACHANW < ET ATTENTE DE FIN D'OPERATION...
<
< GESTION DES CONNEXIONS MATRICIELLES :
<
LA ARGDEM+OPDEM
ANDI MKOPDM < (A)=FONCTION COURANTE, ET
< (W)=ADRESSE DE LA DEMANDE COURANTE...
SVC SVCM8 < VERS LA DUPLICATION EVENTUELLE DE LA
< DEMANDE (W) SUR LES PERIPHERIQUES
< CONNECTES AU PERIPHERIQUE COURANT...
<
< SORTIE :
<
PLR B,X,W < RESTAURATIONS,
RSR < ET RETOUR SANS TOUCHER A L'INDEX
< DE LA GRAMMAIRE 'CCI' (X)...
LST
PAGE
<
<
< A U T O R I S A T I O N E T
< I N H I B I T I O N D E S F O N C T I O N S
< D A N G E R E U S E S :
<
<
< FONCTION :
< CE MODULE REFERENCE PAR "!R"
< SOUS 'CCI', PERMET QUELQUE SOIT
< LE MODE, QUELQUE SOIT L',...
< D'INHIBER LES FONCTIONS DANGEREUSES...
< ET DEPUIS PEU (SOUS ":SYS" UNIQUE-
< MENT) DE LES AUTORISER PAR LA
< COMMANDE "!R DANGER" ;
< BIEN SUR C'EST DANGEREUX, MAIS
< FINALEMENT MOINS QUE D'ALLER
< BRICOLER AU PUPITRE...
<
<
PDANGE: EQU $ < ENTRY D'AUTORISATION :
BSR ASMMK < M A S Q U A G E I N T E R R U P T S...
LA MEMV
SBT MEMXXX < ON PREPARE L'AUTORISATION...
JMP PDANG1 < VERS LA MISE A JOUR...
PINHIB: EQU $ < ENTRY D'INHIBITION :
BSR ASMMK < M A S Q U A G E I N T E R R U P T S...
LA MEMV
RBT MEMXXX < ON PREPARE L'INHIBITION...
PDANG1: EQU $ < MISE A JOUR DE 'MEMV' :
STA MEMV < ON MET A JOUR 'MEMV', ET :
BSR ASMDK < D E M A S Q U A G E...
RSR < PAS MECHANT...
PAGE
<
<
< G E S T I O N D E L A ' C D A ' :
<
<
< PHILOSOPHIE :
< LA 'CDA' EST ATTACHEE A CHAQUE UTILISATEUR
< PAR L'INTERMEDIAIRE DE SA 'DCTESC' ET DU
< SCHEDULER QUI POSITIONNE 'OCDA' ET 'ECDA'.
< ON DISTINGUE 3 TYPE DE 'CDA' :
< 1 - LA 'CDA-COMMUNE' : DONNEE PAR 'AOCDA' ET
< 'AECDA' ET QUI EST COMMUNE A TOUS,
< OU PRIVEE (?!???!?!) SI LA COMMANDE
< "!CDAG" EST UTILISEE, AUQUEL CAS
< TOUT AUTRE ACCES A LA 'CDA-COMMUNE'
< PAR UN AUTRE UTILISATEUR SE SOLDERA
< PAR UNE TRAPPE (VOIR 'HDLSCH')...
< 2 - LA 'CDA-PRIVEE' : EST UNE EXTENSION DE
< L'ESPACE MEMOIRE UTILISATEUR, ET CORRESPOND
< LORSQUE LE SWAPPING A LIEU SUR 'DKS' AU ZONE
< DE SIMULATION DU SWAPPING EN MEMOIRE ; A NOTER
< QUE SUIVANT L'IDESC, DES TRAPPES DE VIOLATION
< MEMOIRE POURRONT AVOIR LIEU SUIVANT QUE LA
< ZONE ADRESSEE EXISTE OU NON...
< 3 - LA 'CDA-TELEVISION' : QUI CORRESPOND A
< LA MEMOIRE DE RAFRAICHISSEMENT DE LA TELEVISION ;
< ON PEUT AINSI MODIFIER MOT A MOT UNE IMAGE...
< ELLE EST APPELEE AUSSI 'CDA' 'BASSE-
< DEFINITION'...
< 4 - LA 'CDA-TELEVISION' DE MOYENNE
< DEFINITION QUI PERMET D'ATTEINDRE
< LE NOUVEL IMAGEUR 512*512...
<
<
< FONCTION :
< CINQ COMMANDES SONT DISPONIBLES :
< !CDA POUR LA 'CDA-COMMUNE' ET "PARTAGEABLE" (!!??!),
< !CDAG POUR LA 'CDA-COMMUNE' MAIS "PRIVEE" (!??!?!),
< !CDAP POUR LA 'CDA-PRIVEE',
< !CDAI POUR LA 'CDA-IMAGE' BASSE-DEFINITION,
< !CDAJ POUR LA 'CDA-IMAGE' MOYENNE-DEFINITION.
<
<
< ACCES A LA 'CDA' COURANTE :
< L'UTILISATEUR PEUT A TOUT MOMENT
< CONNAITRE L'ADRESSE DE SA 'CDA', ET
< DONC SA LONGUEUR A L'AIDE DE LA
< FONCTION '1E15, UTILISEE 2 FOIS,
< LA PREMIERE AVEC (A)=AOCDA ('18),
< LA SECONDE AVEC (A)=AECDA ('19), LE
< RESULTAT ETANT RETOURNE DANS 'B'...
<
<
< EXCLUSION DES 'CDA' :
< EN REGLE GENERALE, IL EST
< IMPOSSIBLE DE POSSEDER SIMUL-
< TANEMENT PLUSIEURS 'CDA' (PAR
< EXEMPLE 'CDAI' ET 'CDAJ') ;
< IL Y A CEPENDANT UNE EXCEPTION
< A CETTE REGLE : EN EFFET, LA
< COMMANDE "!CDAG" NE PEUT ETRE
< ANNULEE QUE PAR "!CDA", "!CDAP"
< OU ENFIN "!F" ; CECI A ETE IN-
< TRODUIT AFIN QUE LORSQU'ON
< POSSEDE LA 'CDAG', ON PUISSE
< MALGRE TOUT ATTEINDRE LES IMA-
< GEURS SANS POUR CELA RISQUER DE
< PERDRE LES INFORMATIONS CONTE-
< NUES DANS LA 'CDAG', DE PLUS IL
< EST NECESSAIRE DE LE FAIRE POUR
< 'CDAI' ET 'CDAJ' A CAUSE DE LA
< COMMANDE "!CDAI=I/J"...
<
<
PCDA: EQU $
<
<
< ' C D A - C O M M U N E P R I V E E ' :
<
<
PCDAG: EQU $
LA IDDESC-DCTESC,W
TBT IDESC5 < N'A-T'ON PAS DEJA LA 'CDAG' ???
JC PCDA20 < OUI, DONC ON VA LA GARDER, MAIS EN
< REPOSITIONNANT LES ADRESSES 'CDESCO'
< ET 'CDESCE', AU CAS OU LA 'CDAI' OU
< LA 'CDAJ' FUSSENT UTILISEES AU PREA-
< LABLE...
PSR W
LRM W
WORD ACDAG1 < (W)=PERMET D'ATTEINDRE LE MOT 'ACDAG'
< DE LA 'DCTSCH',
LAI XCDAGO
XM O,W < ALORS, LA 'DCA-COMMUNE' EST-ELLE DEJA
< OCCUPEE PAR UNE COMMANDE "!CDAG" ???
PLR W
JANE APCDA2 < OUI, DONC LA COMMANDE "!CDAG" NE PEUT
< ETRE ACCEPTEE...
<
< OK, MAINTENANT : (ACDAG)=XCDAGO,
< ET L'UTILISATEUR COURANT POSSEDE
< LA 'CDA-COMMUNE' JUSQU'A CE QU'IL
< LA RENDE PAR UNE COMMANDE "!CDA",
< "!CDAP", OU BIEN EN FAISANT
< UN LOG-OUT...
<
IF XCDAGO-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST 'JANE' CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
LA IDDESC-DCTESC,W
SBT IDESC5 < ET ON MEMORISE DANS 'DCTESC' CETTE
< ATTRIBUTION PAR "!CDAG"...
STA IDDESC-DCTESC,W
PCDA20: EQU $ < CAS OU L'ON POSSEDE DEJA LA 'CDAG'...
LRM A,B
WORD AOCDA3 < SUR LA
WORD AECDA3 < 'CDA-COMMUNE'...
JMP PCDA5 < VERS LA MISE EN PLACE DES ADRESSES...
<
<
< ' C D A - C O M M U N E P A R T A G E A B L E ' :
<
<
PCDAIN: EQU $
LRM A,B
WORD AOCDA2 < SUR LA
WORD AECDA2 < 'CDA-COMMUNE'...
<
< MISE EN PLACE DES ADRESSES, ET RETOURS :
<
PCDA1: EQU $ < CAS DE "!CDA" ET "!CDAP"...
<
< ON A ICI :
< (A)=ADRESSE DE DEBUT DE LA 'CDA',
< (B)=SON ADRESSE DE FIN.
<
PSR A,W
LA IDDESC-DCTESC,W
TBT IDESC5 < MAIS CET UTILISATEUR QUI A FRAPPE "!CDA",
< "!CDAI" OU "!CDAP" N'AVAIT-IL PAS FRAPPE
< "!CDAG" AU PREALABLE ???
RBT IDESC5 < DE TOUTE FACON, ON EFFACE CET APPEL...
STA IDDESC-DCTESC,W
JNC PCDA6 < NON, PAS DE "!CDAG" ANTERIEUR...
LRM W < OUI,
WORD ACDAG2 < (W)=ADRESSE DU MOT 'ACDAG' DE 'DCTSCH',
IF XCDAGL-K,,XEIF%,
IF ATTENTION : CE QUI VA SUIVRE EST IDIOT !!!
XEIF%: VAL ENDIF
STZ O,W < LIBERONS LA 'CDAG'...
PCDA6: EQU $
PLR A,W
PCDA5: EQU $ < CAS DE "!CDAG", "!CDAI" ET "!CDAJ"...
PSR A,W
TBT BMCDAJ < EST-CE LA 'CDAJ' QUI EST DEMANDEE ???
JC PCDA8 < OUI, ON NE REGARDE PAS SI ON L'AVAIT
< DEJA, AFIN DE NE PAS LA RENDRE...
LA CDESCO-DCTESC,W < ACCES A LA 'CDA' COURANTE DE CET
< UTILISATEUR :
TBT BMCDAJ < NE SERAIT-CE PAS LA 'CDAJ' ???
< (CARACTERISEE PAR LE BIT 'BMCDAJ' DANS
< DANS TOUTES SES DADR-ADRESSES)
JNC PCDA8 < NON, RIEN A FAIRE...
LRM W < OUI,
WORD ACDAJ2 < (W)=ADRESSE DU MOT 'ACDAJ' DE 'DCTSCH',
< QUI PERMET L'APPROPRIATION...
IF XCDAJL-K,,XEIF%,
IF ATTENTION : LE 'STZ' QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
STZ O,W < LIBERONS LA 'CDAJ'...
PCDA8: EQU $ < CAS OU L'ON N'A PAS LA 'CDAJ', OU BIEN
< OU ON LA DEMANDE PRESENTEMENT...
PLR A,W
<
< MISE EN PLACE DE 'CDESCO'/'CDESCE' :
<
STA CDESCO-DCTESC,W < MISE EN PLACE
STB CDESCE-DCTESC,W < DANS LA 'DCTESC',
PCDA3: EQU $ < RETOUR EN ERREUR...
RSR < RETOUR...
<
<
< ' C D A - I M A G E ' B A S S E - D E F I N I T I O N :
<
<
PCDAIM: EQU $
LRM A,B
WORD MEMTV0 < SUR LA
WORD MEMTVR-Z < 'CDA-TELEVISION'...
JMP PCDA5 < VERS LA MISE EN PLACE DES ADRESSES...
< (EN CONSERVANT LA 'CDAG' SI ON LA
< POSSEDE DEJA...)
<
<
< ' C D A - I M A G E ' M O Y E N N E - D E F I N I T I O N :
<
<
PCDAJM: EQU $
<
< TEST DE L'ETAT DU 'CBMJ' :
<
BSR ASMMK < ON MASQUE LES INTERRUPTIONS, CAR EN
< EFFET ON VA LIRE LE REGISTRE 'IM' PAR
< UN 'XIMR' ; A NOTER QU'ON NE PEUT UTILI-
< SER 'PIMMST' GENERE PAR 'PR1', CAR LE
< BIT 'NIVCBJ' DE 'IM' A PU ETRE MODIFIE
< A LA MAIN...
LAI MMOT < AFIN DE TOUT MASQUER...
XIMR A < LECTURE DE 'IM',
PSR A < SAUVEGARDE,
XIMR A < ET RESTAURATION...
BSR ASMDK < ET ON PEUT ALORS DEMASQUER.
PLR A < (A)=CONTENU DU REGISTRE 'IM' COURANT,
TBT NIVCBJ < ALORS LE SYSTEME DE TELEVISION NUMERI-
< QUE MOYENNE DEFINITION EST-IL ACCES-
< SIBLE ???
JC PCDA2 < NON, IL EST MASQUE, DONC "!CDAJ..."
< EST REFUSEE...
<
< CALCUL DE LA TRANSLATION
< DE LA PREMIERE PAGE VERS
< LA PAGE DEMANDEE :
<
LA VALESC-DCTESK,W < (A)=NUMERO DE LA PAGE DEMANDEE,
SLLS LK>DADR*IMCDAJ=K
LR A,Y < (Y)=TRANSLATION EN 'DADR'-MOTS DE LA
< PAGE DEMANDEE PAR RAPPORT A LA
< PREMIERE,
LA VALESC-DCTESK,W
SCLS LK>DADR*IMCDAJ=K
CPR A,Y < LE 'SLLS' ET LE 'SCLS' DOIVENT DONNER
< LE MEME RESULTAT S'IL N'Y A PAS DE-
< BORDEMENT, C'EST-A-DIRE SI L'ARGUMENT
< 'VALESC' EST BON...
JNE PCDA2 < ET BIEN NON, IL EST TROP GRAND...
<
< TENTATIVE D'APPROPRIATION DE LA 'CDAJ' :
<
LA CDESCO-DCTESC,W < ACCES A LA 'CDA' COURANTE DE CET
< UTILISATEUR :
TBT BMCDAJ < NE SERAIT-CE PAS DEJA LA 'CDAJ' ???
< (CARACTERISEE PAR LE BIT 'BMCDAJ' DANS
< DANS TOUTES SES DADR-ADRESSES)
JC PCDA11 < OUI, ON NE SE LA REAPPROPRIE PAS...
PSR W < NON, ON VA TENTER :
LRM W
WORD ACDAJ1 < (W)=PERMET D'ATTEINDRE LE MOT 'ACDAJ'
< DE 'DCTSCH' QUI PERMET L'ALLOCATION
< UNIQUE DE 'CDAJ'...
LAI XCDAJO < (A)=ETAT D'OCCUPATION DE 'CDAJ',
XM O,W < ET L'ON TENTE DE S'APPROPRIER 'CDAJ' :
PLR W
APCDA2: JANE PCDA2 < ET BIEN C'EST IMPOSSIBLE, ELLE EST DEJA
< OCCUPEE ; ON LA LAISSE A CELUI QUI L'A...
< (NOTONS QUE 'XM' N'A PAS CHANGE LA
< VALEUR DU CONTENU DE 'ACDAJ'...)
< (ET RELAI...)
IF XCDAJO-K,XEIF%,,XEIF%
IF ATTENTION : LE 'JANE' QUI PRECEDE EST IDIOT !!!
XEIF%: VAL ENDIF
PCDA11: EQU $
<
< OK, ON A LA 'CDAJ',
< CALCULONS L'ADRESSE
< DE LA PAGE DESIREE :
<
LRM A,B
WORD MCDAJO < (A)=ADRESSE DE DEBUT DE LA PREMIERE
< PAGE,
WORD MCDAJE < (B)=ADRESSE DE FIN DE LA PREMIERE PAGE.
ADR Y,A < TRANSLATION SUR
ADR Y,B < LA PAGE DEMANDEE,
IF BMCDAJ-BITSIG,,XEIF%,
IF ATTENTION : LES TESTS SUIVANTS SONT MAUVAIS !!!
XEIF%: VAL ENDIF
CPZR B < VALIDONS LA TRANSLATION (Y) PAR LE TEST
< DE L'ADRESSE DE FIN :
JGE PCDA10 < ERREUR, L'ADRESSE REPASSE PAR 0 ; L'AR-
< GUMENT 'VALESC' EST TROP GRAND...
JAL PCDA5 < OK, VERS LA MISE EN PLACE DES ADRESSES...
< (EN CONSERVANT LA 'CDAG' SI ON LA
< POSSEDE DEJA...)
< (L'ADRESSE DE DEBUT EST BONNE, PUISQUE
< NEGATIVE, CF. 'BMCDAJ'...)
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT L'ADRESSE DE
< DEBUT PEUT ETRE BONNE, ALORS QUE
< CELLE DE FIN EST MAUVAISE !!!
<
PCDA10: EQU $ < SORTIE EN ERREUR, ALORS QUE LA 'CDAJ'
< A ETE ALLOUEE A CET UTILISATEUR...
PSR W
LRM W < OUI,
WORD ACDAJ3 < (W)=ADRESSE DU MOT 'ACDAJ' DE 'DCTSCH',
< QUI PERMET L'APPROPRIATION...
IF XCDAJL-K,,XEIF%,
IF ATTENTION : LE 'STZ' QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
STZ O,W < ET ON LIBERE LA 'CDAJ'...
PLR W
JMP PCDA2 < ET ENFIN, SORTIE EN ERREUR...
<
<
< ' C D A - P R I V E E ' :
<
<
PCDAP: EQU $
LA IDESC-DCTESC,W
ANDI MKIDES < (A)='IDESC' DE L'UTILISATEUR...
CP NUSEP1 < AUTORISE ???
JGE PCDA2 < NON, IL N'A PAS DE 'CDAP' !!!
<
< NOTA :
< DORENAVANT, LA COMMANDE "!CDAP"
< EST COMPATIBLE AVEC UN SWAPPING
< SUR 'PR1' ; EN EFFET LORS DE LA
< SELECTION DE L'ORGANE DE SWAPPING
< LORS DE L'INITIALISATION DU SWAPPING
< OUT, SI LA 'CDA' COURANTE DE L'UTI-
< LISATEUR EST LA "!CDAP", ON FORCE A
< PRIORI 'DKS'.
< DE PLUS, CELA N'EST PAS DANGEREUX
< DE FAIRE CELA ICI, CAR EN EFFET
< LORSQU'ON EXECUTE CE CODE ON EST
< SWAPPE OUT ET CE QUI VA SUIVRE EST
< UN SWAPPING IN QUI UTILISE OBLIGA-
< TOIREMENT L'ORGANE DE SWAPPING OUT
< PRECEDENT...
<
LA DEMSWP-DCTESC+T+ASDEM,W
SB ASYS < OUI, ACCES AU DEPLACEMENT DE L'UTILI-
< SATEUR DANS LES ZONES DE SWAPPING,
XWOR%2: VAL XXXMOY
XWOR%1: VAL TZSWAP/XWOR%2 < PARCEQUE TROP GRAND POUR UN 'ADRI'...
IF XWOR%1*XWOR%2-TZSWAP,,XEIF%,
IF ATTENTION : 'TZSWAP' N'EST PAS DIVISIBLE PAR 2 !!!
XEIF%: VAL ENDIF
DO XWOR%2*M
ADRI -XWOR%1,A < (A)=PREMIERE ADRESSE ACCESSIBLE.
LR A,B < ET SAUVEGARDE DANS 'B'...
PSR X,L
LXI NSPPR1
BSR ACADCT < (A)=(L)=ADRESSE DE 'DCTPR1', CAR EN EFFET
< ELLE CONTIENT 2 CONSTANTES VACHEMENT
< UTILES...
LR B,A < (A)=PREMIERE ADRESSE ACCESSIBLE (EXPRI-
< PRIMEE EN SECTEURS PAR RAPPORT AU '0
< DU PREMIER UTILISATEUR...
MP VAR+TAPROG < PAR CE CALCUL ON PASSE D'UNE ZONE DE
DV VAR+TASWAP < SWAPPING A ZONE SCRATCH ('DKS') A UNE
< ZONE DE SWAPPING SANS ('PR1')...
CPZR B < LE RESTE DOIT ETRE NUL...
JE PCDA7 < OUI, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT LE RESTE DE
< CETTE DIVISION PEUT ETRE NON NUL !!!
<
PCDA7: EQU $
PLR X,L
LR A,B < (A)=(B)=PREMIERE ADRESSE ACCESSIBLE
< DANS L'ESPACE DE SWAPPING SUR 'PR1'...
XWOR%2: VAL YY7 < PREMIERE CONSTANTE INACCESSIBLE DANS
< UNE INSTRUCTION 'ADRI'...
XWOR%2: VAL TCPROG*XXXMOY/XWOR%2
XWOR%1: VAL TCPROG/XWOR%2
DO XWOR%2*M
ADRI XWOR%1,B < (B)=PREMIERE ADRESSE INACCESSIBLE...
SLLD YY7>DADR=K < CONVERSION EN DES ADRESSES RELATIVES
< EN 16-MOTS...
LRM Y
WORD KSIMS>DADR*LK < (Y)=ADRESSE 16-MOTS DU PREMIER MOT
< DISPONIBLE A CET USAGE...
ADR Y,A < (A)=ADRESSE DE DEBUT DE LA 'CDA-PRIVEE',
ADR Y,B < (B)=ADRESSE DE FIN DE
ADRI -Z,B < LA 'CDA-PRIVEE'.
<
< TEST DES CHANGEMENTS DE PAGE (DE 64K) : (A)=DEBUT, (B)=FIN :
<
PSR A,B
LR B,Y < (Y)=FIN, (A)=DEBUT.
SLRD NBITMO+DADR+NBITMO
< (B)=CHIFFRE0(DEBUT).
LR Y,A < (A)=FIN,
SLRS NBITMO+DADR < (A)=CHIFFRE0(FIN).
CPR A,B < Y-A-T'IL CHANGEMENT DE PAGE ???
LR A,Y < (Y)=CHIFFRE0(FIN)...
PLR A,B
JE PCDA1 < IL N'Y A PAS DE CHANGEMENT DE PAGE,
< ET 'A' ET 'B' SONT BONS :
< (A)=DEBUT, (B)=FIN...
<
< CAS DES CHANGEMENTS DE PAGE :
<
XR A,Y < (Y)=DEBUT, (B)=FIN, (A)=CHIFFRE0(FIN).
SLLS NBITMO+DADR < (A)=PSEUDO-MILIEU (DIT "MILIEU").
SBR A,Y
NGR Y,Y < (Y)=MILIEU-DEBUT.
SBR A,B < (B)=FIN-MILIEU.
CPR Y,B < EST-CE LA PARTITION HAUTE OU BASSE PAR
< RAPPORT AU "MILIEU" QUI EST LA PLUS
< GRANDE ???
JL PCDA4 < (B)<(Y) : C'EST LA PARTITION BASSE QUI
< EST LA PLUS INTERESSANTE...
<
< (B)>=(Y) : C'EST LA PARTITION HAUTE :
<
ADR A,B < (B)=FIN-MILIEU+MILIEU=FIN, ET
< (A)=MILIEU=NOUVEAU DEBUT...
JMP PCDA1 < VERS LE RANGEMENT DE 'A' ET 'B' (B EST
< EN FAIT INCHANGE...).
<
< (B)<(Y) : C'EST LA PARTITION BASSE :
<
PCDA4: EQU $
LR A,B
ADRI -Z,B < (B)=MILIEU-E=NOUVELLE FIN, ET
SBR Y,A < (A)=MILIEU-(MILIEU-DEBUT)=DEBUT.
JMP PCDA1 < VERS LE RANGEMENT DE 'A' ET 'B' (A EST
< EN FAIT INCHANGE...).
<
< ERREURS :
<
PCDA2: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR A LA GRAMMAIRE...
JMP PCDA3 < VERS LE RETOUR SANS MISE EN PLACE...
PAGE
<
<
< C O M M U T A T I O N ' C D A I ' --> ' C D A J ' :
<
<
< FONCTION :
< UN NOUVEAU DISPOSITIF A ETE
< INTRODUIT AFIN DE PERMETTRE A
< DE NOMBREUX PROGRAMMES QUI MANI-
< PULENT LA 'CDAI' EXPLICITEMENT
< DE TRAVAILLER EN AVEUGLE (ET SANS
< LE SAVOIR) SUR LA 'CDAJ+...' ; DEUX
< COMMANDES ONT ETE INTRODUITES :
<
< "!CDAI=I" : ALORS "!CDAI" EST "!CDAI",
< "!CDAI=J" : ALORS "!CDAI" EQUIVAUDRA
< A "!CDAJ" LORSQU'ELLE SERA
< EMISE.
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
< RESULTAT :
< POUR 'QCDAIJ', LE CONTENU DE 'X'
< EST INCHANGE SI "!CDAI=I", ET
< INCREMENTE DE 'XCCIER' SI "!CDAI=J".
<
<
PCDAII: EQU $ < TRAITEMENT DE "!CDAI=I" :
LA IDDESC-DCTESC,W
RBT IDESCJ < IL SUFFIT DE CLEARER 'IDESCJ'...
JMP PCDAIK < VERS LA MISE A JOUR...
PCDAIJ: EQU $ < TRAITEMENT DE "!CDAI=J" :
LA IDDESC-DCTESC,W
SBT IDESCJ < IL SUFFIT DE FAIRE MONTER 'IDESCJ'...
PCDAIK: EQU $
STA IDDESC-DCTESC,W < ET ON MET A JOUR 'IDDESC' DANS 'DCTESC'.
RSR
<
<
< T E S T D E C O M M U T A T I O N :
<
<
QCDAIJ: EQU $
LA IDDESC-DCTESC,W
TBT IDESCJ < ALORS : "!DCAI=I" OU "!CDAI=J" ???
ADCR X < ET ON FAIT EN CONSEQUENCE UN RETOUR
< NORMAL SI "!CDAI=I" (IDESCJ=0) OU UN
< RETOUR EN ERREUR SI "!CDAI=J" (IDESCJ=1).
IF BIT-XCCIER,,XEIF%,
IF ATTENTION : LA SORTIE DE 'QCDAIJ' EST MAUVAISE !!!
XEIF%: VAL ENDIF
RSR < ET ON SORT SUIVANT (X)...
PAGE
<
<
< T R A I T E M E N T D U M O D E
< N O N I N T E R A C T I F D U C C I
< P O U R U N E S C L A V E :
<
<
< FONCTION :
< CES ROUTINES SONT APPELEES PAR
< LA GRAMMAIRE DU CCI, EN CERTAINS
< POINTS 'STRATEGIQUES' LORSQUE LE
< CCI EST EN MODE NON INTERACTIF POUR
< UN ESCLAVE.
<
<
< M O D I F I C A T I O N D U R E G I S T R E
< X D ' U N E S C L A V E :
<
<
< A T T E N T I O N :
< CETTE ROUTINE NE FAIT RIEN SI
< L'APPEL DU CCI A EU LIEU PAR UN
< QUIT, CE DONT ON SE REND COMPTE
< EN TESTANT LE MODE DE L'ESCLAVE.
<
<
< ARGUMENT :
< (B)=VALEUR A DONNER AU REGISTRE X. (CONDITION
< DE RETOUR DU CCI EN MODE NON INTERACTIF).
< (W)=ADRESSE DCT(ESCLAVE).
<
<
CCIXE: EQU $
CPZ PSTESC-DCTESC+RS,W < TEST DU REGISTRE 'S' DE
< L'ESCLAVE.
IF MS-BITSIG,,XEIF%,
IF ATTENTION : LE TEST EST IDIOT !!!
XEIF%: VAL ENDIF
JGE Z862 < L'ESCLAVE EST EN MODE MAITRE,
< L'APPEL A EU LIEU PAR QUIT,
< ON FAIT UN RETOUR IMMEDIAT.
<
< CAS DES APPELS PAR SVC :
<
<*******************************************************************************
BSR ASTXES < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
STB PSTESC-DCTESC+RX,W < REGISTRE 'X' DANS PST(ESCLAVE).
<*******************************************************************************
Z862: EQU $ < SORTIE IMMEDIATE DES APPELS
< PAR QUIT.
RSR < ET C'EST TOUT...
<
< I N I T I A L I S A T I O N D E L ' A N A L Y S E
< S Y N T A X I Q U E D U C C I :
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE),
< (L)=ADRESSE DCT(SERVICE).
<
<
INIBES: EQU $
<
< INITIALISATION ANALYSE SYNTAXIQUE :
<
LAD BUFESC-DCTESC,W < (A)=@BUFESC.
SBT BITX < POSITIONNEMENT DU BIT D'INDEX.
STA VAR+ABUFGR < GENERATION DU RELAI INDIRECT
< INDEXE VERS BUFESC.
STZ VAR+XBUFGR < INDEX INITIAL.
<
< INITIALISATION DE DEMCCI :
<
IF NOCMO=K-BIT,,XEIF%,
IF ATTENTION : LE 'BITX' EST RESTE DANS 'A' !!!
XEIF%: VAL ENDIF
SLLS NOCMO=K < (A)=@OCTET DE BUFESC.
STA VAR+DEMCCI+T+AMDEM
< INITIALISATION DE AMDEM DE
< DEMCCI AVEC @BUFESC ; EN EFFET
< PUISQU'ON EST EN NON INTERACTIF,
< DEMCCI N'EST PAS INITIALISEE
< CORRECTEMENT (EN GENERAL),
< OR SON CONTENU EST UTILISE
< LORS DES !ASSIGN SUR LE SGF !!!
LA DEMESC-DCTESC+T+CODEM,W
STA VAR+DEMCCI+T+CODEM
< TRANSMISSION DE LA LONGUEUR DU MESSAGE,
< EN PARTICULIER UTILISE PAR LA COMMANDE
< !L "ON-LINE"...
STA VAR+MBUFGR < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
BSR ACHKIN < RENVOI : (A)=NSPIN.
STBY VAR+DEMCCI < MISE EN PLACE DE NSPIN, ON
< NE SAIT JAMAIS...
RSR < RETOUR.
PAGE
<
<
< D E B U G U T I L I S A T E U R :
<
<
< FONCTION :
< CES ROUTINES SONT APPELEES PAR
< L'INTERMEDIAIRE DE LA GRAMMAIRE
< PRIVEE DU DEBUG (!DEBUG).
<
<
< SYNTAXE :
< ? (+1 AUTOMATIQUE SUR A-ROND),
< ? (A-ROND RECOIT LA DERNIERE VALEUR DISPLAYEE,
< OU LA DERNIERE VALEUR ENTREE),
< ?'+'/'-',
< ?(T)'<'/'>'().
< AVEC ::=A,B,X,Y,C,L,W,K,P,S,@,M.
< ::=';' (SORTIE DU DEBUG),
< ::='G' (SORTIE DU DEBUG ET RETOUR D'ABORT).
<
<
< RETOUR AU PROGRAMME UTILISATEUR APRES
< UNE TRAPPE OU UN ALT-MODE :
< ON MODIFIE DANS L'ORDRE ET SANS FAIRE
< DE COMMANDES 'T', QUI FONT
< UN RETOUR AU SVC CCI :
< A<--(AT) OU AUTRE VALEUR,
< X<--(XT) OU AUTRE VALEUR,
< S<--MODE-ESCLAVE,
< K<--(KT) OU AUTRE VALEUR,
< P<--(PT) OU AUTRE VALEUR,
< ; QUI PROVOQUE LE RETOUR AU PROGRAMME INTERROMPU.
< OU PAR :
< "G" QUI EST EQUIVALENTE A CE QUI PRECEDE...
<
<
< CAS DU ALT-MODE :
< A-ROND DONNE (AVANT QU'ON NE L'AIT MODIFIE !!!)
< LE SOMMET DE LA PILE POINTEE PAR
< K AU MOMENT DU ALT-MODE ; SI
< ST=, L'ESCLAVE
< FAISAIT UN SVC, ET @ DONNE ALORS
< LE P DE RETOUR DU SVC ; POUR RELANCER
< LE PROGRAMME, ON FERA DONC :
< (K)<--(A-ROND), OU (A-ROND)-1 POUR REITERER LE 'SVC',
< X<--(XT),
< A<--(AT),
< ; QUI PROVOQUE LE RETOUR (ON NE TOUCHE
< NI A S NI A P).
<
<
PAGE
<
<
< R E T O U R S U I T E A U N E T R A P P E :
<
<
< FONCTION :
< CE MODULE APPELE EN FIN DE
< SERVICE PAR "G" SOUS 'DEBUG'
< PERMET DE RESTAURER LES CONDI-
< TIONS D'AVANT LA TRAPPE, ET DE
< RELANCER LE PROGRAMME.
< LORSQU'UNE TRAPPE APPARAIT,
< LE REGISTRE 'P' PEUT TRES BIEN
< POINTER SUR L'INSTRUCTION EN
< CAUSE, COMME SUR LA SUIVANTE;
< C'EST POURQUOI, DERRIERE "G",
< ON PEUT PRECISER UNE CONSTANTE
< DE TRANSLATION DE 'P' (EVENTUEL-
< LEMENT ABSENTE, DONC NULLE...).
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DEMSER',
< (VALESC)=CONSTANTE DE TRANSLATION DE 'RP'.
<
<
CALL #SISP CMS5 DOL1#
MOVERU: EQU $
STZ FSERV-DEMSER,W < SUPPRESSION DE LA ROUTINE DE FIN DE
< SERVICE...
PSR B,X < SAUVEGARDES ESSENTIELLES...
CALL #SISP CMS5 PSRSLO#
<
< PREPARATION DE (SLO,SLE)
< ENCADRANT L'ESPACE UTILISATEUR
< Y COMPRIS L'EN-TETE :
<
LA PSTESC-DEMSER+RSLO,W < (A)='SLO' DE L'ESCLAVE,
XWOR%1: VAL SLOESC>DADR
ADRI -XWOR%1,A < (A)=ADRESSE DE L'ESPACE UTILISATEUR,
LB PSTESC-DEMSER+RSLE,W < (B)='SLE' DE L'ESCLAVE,
WOE < ENCADREMENT DE L'ESPACE UTILISATEUR...
PSR Y
<
< TEST D'UN REDEMARRAGE SUITE
< A UN DOUBLE ALT-MODE LORS
< D'UNE ECRITURE :
<
LYI RST
LAR < (A)=REGISTRE 'ST' DE L'UTILISATEUR,
TBT BALT2 < ALORS, DOUBLE ALT-MODE LORS D'UNE ECRI-
< TURE ALPHA-NUMERIQUE OU GRAPHIQUE ???
JNC MOVER1 < NON, ON NE TOUCHE A RIEN...
SBT V < OUI, DANS CES CONDITIONS, ON ANNULE LE
< CODE D'ERREUR ('RXT'), ET LES INDICATEURS
< 'V' ET 'C' DE 'RST' QUI AVAIENT ETE
< POSITIONNES PAR UN TEST DE (RXT)...
RBT C < (V)=1 ET (C)=0 SIMULENT UN 'CPZR'
< SUR UNE VALEUR NULLE...
RBT BALT2 < ENFIN, ON ANNULE L'INDICATEUR DE DOUBLE
< ALT-MODE...
STAR < ET ON MET AINSI A JOUR 'RST'...
LYI RXT
LAR < (A)=REGISTRE 'X' SUITE AU DOUBLE ALT-
< MODE...
CPI EVALT < ON LE VALIDE, CELA NE MANGE PAS DE
< PAIN...
JE MOVER2 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LA GESTION DU BIT 'BALT2' NE
< DOIT PAS ETRE CORRECT, PEUT-ETRE
< EST-IL DE TEMPS EN TEMPS REMANENT !!!
<
MOVER2: EQU $
LAI K
STAR < ET ON CLEAR 'RXT', AFIN DE FAIRE UN
< RETOUR SANS ERREUR AU PROGRAMME...
MOVER1: EQU $
<
< REGENERATION DES PREMIERS
< MOTS DE L'ESPACE MEMOIRE DE
< L'UTILISATEUR ECRASE PAR
< 'IMEMY' :
<
LYI RMOT0
LAR
LYI SLOESC+XMOT0
STAR < RESTAURATION DU MOT0,
LYI RMOT1
LAR
LYI SLOESC+XMOT1
STAR < DU MOT1,
LYI RMOT2
LAR
LYI SLOESC+XMOT2
STAR < ET DU MOT2...
PLR Y
<
< RESTAURATION DES REGISTRES :
<
LAD PSTESC-DEMSER+RA,W
LR A,B < (B)=ADRESSE DU RECEPTEUR (ZONE DES
< REGISTRES DANS 'DCTESC'),
LAI RAT < (A)=ADRESSE DE L'EMETTEUR (ZONE DES
< REGISTRES DE TRAPPE DANS L'ESPACE
< UTILISATEUR ENTIER),
LXI RS-RA+Z < (X)=NOMBRE DE REGSITRES A RESTAURER...
MVTM < ET ON RETABLIT LES CONDITIONS D'AVANT
< L'ABORT...
<
< TRANSLATION EVENTUELLE DE 'RP' :
< (VOIR LE PROBLEME DES TRAPPES...)
<
LA PSTESC-DEMSER+RP,W
AD DCTESC+VALESC-DEMSER,W
STA PSTESC-DEMSER+RP,W
<
< ET RETOUR :
<
CALL #SISP CMS5 PLRSLO#
PLR B,X < RESTAURATIONS...
RSR
CALL #SISP CMS5 DOL2#
<
<
< D E M A N D E D E F I N D E S E R V I C E
< D E R E T O U R S U I T E A U N E T R A P P E :
<
<
< FONCTION :
< CE MODULE APPELE PAR LA GRAMMAIRE
< DU 'DEBUG' POSITIONNE UNE ROUTINE
< DE FIN DE SERVICE QUI RETABLIRA
< LES CONDITIONS D'AVANT LA TRAPPE...
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
MOVER: EQU $
LRM A
WORD MOVERU < (A)=ADRESSE DE LA ROUTINE DE FIN DE
< SERVICE EN ESPACE BAS,
BSR AFSERV < QUE L'ON MET EN ROUTINE DE FIN DE
< SERVICE POUR CET UTILISATEUR...
RSR < ET C'EST TOUT...
<
<
< O P E R A N D E D U D E B U G :
<
<
< FONCTION :
< CETTE ROUTINE RECUPERE LA PARTIE
< DE LA COMMANDE ENVOYEE
< PAR L'UTILISATEUR AU DEBUG.
<
<
< ARGUMENT :
< (B)=NUMERO DE L'OPERANDE :
< 0 : A,
< 1 : B,
< 2 : X,
< 3 : Y,
< 4 : C,
< 5 : L,
< 6 : W,
< 7 : K,
< 8 : P,
< 9 : S,
< 10 : @ (ADRESSE COURANTE),
< 11 : M (CONTENU MEMOIRE @),
< 12 : O (TRANSLATION DE '@' SOUS 'DEBUG'
< ABSOLU),
< 13 : 0 (CONTENU DU MOT0),
< 14 : 1 (CONTENU DU MOT1),
< 15 : 2 (CONTENU DU MOT2 DE L'ESPACE MEMOIRE
< UTILISATEUR AU MOMENT D'UNE TRAPPE).
<
<
< RESULTAT :
< (Y)=B.
<
<
SADBG: EQU $
LR B,Y < AIN'T IT HARD ?!?!?!?
RSR
<
<
< O P E R A N D E D E T R A P P E :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE SUITE
< A L'OPTION 'T' SUIVANT LA
< PRECISION DE ; IL EST
< AUSSI APPELE POUR "@" ET "M"...
<
<
< ARGUMENT :
< (Y)=
< (W)=ADRESSE DE 'DCTESC'.
<
<
< RESULTAT :
< (Y)=(Y)-SLOESC.
<
<
SADTBG: EQU $
<
< MEMORISATION DU TYPE DE :
<
ADRI -SLOESC,Y
<
<
< M O D E M A I T R E P O U R U N
< U T I L I S A T E U R S O U S ' S V C ' :
<
<
< FONCTION :
< LORSQUE LE 'CCI' VA ETRE
< SUSPENDU, IL EST NECESSAIRE
< DE FORCER LE MODE MAITRE POUR
< UN UTILISATEUR SOUS 'SVC', ET EN
< RESTAURANT 'P' SUR 'RETSVC' ; DE
< PLUS, CELA PROVOQUE ALORS UN RETOUR
< EN ERREUR AU 'CCI', AFIN DE POUVOIR
< EDITER UN MESSAGE...
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
MASTER: EQU $
<
< FAISONS EN SORTE QUE L'ESCLAVE
< PUISSE FAIRE CE QU'IL A DEMANDE :
<
LA PSTESC-DCTESC+RS,W
TBT SVCS < L'UTILISATEUR EST-IL ARRIVE ICI PAR
< UN 'SVC' ???
JNC SADTB1 < NON, OK...
TBT MS < OUI, ALORS EST-ON BIEN EN MODE MAITRE ???
JC SADTB1 < OUI, OK...
SBT MS < NON, ALORS ON LE REMET A PRIORI EN MODE
< MAITRE AFIN D'ASSURER CORRECTEMENT LA
< SUSPENSION DU 'CCI' INHERENTE AUX COM-
< MANDES "@", "M" ET DE TYPE "T"...
STA PSTESC-DCTESC+RS,W
LRM A
WORD RETSVC
STA PSTESC-DCTESC+RP,W
< ON REFAIT POINTER LE P(ESCLAVE) SUR LE
< RETOUR DES INSTRUCTIONS 'SVC'...
ADRI XCCIER,X < ET ENFIN, ON PROVOQUE UN RETOUR EN ERREUR
< AU 'CCI', AFIN D'EDITER UN MESSAGE...
SADTB1: EQU $
<
< SORTIE (COMMUNE A 'MASTER' ET 'SADTBG') :
<
RSR
<
<
< R E C U P E R A T I O N D ' U N E V A L E U R :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE LORS
< DES DEMANDES DE ('<'). ELLE
< RECUPERE LA SUIVANT '<'.
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< RESULTAT :
< VALESC(DCTESC)=.
<
<
SVDBG: EQU $
PSR X < SAVE INDEX DE LA GRAMMAIRE DU
< CCI (GRAMMAIRE DU DEBUG).
LX VAR+XBUFGR < (X)=INDEX 1ER CARACTERE PRESUME
< DE .
LAD VAR+ABUFGR < (A)=@RELAI VERS LE BUFFER.
BSR AHEXIN < CONVERSION DE LA CHAINE
< HEXADECIMALE EN
< BIANIRE.
STX VAR+XBUFGR < MAJ DE L'INDEX DE BUFGR.
STA VALESC-DCTESK,W < SAVE LA (A) DANS
< LE DEMESC DE DCTESC.
PLR X < RESTAURE L'INDEX DE LA
< GRAMMAIRE DU CCI.
RSR
<
<
< T E S T D E R E S I D E N C E
< D E < O P E R A N D E > :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE POUR
< SAVOIR SI L' EST RESIDENTE (CAS
< DES REGISTRES DU CONTEXTE DANS DCTESC),
< NON RESIDENT (CAS DES REGISTRES DE
< TRAPPE, OU DU CONTENU DE L'ESPACE
< MEMOIRE DE L'UTILISATEUR).
<
<
< ARGUMENT :
< (Y)=.
<
<
< RESULTAT :
< INDEX DE LA GRAMMAIRE DU CCI :
< X : INCHANGE SI RESIDENT,
< X::=(X)+1 SI NON RESIDENT.
<
<
TRDBG: EQU $
CPZR Y
IF XCCINX-BIT,,XEIF%,
IF ATTENTION : LE 'ADCR' SUIVANT VA MERDER !!!
XEIF%: VAL ENDIF
ADCR X < ON AJOUTE LE CARY A X, SOIT
< 1 SI (Y)<0, ET 0 SI (Y)>=K.
RSR
PAGE
<
<
< M O D I F Y < O P E R A N D E > :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE LORS
< QU'ON EST SUR DE LA RESIDENCE
< DE . ELLE RECUPERE LA VALEUR, ET
< APRES DIVERSES VERIFICATIONS (LIMITATION
< SUR LES MODIFICATIONS DU REGISTRE S,
< IMPOSSIBILITE DE TOUCHER A P EN MODE
< MAITRE),
< DONNE CETTE A .
<
<
< A T T E N T I O N :
< LORSQUE CELA EST NECESSAIRE (Y<0),
< L'ESPACE MEMOIRE DE L'UTILISATEUR
< EST RESIDENT.
<
<
< ARGUMENT :
< VALESC(DCTESC)=,
< (W)=ADRESSE DCT(ESCLAVE),
< (L)=ADRESSE DCT(SERVICE).
< (Y)=.
<
<
MODBG: EQU $
PSR L < SAVE @DCT-SERVICE.
LB VALESC-DCTESK,W < (B)=.
<
< CALCUL DE L'ADRESSE ABSOLUE DE :
<
CPZR Y
JL Z350 < N'ETAIT PAS RESIDENTE.
<
< CAS RESIDENTE :
<
LR W,L < (L)=@DCT-ESCLAVE.
<
< VALIDATION DU :
<
LR Y,A < (A)=.
CPI RK < EST-CE K ?????
JE Z351 < OUI, ALLONS TESTER S(DCTESC).
CPI RP < EST-CE P ????
JNE Z326 < NON, NI P(DCTESC), NI K(DCTESC)
<
< DEMANDE SUR P(DCTESC) OU K(DCTESC) :
<
Z351: EQU $
CPZ PSTESC-DCTESC+RS,W < TEST DU REGISTRE S(DCTESC).
IF MS-BITSIG,,XEIF%,
IF ATTENTION : LE TEST EST IDIOT !!!
XEIF%: VAL ENDIF
JGE Z327 < OK, L'UTILISATEUR EST EN
< MODE ESCLAVE, IL PEUT MODIFIER
< SON REGISTRE P(DCTESC) COURANT.
<
< RETOUR EN ERREUR DE MODBG ET DE DISDBG :
<
Z328: EQU $
ADRI XCCIER,X < RETOUR EN ERREUR AU CCI.
<
< SORTIE DE MODBG ET DE DISDBG :
<
Z329: EQU $
PLR L < RESTAURE (L)=@DCT-SERVICE.
Z340: EQU $
RSR
Z326: EQU $
CPI RS < EST-CE UN DE S ?????
JNE Z327 < NON, C'EST BON ON PEUT MODIFIER.
<
< REGISTRE S(DCTESC) :
<
LR B,A < (A)=.
RBT V < RAZ INDICATEUR V.
RBT C < RAZ INDICATEUR C.
JANE Z328 < DANS LE CAS OU CE QUI RESTE DE S
< EST DIFFERENT DE 0, LA
< DEMANDE DE EST REFUSEE.
LA PSTESC-DCTESC+RS,W < (A)=REGISTRE 'S' AVANT :
TBT SVCS < L'UTILISATEUR EST-IL ARRIVE ICI PAR
< UN 'SVC' ???
JNC Z327X1 < NON, OK...
SBT NBITMO+SVCS < OUI, ON MEMORISE CE FAIT ; LE BIT 'SVCS'
< SERA RAZE PAR LE 'SCHEDULER' A PRIORI
< S'IL TROUVE LE BIT 'MS' A 0 (MODE
< ESCLAVE)...
Z327X1: EQU $
<
< CAS DES ACCEPTES :
<
Z327: EQU $
< ON A ICI :
< (L)=BASE VERS LA ZONE CONTENANT .
< (Y)=,
< (B)=.
ADR Y,L < (L)=@.
STB O,L < DE
< AVEC .
<
< EST-CE EN FAIT UN
< DE L'ESPACE MEMOIRE UTILISATEUR :
<
LR Y,A < (A)=.
CPI -SLOESC+RM < EST-CE 'M' ????
JNE Z329 < NON, C'EST TOUT.
<
< DE L'ESPACE MEMOIRE
< UTILISATEUR : VALIDATION DE A-ROND :
<
LA IDDESC-DCTESC,W
TBT IDESC1 < TEST DU BIT IDESC1,
< POUR SAVOIR SI LE DEBUG EST
< EN MODE TRANSLATABLE (K) OU
< EN MODE ABSOLU (1).
LA RAD-RM,L < (A)=@ RELATIVE A (SLO).
JNC Z381X4 < CAS DU 'DEBUG' TRANSLATABLE...
IF O>DADR-K,,XEIF%,
IF ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ RSLOT-RM,L < CAS DU 'DEBUG' ABSOLU : UNE DADR-TRANS-
< LATION DE '@' EST-ELLE DEMANDEE ???
JE Z381 < NON (DU MOINS, ELLE EST NULLE...), DONC
< ON FAIT QUELQUES VALIDATIONS...
<
< CAS DU 'DEBUG' ABSOLU AVEC
< DADR-TRANSLATION DE '@' :
<
PSR A,B,X,Y < SAUVEGARDES...
LR B,X < (X)=VALEUR A DONNER AU MOT MEMOIRE QUE
< L'ON MODIFIE,
LR A,Y < (Y)=ADRESSE DE CE MOT MEMOIRE RELATIVE-
< MENT A LA DADR-TRANSLATION 'RSLOT'.
CALL #SISP CMS5 PSRSLO#
LR Y,A < ON VA ECLATER L'ADRESSE DU MOT MEMOIRE,
< EN UNE DADR-ADRESSE (A), ET UN RESIDU (B)
LBI K < CLEAR...
SCRS -DADR
SCLD -DADR < (B)=RESIDU (DE O A 'FADR'-D),
SLRS -DADR < (A)=DADR-ADRESSE DU MOT,
LR B,Y < (Y)=ADRESSE DU MOT MEMOIRE A MODIFIER
< RELATIVE A UNE DADR-ADRESSE (A),
AD RSLOT-RM,L < (A)='SLO' D'ACCES AU MOT,
LR A,B < (B)='SLOE' D'ENCADREMENT,
WOE < ET POSITIONNEMENT DE (SLO,SLE)...
LR X,A < (A)=VALEUR A DONNER AU MOT D'ADRESSE
< RELATIVE :
< (Y)=ADRESSE RELATIVE,
STAR < ET ON MODIFIE LE MOT...
CALL #SISP CMS5 PLRSLO#
PLR A,B,X,Y < RESTAURATIONS...
JMP Z329 < VERS LA SORTIE...
AZ340: JMP Z340 < RELAI...
<
< CAS DU DEBUG TRANSLATABLE :
< (ET EN 'Z381' DU DEBUG
< ABSOLU AVEC (RSLOT)=0...)
<
Z381X4: EQU $
PSR B
LA PSTESC-DCTESC+RSLO,W < (A)=(SLO).
BSR APDADR < (A)=SLO*16(EN MOTS)
LR A,B
AD RAD-RM,L < (A)=ADR "ABSOLUTISEE"
CPR B,A
PLR B
JL Z328 < ERREUR : @<(SLO).
PSR B
LR A,B
LA PSTESC-DCTESC+RSLE,W < (A)=SLE
BSR APDADR < (A)=SLE*16(EN MOTS)
ADRI FADR-Z,A < (A)=FIN DE LA ZONE UTILISATEUR.
XR A,B < (A)=ADR "ABSOLUTISEE"
CPR B,A
PLR B
JG Z328 < ERREUR : @>(SLE).
Z381: EQU $
LR A,L < (L)=@ ABSOLUE.
IF MS-BITSIG,,XEIF%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
PSR X,Y
PSR B,L
LB PSTESC-DCTESC+RSLO,W
SLLD -DADR < (B)=(SLO) EN ADRESSE DE MOTS.
< (ON NE VALIDE PAR 'APDADR' CAR CELA
< A DEJA ETE FAIT CI-DESSUS)
LA PSTESC-DCTESC+RS,W
TBT SVCS < QUEL EST LE MODE D'APPEL ???
JC Z381X1 < PAR 'SVC'...
LA PSTESC-DCTESC+RP,W
< ESCLAVE ('QUIT') : ALORS :
< (A)=ADRESSE RELATIVE DU 'QUIT'...
JMP Z381X2
Z381X1: EQU $
LA PSTESC-DCTESC+RK,W
ADR B,A < ABSOLUTISATION DU REGISTRE 'K',
LR A,L < QUE L'ON MET DANS 'L',
LR A,X < (X)=SAUVEGARDE DE L'ADRESSE ABSOLUE DU
< MOT POINTE PAR 'K',
LY PSTESC-DCTESC+RA,W
ADR B,Y < (Y)=SAUVEGARDE DE L'ADRESSE ABSOLUE DU
< MOT POINTE PAR 'A'.
LA O,L < (A)=ADRESSE RELATIVE DU 'SVC'...
Z381X2: EQU $
ADR B,A < (A)=ADRESSE ABSOLUE DU 'QUIT'/'SVC'...
PLR B,L
CPR A,L < L'ADRESSE QUE L'ON VEUT MODIFIER ('L')
< NE SERAIT-ELLE PAS L'ADRESSE DU 'QUIT'/
< 'SVC' D'APPEL DU 'CCI' ???
JE Z328X1 < OUI, LE 'MODIFY' EST REFUSE !!!
< EN EFFET, SINON, A CAUSE DES FONCTIONS
< DE SUSPENSION DU 'CCI' CONTENUES DANS
< LE 'DEBUG', LA RE-RENTREE DANS LE 'CCI'
< SE FERAIT MAL !!!
LA PSTESC-DCTESC+RS,W
TBT SVCS < QUEL EST LE MODE D'APPEL ???
JNC Z381X3 < CAS DES 'QUIT'...
CPR X,L < CAS DES 'SVC', NE MODIFIE-T'ON PAS LE
< MOT POINTE PAR 'K' ???
JE Z328X1 < OUI, QUELLE HONTE...
CPR Y,L < NE MODIFIE-T'ON PAS LE MOT POINTE PAR
< LE REGISTRE 'A' ???
JE Z328X1 < OUI, QUELLE TRAITRISE...
Z381X3: EQU $
PLR X,Y
STB O,L < DE L'ESPACE MEMOIRE
< DE L'UTILISATEUR.
JMP Z329 < RETOUR.
Z328X1: EQU $
PLR X,Y < ON RETABLIT LA PILE,
AZ328: JMP Z328 < ET ON SORT EN ERREUR !!!
< (ET RELAI...)
<
< CAS D'UN SUR DE L'INFORMATION
< QUI N'ETAIT PAS RESIDENTE :
<
Z350: EQU $
LA PSTESC-DCTESC+RSLO,W
BSR APDADR
LR A,L < (L)=SLO*16 (EN MOTS)
JMP Z327 < VERS LE .
PAGE
<
<
< < D I S P L A Y > D E L A
< V A L E U R D E < O P E R A N D E > :
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE LORSQUE
< EST RESIDENTE. ELLE FAIT
< UN DE LA VALEUR EN
< HEXADECIMAL.
<
<
< A T T E N T I O N :
< LOSQUE CELA EST NECESSAIRE (Y<0),
< L'ESPACE MEMOIRE DE L'UTILISATEUR
< EST RESIDENT.
<
<
< ARGUMENT :
< (Y)=.
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< RESULTAT :
< VALESC=, EN VUE D'UNE COMMANDE
< D'ADRESSAGE INDIRECT (),
< QUI SUIVRAIT EVENTUELLEMENT.
<
<
DISDBG: EQU $
PSR L < SAVE @DCT-SERVICE.
LR W,L < (L)=@DCT-ESCLAVE A PRIORI.
<
< TEST DE RESIDENCE :
<
CPZR Y
JGE Z330 < ETAIT RESIDENTE.
<
< CAS DU DE NON RESIDENTE :
<
LA PSTESC-DCTESC+RSLO,W
BSR APDADR
LR A,L < (L)=SLO*16 (EN MOTS)
Z330: EQU $
ADR Y,L < (L)=@.
<
< EST-CE EN FAIT UN DE L'ESPACE
< MEMOIRE DE L'UTILISATEUR ????
<
LR Y,A
CPI -SLOESC+RST < EST-CE LE REGISTRE 'ST' ???
JE Z331X1 < OUI, ON LE TRAITE A PART A CAUSE DU
< BIT 'BALT2' DESTINE A "G" SOUS 'DEBUG'...
CPI -SLOESC+RM < EST-CE 'M' ???
JNE Z331 < NON, B EST CORRECT.
<
< CAS D'UN MEMOIRE :
<
LA IDDESC-DCTESC,W
TBT IDESC1 < TEST DU MODE DU DEBUG :
< ABSOLU (1) OU TRANSLATABLE (K).
LA RAD-RM,L < (A)=@ RELATIVE A (SLO).
JC Z380X1 < LE DEBUG EST EN MODE ABSOLU,
< DONC PAS DE TRANSLATION DE @.
PSR B
LA PSTESC-DCTESC+RSLO,W < (A)=(SLO).
BSR APDADR < (A)=SLO*16 (EN MOTS)
LR A,B
AD RAD-RM,L < (A)=ADR "ABSOLUTISEE"
CPR B,A
PLR B
JL AZ328 < ERREUR : @<(SLO).
PSR B
LR A,B
LA PSTESC-DCTESC+RSLE,W < (A)=(SLE).
BSR APDADR < (A)=SLE*16 (EN MOTS)
ADRI FADR-Z,A < (A)=FIN DE LA ZONE UTILISATEUR.
XR A,B
CPR B,A
PLR B
JG AZ328 < ERREUR : @>(SLE).
Z380: EQU $
LR A,L < (L)=@ ABSOLUE DE .
<
< DE :
<
Z331: EQU $
LB O,L < (B)= A DISPLAYER.
<
< ON A ICI :
< (A)= SI #M,
< =ADRESSE ABSOLUE DE , SOIT A>>RK...
< SI =M.
<
Z352: EQU $
STB VALESC-DCTESK,W < SAVE DANS DEMESC,
< EN VUE D'1NE EVENTUELLE
< COMMANDE .
PLR L < RESTAURE (L)=@DCT-SERVICE.
<
< ENTRY DE 'DISPLA' :
<
DISPL1: EQU $
PSR X < SAVE INDEX COURANT DE LA GRAMMAIRE
< DU CCI (DEBUG).
LXI K < INDEX INITIAL DE LA
< CONVERTRIE EN ASCI.
LAD VAR+ABUFGR < (A)=@RELAI VERS LE BUFFER DE SORTIE.
BSR AHEXEX < CONVERSION BINAIRE-->ASCI.
PLR X < RESTAURE (X)=INDEX GRAMMAIRE CCI.
LBI NBITMO/NBITCX < LONGUEUR DU MESSAGE A EMETTRE
< VERS PHOUT.
LR W,A < (A)=@DCT-ESCLAVE.
ADRI BUFESC-DCTESC,A < (A)=@MOT DE BUFESC.
PSR Y < SAVE .
BSR AMESSO < DE .
PLR Y < RESTAURE .
JMP AZ340 < RETOUR, C'EST FINI...
<
< CAS PARTICULIER DE 'ST' :
<
Z331X1: EQU $
LB O,L < RECUPERATION DE 'ST',
RBT NBITMO+BALT2 < ET EFFACEMENT A PRIORI DE 'BALT2'
< QUI NE DOIT PAS APPARAITRE AUX
< YEUX DE L'UTILISATEUR...
JMP Z352 < VERS LA VISUALISATION...
<
< CAS DU 'DEBUG' ABSOLU
< AVEC UNE TRANSLATION 'RSLOT' :
<
Z380X1: EQU $
PSR A,Y < SAUVEGARDES...
LR A,Y < (Y)=ADRESSE RELATIVE A 'RSLOT' DU MOT
< A EDITER...
CALL #SISP CMS5 PSRSLO#
LR Y,A < ON VA ECLATER L'ADRESSE DU MOT A EDITER
< EN UNE DADR-ADRESSE (A), ET UN RESIDU (B)
LBI K < CLEAR...
SCRS -DADR
SCLD -DADR < (B)=RESIDU (ENTRE O ET 'FADR'-D),
SLRS -DADR < (A)=DADR-ADRESSE DU MOT,
LR B,Y < (Y)=ADRESSE DU MOT A EDITER RELATIVE-
< MENT AU FUTUR (SLO,SLE),
AD RSLOT-RM,L < (A)='SLO' D'ACCES AU MOT,
LR A,B < (B)='SLE' D'ENCADREMENT,
WOE < AFIN D'ENCADRER LE MOT A EDITER,
LAR < (A)=CONTENU DU MOT D'ADRESSE RELATIVE (Y)
LR A,Y < QUE L'ON SAUVEGARDE DANS 'Y'...
CALL #SISP CMS5 PLRSLO#
LR Y,B < (B)=VALEUR CHERCHEE...
PLR A,Y < RESTAURATIONS,
JMP Z352 < ET VERS LA VISUALISATION...
PAGE
<
<
< E D I T I O N D ' U N C O D E D ' E R R E U R
< C O N T E N U D A N S ' B O X ' :
<
<
< FONCTION :
< CE MODULE A POUR ROLE D'EDITER
< LA 'BOX' UTILISATEUR, SUPPOSEE
< CONTENIR UN CODE D'ERREUR SUITE
< A UN BRANCHEMENT IMPLICITE A 'N10'.
< LE CODE D'ERREUR EST VALIDE
< SEULEMENT ICI, POUR EVITER DES
< SAUTS SUPERIEURS A 128 MOTS AU
< NIVEAU DE L'INTERPRETEUR DU 'CCI'
< EN 'CCIJMP'...
<
<
< ARGUMENTS :
< (W)=ADRESSE DE 'DCTESC',
< (L)=ADRESSE DE 'DCTSER',
< (BOX)=VALEUR A EDITER.
<
<
DISPER: EQU $
<
< VALIDATION (TARDIVE) DU CODE D'ERREUR :
<
LRM A
WORD MCCIER)MMOT < (A)=MASQUE D'EXTRACTION DU CODE-ERREUR,
AND BOXESC-DCTESC,W < (A)=CODE D'ERREUR,
WORD CPIMIN < VALIDATION INFERIEURE ???
JLE DISPL2 < QUELLE HORREUR...
WORD CPIMAX < VALIDATION SUPERIEURE ???
JL DISPL3 < OK, LA 'BOX' EST VALIDE POUR UN CODE
< D'ERREUR TYPE 'N10'...
DISPL2: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< RECHERCHER DANS LA GRAMMAIRE DU
< 'CCI', IL Y A SUREMENT UN NOEUD
< COMMENCANT PAR 'MCCIER' MAIS
< QUI N'EST PAS UN CODE D'ERREUR !!!
< SI TEL EST LE CAS, IL FAUT TROUVER
< UNE VALEUR DE 'MCCIER' NON AMBIGUE...
<
DISPL3: EQU $
<
< EDITION DU CODE D'ERREUR :
<
LB BOXESC-DCTESC,W < (B)=VALEUR A EDITER...
JMP DISPL1 < VERS L'EDITION...
PAGE
<
<
< D I S P L A Y P A R T I E L D ' U N E C A R T E :
<
<
< FONCTION :
< CE MODULE DISPLAY PARTIELLEMENT
< UNE CARTE ; IL EST APPELE DANS 2
< CAS DIFFERENTS :
<
< 1 - LORS D'UNE ERREUR DE SYNTAXE :
< LE DERNIER CARACTERE EDITE EST ALORS
< LE CARACTERE NON RECONNU (SAUF CAS
< PARTICULIERS OU EN BOUT DE CARTE
< ON TROUVE UN NOM 'SGN' : LOGIN, OU
< ASSIGNATION FICHIER...) ;
<
< 2 - LORS DE LA "TRONCATION" D'UNE
< CARTE : LA PARTIE EDITEE EST LA PARTIE
< QUI A ETE PRISE EN COMPTE ET EXPLOITEE.
<
<
< ARGUMENTS :
< (B)=DECREMENT A APPORTER A LA LONGUEUR CALCULEE
< DE LA CARTE A DISPLAYEE PARTIELLEMENT.
< (L)=ADRESSE DE 'DCTSER',
< (W)=ADRESSE DE 'DCTESC'.
<
<
DISPCA: EQU $
<
< ENVOI DU MESSAGE DE BASE
< DU 'CCI' POUR UN CADRAGE
< CORRECT DE LA CARTE PARTIELLE :
<
PSR B < ET SAUVEGARDE DU DECREMENT DE LONGUEUR...
LBI LMES1 < (B)=LONGUEUR A PRIORI DU MESSAGE,
BSR ACHKIN < MAIS EST-ON INTERACTIF ???
< RENVOIE :
< (A)='NSPIN' DE L'UTILISATEUR...
JNE DISPC3 < NON, DONC (B) EST BON...
PSR X,L < OUI, IL S'AGIT D'UN UTILISATEUR INTER-
< ACTIF, LE NOMBRE DE "?" QUE L'ON VA
< EDITER EST FONCTION DU NIVEAU D'EMPILE-
< MENT DE CET 'IDESC'...
LR A,X < (X)='NPSIN' DE L'UTILISATEUR,
BSR ACADCT < (L)=ADRESSE DE LA 'DCT' DE LA VISU...
LA VAR+APILID
LR A,L < (L)=ADRESSE DE LA PILE D'EMPILEMENT DES
< UTILISATEURS PAR "!U" SUR CETTE VISU,
LA O,L < (A)=POINTEUR DE LA PILE :
ANDI XLCPIL < (A)=LONGUEUR COURANTE,
XWOR%1: VAL XLCPIL=K
IF XWOR%1-K,,XEIF%,
SLRS XWOR%1
XEIF%: VAL ENDIF
ADR A,B < ON AJOUTE AU MESSAGE DE BASE 'MESCCI'
< UN NOMBRE DE "?" EGAL AU NIVEAU D'IMBRI-
< CATION DES UTILISATEURS PAR "!U" SUR
< CETTE VISU...
PLR X,L
DISPC3: EQU $
LRM A
WORD MESCCJ < (A)=ADRESSE DU MESSAGE ">".
BSR AMESSO < EMISSION DU MESSAGE VERS L'ESCLAVE POUR
< UN CADRAGE CORRECT DE LA CARTE PARTIELLE.
PLR B < RESTAURE :
< (B)=DECREMENT DE LA LONGUEUR DE LA
< CARTE PARTIELLE.
<
< EDITION DE LA CARTE PARTIELLE :
<
LA VAR+XBUFGR < (A)=INDEX COURANT DE LA CARTE ANALYSEE ;
< IL POINTE TOUJOURS SUR LE PROCHAIN
< CARACTERE A ANALYSER...
IF Z-I,,XEIF%,
IF ATTENTION : IL Y A INCOHERENCE ENTRE LE 'IC'
IF SUR 'XBUFGR' ET LE FAIT QUE LES INDEXES
IF COMMENCENT A 0 !!!
XEIF%: VAL ENDIF
ADRI Z-I+I,A < POUR COMPENSER LE 'DC' SUR 'XBUFGR' QUI
< EST FAIT LORS DES CARACTERES NON RECON-
< NUS ; A NOTER QUE DANS LES AUTRES CAS
< D'ERREUR, CELA MERDERA PEUT-ETRE...
SBR B,A < CALCUL DE LA LONGUEUR REELLE DE LA
< CARTE PARTIELLE ; CECI EST LIE EN FAIT
< A LA "TRONCATION", OU L'ON IDENTIFIE UN
< CARACTERE ININTERESSANT, 'XBUFGR' POIN-
< TANT DERRIERE...
JAG DISPC1 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT LA LONGUEUR
< CALCULEE PEUT ETRE NEGATIVE OU
< NULLE !!!
<
JMP DISPC2 < ET ON SORT...
DISPC1: EQU $
LR A,B < (B)=LONGUEUR DU MESSAGE A EDITER,
CPZ VAR+XBUFGR < ETAIT-ON EN DEBUT DE BUFFER ???
JE DISPC4 < OUI, RIEN A FAIRE...
DC VAR+XBUFGR < NON, REVENONS D'UN CRAN EN ARRIERE,
BSR ACARAC < ET TESTONS LE CARACTERE PRECEDENT ; A
< NOTER QUE 'CARAC' REFAIT UN 'IC' SUR
< 'XBUFGR'...
JNE DISPC4 < ET BIEN LE CARACTERE PRECEDENT N'EST
< PAS UN LIMITEUR, ALLONS EDITER LA CARTE
< SUR UNE LONGUEUR (B)...
ADRI -I,B < ET OUI, LE CARACTERE PRECEDENT EST UN
< LIMITEUR : CELA PEUT SE PRODUIRE ALORS
< QUE LA CARTE ETAIT BONNE SYNTAXIQUEMENT,
< MAIS MAUVAISE SEMANTIQUEMENT (PAR
< EXEMPLE UN "!QFFFF", ALORS QU'AU MOINS
< UN GROUPE DE CYLINDRES EST DEJA ATTRI-
< BUE A QUELQU'UN D'AUTRE...) ; DONC IL
< FAUT ANNULER LE 'ADRI''Z-I+I,A', LUI-
< MEME DESTINE A COMPENSER UN 'DC' SUR
< 'XBUFGR' QUI DANS CE CAS PRECIS N'A PAS
< EU LIEU (OUF...).
DISPC4: EQU $
LAD BUFESC-DCTESC,W < (A)=ADRESSE-MOT DU MESSAGE A EDITER,
BSR AMESSO < EDITION PARTIELLE DE LA CARTE ERRONNEE
< OU TRONQUEE...
<
< SORTIE DU MODULE :
<
DISPC2: EQU $
RSR < ET C'EST TOUT...
PAGE
<
<
< A D R E S S A G E I N D I R E C T E T
< I N C R E M E N T A T I O N / D E C R E M E N T A T I O N
< D E L ' A D R E S S E C O U R A N T E @ :
<
<
< FONCTION :
< CETTE ROUTINE GERE LES INCREMENTATIONS
< DECREMENTATIONS DE L'ADRESSE COURANTE @.
< CES 2 OPERATIONS SONT FAITES SANS
< VERIFICATION DE VALIDITE DE @ APRES
< CALCUL.
< DE PLUS, ELLE PERMET SI ON LE
< DESIRE, DE METTRE DANS @, LA DERNIERE
< VALEUR DISPLAYEE, OU ENTREE (DEMESC).
<
<
< ARGUMENT :
< VALESC(DCTESC)= D'INCREMENTATION/DECRE-
< -MENTATION/MODIFICATION,
< (W)=ADRESSE DCT(ESCLAVE).
< (Y)=K SI +,
< =1 SI -,
< =-1 SI ADRESSAGE INDIRECT SUR @,
<
<
<*******************************************************************************
YCCIAI:: VAL K-I < CODE DE L'ADRESSAGE INDIRECT,
YCCIP:: VAL '0@@@@+I < CODE DU "+",
YCCIM:: VAL '0@@@@+I < CODE DU "-".
XCCIP1:: VAL I < POUR INCREMENTER DE 1...
<*******************************************************************************
PMDBG: EQU $
PSR L < SAVE @DCT-SERVICE.
LA RSLO+XXPSTD,W < (A)=(SLO).
BSR APDADR < (A)=SLO*16 (EN MOTS)
LR A,L < (L)=(SLO).
LA VALESC-DCTESK,W < (A)=.
CPZR Y < DISCRIMINATION +/-.
JL Z1220 < CAS D'1NE DEMANDE D'ADRESSAGE
< INDIRECT ; A CONTIENT LA
< VALEUR A DONNER A @...
JE Z341 < OK, C'EST UNE INCREMENTATION.
NGR A,A < CAS D'UNE DECREMENTATION :
< =-.
Z341: EQU $
<
< A T T E N T I O N :
< L'ESPACE MEMOIRE ESCLAVE EST
< RESIDENT LORSQU'ON EST ICI.
<
AD -SLOESC+RAD,L < ON AJOUTE @ A LA NOUVELLE
< .
Z1220: EQU $ < ENTRY 'ADRESSAGE INDIRECT'.
STA -SLOESC+RAD,L < MAJ DE @ DANS L'ESPACE MEMOIRE.
PLR L < RESTAURE (L)=@DCT-SERVICE.
RSR
<
<
< + 1 A U T O M A T I Q U E S U R @ :
<
<
< FONCTION :
< CETTE ROUTINE EST CHARGEE DE PREPARER
< L'INCREMENTATION AUTOMATIQUE (+1) DE @ ;
< ELLE EST APPELEE LORS DES LIGNES VIDES
< ENVOYEES AU DEBUG.
<
<
< ARGUMENTS :
< (B)=1,
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< RESULTATS :
< (Y)=K ('+'),
< VALESC(DCTESC)=1.
<
<
PLUS1: EQU $
LYI YCCIP < POUR DEMANDER '+'.
STB VALESC-DCTESK,W < MISE DE +1 DANS DEMESC.
RSR
<
<
< A D R E S S A G E I N D I R E C T S U R @ :
<
<
< FONCTION :
< CETTE ROUTINE PERMET DE PREPARER
< LES OPERATIONS D'ADRESSAGE INDIRECT
< SUR A-ROND.
<
<
< RESULTAT :
< (Y)=-1.
<
<
AINDIR: EQU $
LYI YCCIAI < Y<0.
RSR < AIN'T IT HARD ???
PAGE
<
<
< D E B U G A B S O L U / T R A N S L A T A B L E :
<
<
< FONCTION :
< NORMALEMENT, LE DEBUG EST UN DEBUG UTILISATEUR
< C'EST-A-DIRE QUE LES ADRESSES SONT TRANSLATABLES
< ET RELATIVES A SLO ; SOUS :SYS, ON PEUT
< DEMANDER A TRAVAILLER EN ABSOLU, DE FACON A
< POUVOIR PATCHER LE SYSTEME ON-LINE (!?!!!?!!?).
<
<
< M O D E D E B U G A B S O L U :
<
<
< NOTA :
< LE BIT 'MEMXXX' DE 'MEMV' LORSQU'IL
< EST A '0 INTERDIT, MEME DONC A ":SYS"
< L'ACCES AU 'DEBUG ABSOLU' !!!
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< RESULTAT :
< BIT1(S(PSTESC))=1.
<
<
ABSAD: EQU $
LA MEMV
TBT MEMXXX < LES CHOSES DANGEREUSES SONT-ELLES
< AUTORISEES A ":SYS" ???
JC Z382X < ET OUI...
ADRI XCCIER,X < ET NON, DONC UNE ERREUR 'CCI'...
JMP Z382Y < ET C'EST TOUT...
Z382X: EQU $
LA IDDESC-DCTESC,W
SBT IDESC1 < MISE DU DEBUG EN MODE ABSOLU.
Z382: EQU $
STA IDDESC-DCTESC,W
Z382Y: EQU $
RSR
<
<
< M O D E D E B U G T R A N S L A T A B L E :
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
< RESULTAT :
< BIT1(S(PSTESC))=K.
<
<
TRAD: EQU $
LA IDDESC-DCTESC,W
RBT IDESC1 < MISE DU DEBUG EN MODE TRANSLATABLE.
< TRANSALTABLE.
JMP Z382 < VERS LA MAJ DE S(PSTESC).
<
<
< T E S T D U M O D E D U ' D E B U G ' :
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
< RESULTAT :
< RETOUR OK SI 'DEBUG' TRANSLATABLE,
< RETOUR EN ERREUR SI 'DEBUG' ABSOLU.
<
<
TDEBAB: EQU $
LA IDDESC-DCTESC,W
TBT IDESC1 < TEST DU MODE DU DEBUG : TRANSLATABLE (0),
< OU ABSOLU (1) :
ADCR X < ET L'INDEX DE LA GRAMMAIRE EST CALCULE
< EN FONCTION DU MODE, D'OU UN RETOUR :
< OK, SI TRANSLATABLE (0), ET
< EN ERREUR, SI ABSOLU (1)...
RSR < VERS LA GRAMMAIRE DU 'CCI'...
Copyright (c) Jean-François Colonna, 2011-2013.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2013.