NMPROC:  VAL         "KA"            < NOM DU PROCESSEUR.
         IDP         "KA - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        CARTE           < ADRESSE DE DEPART DU PROCESSEUR.
         WORD        0               < POUR FAIRE $=$+1.
PCARTE:  EQU         $               < P DE LANCEMENT DE 'CARTE A ITEM'
                                     < LORS D'UN APPEL PAR !GE.
                                     < (A NOTER : P='12).
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         PAGE
         EOT         #SIP DEFINITION ITEM#
LNOM:    VAL         '26             < NBRE MAX DE CARACTERES D'UN
                                     < NOM D'ITEM.
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL       LOCCA
LOC:     EQU         $
<
<        B U F F E R S  :
<
BUFFER:  WORD        0               < BUFFER D'ENTREE COMMANDES.
BCARTE:  DZS         40              < BUFFER DE LECTURE DES CARTES.
MRET:    BYTE        1;'6D
M2:      BYTE        2;'6D
         ASCI        "> "
MNOM:    BYTE        5;'6D
         ASCI        "NOM>"
M1:      BYTE        9;'6D
         ASCI        "ERR-ITEM"
M3:      BYTE        1;"?"
M4:      BYTE        9;'6D
         ASCI        "ERR-ASGN"
M7:      BYTE        0;'0D           < A T T E N T I O N  : FAIT
                                     < PARTIE DU MESSAGE M5.
M5:      BYTE        '40;'0D;'0A;0   < POUR FAIRE UN SAUT DE PAGE.
M6:      BYTE        " ";'0D         < POUR LIBERATION DU DERNIER LF.
<
<        C O N S T A N T E S  :
<
RI:      WORD        0               < RI=0 : COMMANDE 'R' ,
                                     < RI=-1 : COMMANDE 'I'.
NCP:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES MAX
                                     < DANS L'ITEM.
FINP:    ASCI        "*/"            < INDICATEUR DE FIN D'ITEM.
IPLUS:   ASCI        "*+"            < POUR TESTER LES DEMANDES DE
                                     < CREATION D'ITEM (VIA 'GI').
NOM:     EQU         $               < ZONE DESTINEE A RECEVOIR LE
                                     < NOM D'UN ITEM LORS DE 'S'.
         DO          NBCAR-2/2
         ASCI        "  "
ILOAD:   ASCI        "IL"            < POUR GENERER UN 'IL' AUTOMATIQUE
                                     < DE L'ITEM LORS DE LA COMMANDE 'S'
PVKA:    ASCI        " AK;"
NGE:     ASCI        "GE"            < NOM DE LA BRANCHE DE
                                     < L'OVERLAY !GE.
NGI:     ASCI        "GI"            < NOM DE LA BRANCHE 'GI'.
ISGE:    ASCI        "ISGE"          < COMMANDES A DESTINATION DE
                                     < 'GI' POUR FAIRE 'IS'+'GE'.
<
<        R E L A I   D E S   T A B L E S  :
<
APILE:   WORD        PILE-1          < POUR INITIALISER LE REGISTRE K.
AIC:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM COURANT.
                                     < (ITEM1).
SAIC:    WORD        ZERO+PILE-LTNI+LTN,X
                                     < POUR REINITIALISER 'AIC' A
                                     < CHAQUE RETOUR DU CCI (A
                                     < CAUSE DE LA COMMANDE 'S').
XAI2:    WORD        ZERO+PILE-LTNI-LTNI+LTN,X
AI2:     WORD        ZERO+PILE-LTNI-LTNI+LTN
                                     < ADRESSE DE L'ITEM2.
ATCOD:   WORD        TCOD,X          < RELAI VERS LA TABLE DE CODAGE
                                     < DES CODES ASCI EN CODES CARTE.
ANOM:    WORD        NOM,X           < RELAI VERS LE NOM DE L'ITEM.
APVKA:   WORD        PVKA,X
DEBLIG:  WORD        0               < RELAI DE DEBUT DE LIGNE.
ACARTE:  WORD        LCARTE          < LISTE DES CARTES A PUNCHER 'S'.
LCARTE:  EQU         $
         WORD        CARTKA,X        < CARTE 'KA    '.
ACARTR:  WORD        CARTR,X         < CARTE 'R    '.
AIPLUS:  WORD        IPLUS,X         < CARTE '*+<NOM>;'.
ACARTI:  WORD        CARTI,X         < CARTE 'I    '.
         WORD        0               < FIN DE LISTE.
<
<        R E L A I S   D E S   R O U T I N E S  :
<
ASVC:    WORD        RSVC            < ROUTINE D'EXECUTION DES SVC.
ASVCI:   WORD        RSVCI           < EXECUTION DES SVC DANS LE
                                     < CAS OU LA COMMANDE N'EST PAS 'I'.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
AMESS:   WORD        MESS            < EMISSION D'UN MESSAGE.
ACHKI:   WORD        CHKI            < VALIDATION DU TYPE-ITEM.
AE23:    WORD        E23             < RETOUR DES FONCTIONS.
AGOGE:   WORD        GOGE            < ADRESSE DE RETOUR A 'GE'/'GI'.
<
<        D E M A N D E S   A   C M S 4  :
<
DEMIN:   WORD        '0101           < LECTURE AVEC ECHO SUR LA VISU.
         WORD        BUFFER-ZERO*2   < @OCTET DU BUFFER.
         WORD        1               < LECTURE 1 CARACTERE.
DEMNOM:  WORD        '0101           < LECTURE AVEC ECHO DU NOM
                                     < DE L'ITEM DANS 'S'.
         WORD        NOM-ZERO*2
         WORD        LNOM-1          < ON LIT 1 CARACTERE DE MOINS QUE
                                     < LE MAX POUR S'EVITER DES
                                     < PROBLEMES DELICATS....
DEMOUT:  WORD        '0202           < ECRITURE SUR LA VISU.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR OCTETS DU MESSAGE.
DERASE:  WORD        '0205           < EFFACEMENT DE L'ECRAN.
DEMCA:   WORD        '0A00           < DEMANDE DE LECTURE SUR NVP=10.
         WORD        BCARTE-ZERO*2   < @OCTET DU BUFFER CARTE.
         WORD        80              < ON EST OBLIGE DE LIRE UNE CARTE
                                     < ENTIERE (80 CARACTERES).
DEMPCH:  WORD        '0B02           < DEMANDE D'ECRITURE SUR NVP=11.
                                     < (CAS CU1 ET PERFO).
         WORD        BUFFER-ZERO*2   < @OCTET DU BUFFER.
         WORD        2               < ON ENVOIE UN MOT.
DEMPRN:  WORD        '0B02           < DEMANDE D'ECRITURE
                                     < SUR NVP=11 (CAS LP1).
         WORD        0               < @OCTET DU BUFFER.
         WORD        0               < COMPTE OCTETS.
DEMSGN:  WORD        '0402           < DEMANDE AU SGN , INITIALISE EN
                                     < STORE , AFIN DE GENERER LORS
                                     < DE !LOAD LA BRANCHE 'CA    '.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1              < LA VALEUR SUIT LE NOM.
DEMCCI:  WORD        '0001           < RETOUR AU CCI.
SLEEP:   WORD        '0005           < DEMANDE DE MISE EN SOMMEIL.
         WORD        0
         WORD        4               < 4 SECONDES DE TEMPORISATION.
         PAGE
TCOD:    EQU         $-'20+1
         EOT         #SIP CODAGE PUNCH#
         PAGE
<
<
<        C A R T E S   A   P U N C H E R   S O U S   ' S '  :
<
<
CARTKA:  EQU         $
         ASCI        "KA"
         DO          NBCAR-2/2
         ASCI        "  "
CARTR:   EQU         $
         ASCI        "R "
         DO          NBCAR-2/2
         ASCI        "  "
CARTI:   EQU         $
         ASCI        "I "
         DO          NBCAR-2/2
         ASCI        "  "
         PAGE
<
<
<        E X E C U T I O N   D E S   S V C  :
<
<
<        ARGUMENT :
<                    A=@DEMANDE A CMS4.
<
<
<        RESULTAT :
<                    A=CONDITIONS DE RETOUR DE CMS4 ,
<                    INDICATEURS POSITIONNES EN FONCTION DE CTRL-X-OFF.
<
<
         PROG
<
<
<        E X E C U T I O N   C O N D I T I O N N E L L E   D E S   S V C
<
<
<        FONCTION :
<                      CETTE ROUTINE N'EXECUTE LE SVC QUE
<                    SI LA COMMANDE COURANTE N'EST PAS 'I'.
<
<
RSVCI:   EQU         $
         CPZ         RI              < DISCRIMINATION DE 'I' ...
         JNE         E600            < C'EST 'I' : SVC IGNORE ...
                                     < NOTA : RI=-1<0  , DONC UN
                                     < TEST EN RETOUR SUR LES CONDITIONS
                                     < SERA TOUJOURS NEGATIF , PUISQU'
                                     < ON FAIT DES JGE (TEST DE (A)
                                     < PAR RAPPORT A '13).
<
<
<        E X E C U T O N   I N C O N D I T I O N N E L L E   :
<
<
RSVC:    EQU         $
         PSR         X               < SAVE X.
         SVC         0               < ENVOI DE LA DEMANDE (A) A CMS4.
         LR          X,A             < A=CONDITIONS DE RETOUR DE CMS4.
         PLR         X               < RESTAURE X.
         CPI         '13             < POSITIONNEMENT DES INDICATEURS
                                     < EN FONCTION D'UN EVENTUEL
                                     < CTRL-X-OFF DANS LE CAS DES VISUS.
E600:    EQU         $
         RSR
         PAGE
<
<
<        E N V O I   M E S S A G E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE PREPARE DEMOUT ,
<                    ET ENSUITE ENVOIE LE MESSAGE
<                    DONNE EN ARGUMENT ; ELLE IGNORE
<                    LES CTRL-X-OFF.
<
<
<        ARGUMENT :
<                    A=@MESSAGE (LE 1ER OCTET D'UN MESSAGE
<                      EN DONNE LA LONGUEUR).
<
<
MESS:    EQU         $
         LR          A,C             < C=@MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DE MESSAGE A ENVOYER.
         STA         DEMOUT+1        < MISE EN PLACE DE L'@OCTET
                                     < DU BUFFER DANS DEMOUT.
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2        < MISE EN PLACE DU COMPTE OCTETS
                                     < DE DEMOUT.
         LAD         DEMOUT
         BSR         ASVC            < ENVOI DU MESSAGE.
         RSR
         PAGE
<
<
<        V A L I D A T I O N   T Y P E   I T E M  :
<
<
<        RESULTAT :
<                    LES INDICATEURS SONT POSITIONNES EN
<                    FONCTION DE LA RENCONTRE DU
<                    TYPE 'D'/'I'/'T'.
<
<
<                    DETRUIT A,X.
<
<
CHKI:    EQU         $
         LXI         IINDIC-LTN*2
         LBY         &AIC            < A=TYPE DE L'ITEM COURANT.
         CPI         "I"             < EST-CE UN FILM DIGITAL ???
         JE          CHKI1           < OUI , OK.
         ORI         '10             < ON RAJOUTE LE BIT11 QUI
                                     < DIFFERENCIE 'D' DE 'T'.
         CPI         "T"             < L'ITEM COURANT A-T'IL LE TYPE
                                     < 'TEXTE' ???
CHKI1:   EQU         $
         RSR
         PAGE
<
<
<        L I S T A G E   I T E M   C O U R A N T  :
<
<
<        FONCTION :
<                      CE MODULE PERMET DE LISTER SUR
<                    LP1 LE CONTENU DE L'ITEM COURANT.
<
<
LIST:    EQU         $
<
< VALIDATION DE L'ITEM COURANT :
<
         BSR         ACHKI           < VALIDATION TYPE ITEM ('T'/'D').
         JNE         E24             < NON , ERREUR : RETOUR A !GE.
<
< PREPARATION DU LISTAGE :
<
         LAI         M7-ZERO*2+1
         STA         DEMPRN+1        < MISE EN PLACE DE L'@OCTET DU
                                     < MESSAGE DE SAUT DE PAGE.
         LAI         4
         STA         DEMPRN+2        < 3 OCTETS POUR FAIRE LE SAUT.
                                     < (+1 POUR FERMER LA LIGNE
                                     < PRECEDENTE EVENTUELLE PAR R/C)
         LAD         DEMPRN
         BSR         ASVC            < ENVOI DU SAUT DE PAGE.
         JANE        E22             < ERREUR : RETOUR A CCI.
<        UTILISATION DES REGISTRES :
<                    X=NBRE DE LIGNES ENCORE A IMPRIMER ,
<                    B=@OCTET DE LA LIGNE COURANTE ,
<                    Y=2 (POUR ENVOYER RC+LF).
         LXI         NBLIG           < X=NBRE DE LIGNES A IMPRIMER.
         LA          AIC
         SLLS        1               < A=@OCTET DE LA 1ERE LIGNE.
         LR          A,B             < B=@OCTET DES LIGNES DE L'ITEM.
         LYI         2               < Y=2 (POUR RC+LF).
<
< IMPRESSION D'UNE LIGNE :
<
E70:     EQU         $
         LAI         NBCAR
         STA         DEMPRN+2        < MISE EN PLACE DU NBRE DE CARAC-
                                     < TERES CONTENUS DANS UNE LIGNE.
         STB         DEMPRN+1        < MISE EN PLACE DE L'@OCTET DE
                                     < LA LIGNE COURANTE.
         LAD         DEMPRN
         BSR         ASVC            < IMPRESSION DE LA LIGNE.
         JANE        E22             < ERREUR : RETOUR A CCI.
         LAI         M5-ZERO*2+1
         STA         DEMPRN+1        < MISE EN PLACE DE L'@OCTET
                                     < DU MESSAGE RC+LF.
         STY         DEMPRN+2        < POUR ENVOI DE 2 CARACTERES.
         LAD         DEMPRN
         BSR         ASVC            < ENVOI DE RC+LF.
         JANE        E22             < ERREUR : RETOUR A CCI.
<
< PASSAGE A LA LIGNE SUIVANTE :
<
         ADRI        NBCAR,B         < PROGRESSION DE L'@OCTET DE
                                     < LA LIGNE COURANTE.
         JDX         E70             < SUIVANTE ....
         LAI         M6-ZERO*2
         STA         DEMPRN+1        < MESSAGE DE LIBERATION DE LP1
                                     < PUISQU'ON A TERMINE PAR UN
                                     < LF SEUL.
         LAD         DEMPRN
         BSR         ASVC            < FERMETURE DE LP1.
         JANE        E22             < ERREUR : RETOUR A CCI.
         BR          AE23            < VERS LE RETOUR DES FONCTIONS.
         PAGE
<
<
<        P R O C E S S E U R   D E   S E R V I C E S   I T E M  :
<
<
<        FONCTION :
<                      CE PROCESSEUR PERMET UN CERTAIN
<                    NOMBRE DE FONCTIONS DE SERVICE SUR
<                    LES ITEMS :
<                    CARTE A ITEM (SOUS :SYS) : NVP=10 ,
<                    ITEM A CARTE : NVP=11 ,
<                    LISTE ITEM (SOUS :SYS) : NVP=11.
<
<
<        NOTA IMPORATNT :
<                      IL S'AGIT D'ITEM DE TYPE 'TEXTE' ....
<
<
<        LISTE DES COMMANDES :
<                    P       PUNCH ITEM COURANT SUR NVP=11 ,
<                    S       PUNCH UNE CARTE DU TYPE *+<NOM>;
<                            PUIS FAIT UN 'IL'<NOM> AUTOMATIQUE
<                            A L'AIDE DE 'GI'.
<                    R       READ ITEM COURANT SUR NVP=10 ,
<                    I       IDEM A 'R' AVEC DE PLUS UN 'IS'
<                            AUTOMATIQUE ET RETOUR A 'GE' ,
<                    L       LISTE ITEM COURANT SUR NVP=11 ,
<                    W       RETOUR A CCI ,
<                    F       RETOUR A !GE.
<
<
<        FIN D'ITEM :
<                      POUR LA PERFORATION , ET L'ENTREE
<                    CARTES , ON PEUT INDIQUER LA FIN
<                    DE L'ITEM COURANT PAR LES CARACTERES
<                    '*/' EN DEBUT DE LA DERNIERE LIGNE ....
<
<
<        CREATION D'ITEM :
<                      ON A LA POSSIBLITE DE CREER DES
<                    NOMS D'ITEM , EN METTANT COMME 1ERE
<                    CARTE , LA CARTE SUIVANTE :
<                                    *+...<INDIFFERENT>...;
<                      LA CREATION DE L'ITEM DONT LE NOM
<                    SUIT '*+' , SE FAIT EN TRANSLATANT
<                    CETTE CARTE DANS L'ITEM2 , ET EN
<                    APPELANT 'GI' , QUI LORSQU'IL AURA
<                    TERMINE SON TRAVAIL FERA UN RETOUR
<                    A 'KA' SI LE ';' ETAIT SUIVI DE 2
<                    'SPACE' ; SINON RETOUR A ???? (SUIVANT
<                    CE QUI SUIVAIT ';'...).
<
<
<
<
<        I N I T I A L I S A T I O N   D U   P R O C E S S E U R  :
<
<
<        FONCTION :
<                      CETTE ENTREE EST UTILSEE SUITE
<                    A UN APPEL PAR !GE.
<
<
         WORD        LOC+'80         < INITIALISATION DE LA BASE L.
         WORD        BRANCH          < INITIALISATION DE LA BASE W.
CARTE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         L,W             < INITIALISATION DE L,W.
         LB          APILE
         LR          B,K             < INITIALISATION DE K.
<
<        I N I T I A L I S A T I O N   D E   ' C A '  :
<
<
< RAZ DE L'EN-TETE DE L'ITEM2 :
< (AINSI , IL N'Y A PLUS D'ITEM2 COURANT !!!)
<
         LXI         -LTN
RZ2:     EQU         $
         STZ         &XAI2           < RAZ DE L'EN-TETE DE L'ITEM2.
         JIX         RZ2
<
< INITIALISATION DE 'KA' :
<
         LAI         6
         STBY        DEMSGN          < LA DEMANDE AU SGN EST MISE EN
                                     < MODE 'LOAD SOUS :SYS'.
         LA          NGE
         STA         0,W             < LE NOM DE LA BRANCHE D'OVERLAY
                                     < A APPELER EST 'GE    '.
<
<        I N T E R R O G A T I O N   U T I L I S A T E U R  :
<
E40:     EQU         $
         LAD         M2
         BSR         AMESS           < ENVOI D'UN MESSAGE D'INVITATION.
         LAD         DEMIN
         BSR         ASVC            < LECTURE DE LA REPONSE DE
                                     < L'UTILISATEUR SUR 1 CARACTERES.
<
< ANALYSE DES DESIRS (C'EST FREUDIEN...) :
<
         LBY         BUFFER          < A=COMMANDE UTILISATEUR.
         CPI         "P"
         JE          PUNCH           < DEMANDE DE PUNCH L'ITEM COURANT.
         CPI         "S"
         JE          SAVE            < DEMANDE DE CREATION D'UNE
                                     < CARTE *+<NOM>;.
         CPI         "L"
         JE          LIST            < DEMANDE DE LISTE ITEM COURANT.
         CPI         "F"
         JE          GOGE            < DEMANDE RETOUR A !GE.
         CPI         "W"
         JE          GOCCI           < DEMANDE DE RETOUR A CCI.
         STZ         RI              < RI=0 : COMMANDE 'R' A PRIORI.
         LXI         0               < INDEX D'ACCES AU 1ER CARACTERE.
                                     < (DE CARTR ET DE CARTI).
         CPBY        &ACARTR
         JE          READ            < DEMANDE DE LECTURE DE L'ITEM
                                     < COURANT SUR CR1.
                                     < (NVP=10).
         CPBY        &ACARTI
         JE          ITEM            < DEMANDE DE READ AVEC 'IS'
                                     < AUTOMATIQUE ET RETOUR A 'GE'.
<
< CAS DES COMMANDES NON RECONNUES.
<
E41:     EQU         $
         LAD         M3
         BSR         AMESS           < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         E40             < VERS L'INTERROGATION.
<
<        R E T O U R   D E S   E X E C U T I O N S  :
<
E21:     EQU         $
E23:     EQU         $
         LAD         DERASE
         BSR         ASVC            < EFFACEMENT DE L'ECRAN.
         JMP         E40             < VERS L'INTERROGATION UTILISATEUR.
<
<        R E T O U R   A   ! G E  :
<
GOGE:    EQU         $
         LAD         DEMSGN
         BSR         AOVL            < DEMANDE DE CHARGEMENT DE LA
                                     < BRANCHE D'OVERLAY 'GE    ' AU SGN
<
< RETOUR EN ERREUR : SI ON ARRIVE ICI
< C'EST QUE LE CHARGEMENT DE !GE N'A
< PU SE FAIRE , ON VA DONC RENDRE
< LA MAIN AU CCI :
<
<        R E T O U R   A U   C C I  :
<
GOCCI:   EQU         $
         LAD         DEMCCI
         BSR         ASVC            < RETOUR AU CCI.
         LA          SAIC            < RESTAURATION DE AIC A PRIORI AU
         STA         AIC             < RETOUR DU CCI PAR !GO , A CAUSE
                                     < DE LA COMMANDE 'S'.
         JMP         E40             < VERS L'INTERROGATION DE
                                     < L'UTILISATEUR DANS LE CAS
                                     < D'UN !GO.
<
<        E R R E U R S   D ' A S S I G N A T I O N  :
<
E22:     EQU         $
         LAD         M4
         BSR         AMESS           < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         GOCCI           < PUIS VERS UN RETOUR AU CCI ,
                                     < AVEC PEUT-ETRE UN RETOUR PAR
                                     < !GO LORSQUE LES !ASSIGN AURONT
                                     < ETE FAITS.
<
<        I T E M   E N   E R R E U R  :
<
E20:     EQU         $
E24:     EQU         $
         LAD         M1
         BSR         AMESS           < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         GOGE            < VERS UN RETOUR A !GE.
         PAGE
<
<
<        P U N C H   < N O M >   D ' I T E M  :
<
<
<        FONCTION :
<                      CE MODULE PUNCHE UNE CARTE
<                    *+<NOM>; , PUIS FAIT UN 'IL'
<                    DU <NOM> AUTOMATIQUE A L'AIDE DE 'GI'.
<
<
SAVE:    EQU         $
         LAD         MNOM
         BSR         AMESS           < ENVOI D'UN MESSAGE DEMANDANT
                                     < LE <NOM> DE L'ITEM.
         LAD         DEMNOM
         BSR         ASVC            < ENTREE DU <NOM> DE L'ITEM.
         LAD         MRET
         BSR         AMESS           < RETOUR A LA LIGNE DU CURSEUR.
<
< RECHERCHE DU DERNIER CARACTERE DE <NOM> :
<
         LXI         0               < INDEX DU <NOM>.
E500:    EQU         $
         LBY         &ANOM           < ACCES A UN CARACTERE DU <NOM>.
         CPI         '04             < EST-CE 'EOT' ???
         JE          E501            < OUI , ON A TROUVE LA FIN DE <NOM>
         CPI         '0D             < EST-CE R/C ???
         JE          E501            < OUI , ON A TROUVE LA FIN DE <NOM>
         ADRI        1,X             < NON , PASSAGE CARACTERE SUIVANT.
         LR          X,A             < VALIDATION DE L'INDEX DE <NOM>.
         CPI         LNOM-1          < EST-ON EN PRESENCE D'UN <NOM>
                                     < DE LONGUEUR MAX -1 (-1 POUR SE
                                     < SIMPLIFIER LA VIE...).
         JL          E500            < NON , ON PEUT POURSUIVRE.
<
< MISE EN PLACE DE L'INDICATEUR DE FIN DE <NOM> :
<
E501:    EQU         $
         LR          X,Y             < Y=INDEX+1 DU DERNIER CARACTERE
                                     < DE <NOM>.
         LXI         3               < 3 CARACTERES A RAJOUTER
                                     < DERRIERE <NOM>.
E502:    EQU         $
         LBY         &APVKA          < PARCOURS DE PVKA A REBROUSSE POIL
         XR          X,Y             < X=INDEX DE <NOM>.
         STBY        &ANOM           < MISE EN PLACE DE ';KA' DERRIERE
                                     < LE <NOM>.
         ADRI        1,X             < PROGRESSION DE L'INDEX DE <NOM>.
         XR          X,Y             < X=INDEX DE PVKA.
         JDX         E502            < AU SUIVANT ...
         LAD         LCARTE
         STA         ACARTE          < ON N'EST JAMAIS ASSEZ PRUDENT !!!
<
< PREPARATION DU PUNCH DE CHACUNE DES 4 CARTES :
<
E801:    EQU         $
         LA          &ACARTE         < RECUPERATION DE L'ADRESSE DE
                                     < LA CARTE A PUNCHER.
         JAE         E800            < ON A FINI DE PUNCHER ...
         STA         AIC             < AINSI LE MODULE DE PUNCH
                                     < CROIRA QUE LA ZONE 'IPLUS'
                                     < EST L'ITEM COURANT (!!!!).
         LBI         0               < B=0 AFIN DE DISTINGUER 'PUNCH'
                                     < DE 'SAVE' ; EN FAIT , IL
                                     < N'Y A QU'UNE CARTE A PUNCHER.
         JMP         E503            < VERS LE PUNCH....
         PAGE
<
<
<        P U N C H   I T E M   C O U R A N T  :
<
<
<        FONCTION :
<                      CE MODULE PUNCHE L'ITEM COURANT
<                    A RAISON D'UNE CARTE PAR LIGNE
<                    DE VISU . LES 6 CARACTERES DE FIN DE
<                    CARTE SONT MIS A 'SPACE' . ON PEUT
<                    ARRETER LE PUNCH PAR UN CTRL-X-OFF ,
<                    CAR SIMULTANEMENT L'ITEM EST
<                    VISUALISE.
<
<
PUNCH:   EQU         $
<
< VALIDATION DE L'ITEM :
<
         BSR         ACHKI           < VALIDATION TYPE ITEM ('T'/'D').
         JNE         E24             < NON , ERREUR : RETOUR A !GE.
<
< PREPARATION DU PUNCH :
<
         LAD         DERASE
         BSR         ASVC            < EFFACEMENT DE L'ECRAN EN VUE
                                     < DE LA VISUALISATION DE L'ITEM.
         LBI         NBLIG           < B=NBRE DE CARTES A PUNCHER.
E503:    EQU         $               < ENTRY 'SAVE' (AVEC B=0).
         LXI         0               < INDEX COURANT DE L'ITEM.
         LA          AIC
         SLLS        1               < A=@OCTET DE L'ITEM.
         STA         DEMOUT+1        < INITIALISATION DE L'@OCTET
                                     < DU BUFFER DE DEMOUT SUR LE
                                     < 1ER OCTET DE L'ITEM COURANT.
         LAI         1
         STA         DEMOUT+2        < LA LIGNE EST VISUALISEE
                                     < CARACTERE PAR CARACTERE ...
<
< ENVOI D'UNE LIGNE :
<
E10:     EQU         $
         LA          DEMOUT+1        < @OCTET DU DEBUT DE LIGNE.
         SLRS        1               < A=@MOT DU DEBUT DE LIGNE.
         STA         DEBLIG          < RELAI VERS LE DEBUT DE LA LIGNE.
         LYI         NBCAR           < Y=NBRE DE CARACTERES PAR LIGNE.
<
< ENVOI D'UN CARACTERE :
<
E11:     EQU         $
         LBY         &AIC            < A=CARACTERE COURANT (X).
         ANDI        '7F             < LORS DU PUNCH ON IGNORE LES
                                     < MISES EN PAGE EVENTUELLES
                                     < DU TYPE UP/LINE (CF. EDIT2).
         CPI         '20             < EST-CE UN CARACTERE ???
         JL          E20             < NON , ERREUR : L'ITEM N'EST PAS
                                     < UN TEXTE , OU BIEN EST COMPACTE.
         CPI         '5F             < EST-CE UN CODE MINUSCULE ???
         JLE         E12             < NON , OK.
         LAI         "?"             < DANS LE CAS OU LE CODE N'EST PAS
                                     < RECONNU , ON LE REMPLACE PAR '?'.
E12:     EQU         $
         PSR         X               < SAVE L'INDEX COURANT DE L'ITEM.
         LR          A,X             < X=CARACTERE A CODER.
         LA          &ATCOD          < A=VALEUR EN CODE CARTE DU
                                     < CODE ASCI (X).
         STA         BUFFER          < LE CODE CARTE EST MIS DANS
                                     < LE BUFFER DE PUNCH.
         PLR         X               < RESTAURE L'INDEX COURANT.
         LAD         DEMPCH
         BSR         ASVC            < PUNCH 1 CARACTERE.
         JANE        E22             < ERREUR D'ASSIGNATION , VERS
                                     < UN RETOUR AU CCI.
<
< VISUALISATION DU CARACTERE PUNCHE :
<
         LAD         DEMOUT
         BSR         ASVC            < VISUALISATION DU CARACTERE(X).
         JGE         E21             < ABORT DU PUNCH LORSQU'UN
                                     < CTRL-X-OFF EST FRAPPE.
<
< PASSAGE AU CARACTERE SUIVANT :
<
         IC          DEMOUT+1        < PROGRESSION DE L'@OCTET
                                     < DU BUFFER DE VISUALISATION.
         ADRI        1,X             < INDEX DU CARACTERE SUIVANT.
         ADRI        -1,Y            < DECOMPTE DES CARACTERES
                                     < SUR UNE LIGNE.
         CPZR        Y
         JNE         E11             < LA LIGNE COURANTE N'A PAS ENCORE
                                     < ETE PUNCHEE EN ENTIER.
<
< CAS OU UNE LIGNE ENTIERE A ETE ENVOYEE :
< ON COMPLETE LA CARTE POUR FAIRE LES
< 80 COLONNES ; LA COMPLETION SE
< FAIT AVEC 6 CARACTERES 'SPACE' :
<
         LYI         80-NBCAR        < Y=NBRE DE 'SPACE' A ENVOYERR.
         STZ         BUFFER          < LE CODE CARTE DU 'SPACE' EST 0000
E13:     EQU         $
         LAD         DEMPCH
         BSR         ASVC            < PUNCH UN 'SPACE'.
         ADRI        -1,Y            < DECOMPTE DES 'SPACE' ENCORE
                                     < A PUNCHER.
         CPZR        Y
         JNE         E13             < IL RESTE ENCORE DES 'SPACE'.
<
< TEMPORISATION DE LA PERFORATION :
< EN EFFET LE SYSTEME FONCTIONNANT
< SANS INTERRUPTION , IL
< FAUT FAIRE UNE TEMPORISATION
< PROGRAMMEE :
<
         LAD         SLEEP
         BSR         ASVC            < L'UTILISATEUR EST MIS EN ATTENTE
                                     < POUR 4 SECONDES , TEMPS SUFFISANT
                                     < POUR UNE CARTE PLEINE.
<
< TEST DE L'INDICATEUR DE FIN :
<
         LA          &DEBLIG         < RECUPERATION DES 2 PREMIERS
                                     < CARACTERES DE LA LIGNE.
         CP          FINP            < EST-CE L'INDICATEUR DE FIN ???
         JE          E100            < OUI , ON ARRETE ICI .....
<
< PASSAGE A LA LIGNE SUIVANTE :
<
         ADRI        -1,B            < DECOMPTE DES LIGNES RESTANT
                                     < A PUNCHER.
         CPZR        B
         JG          E10             < ALLONS PUNCHER LA CARTE SUIVANTE.
         JL          E504            < DANS LE CAS OU B<0 , C'EST QU'ON
                                     < EST EN PRESENCE DE 'SAVE' ;
                                     < ALLONS DONC APPELER 'GI'.
E100:    EQU         $
         BR          AE23            < VERS LE RETOUR DES FONCTIONS.
<
<        F I N   D E   P U N C H   1   C A R T E   S O U S   ' S '  :
<
E504:    EQU         $
         IC          ACARTE          < PASSAGE A LA CARTE SUIVANTE.
         JMP         E801            < SI ELLE EXISTE.
<
<        F I N   D E   ' S '  :
<
E800:    EQU         $
         LAD         IPLUS           < A=EMETTEUR=@'*+<NOM>;KA'.
         LB          AI2             < B=RECEPTEUR=@CORPS(ITEM2).
         LXI         NBCAR/2         < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < MISE EN PLACE DANS L'ITEM2
                                     < D'1NE DEMANDE PORTANT SUR <NOM>.
         LA          ILOAD
         STA         &AI2            < LA DEMANDE ARGUMENT A 'GI' ,
                                     < EST 'IL<NOM>;KA'.
         JMP         E505            < VERS L'APPEL DE 'GI'.
         PAGE
<
<
<        C R E A T I O N   D ' U N   I T E M
<        A   P A R T I R   D ' U N   D E C K   D E   C A R T E S  :
<
<
<        FONCTION :
<                      CE MODULE PERMET DE CREER UN ITEM
<                    A PARTIR D'UN DECK DE CARTES.
<                      POUR 'R' , LES CARTES SONT VISUALISEES
<                    AU FUR ET A MESURE DE LEUR
<                    LECTURE ; CE QUI PERMET D'ARRETER
<                    CELLE-CI PAR UN CTRL-X-OFF ...
<                      ON DISTINGUE 2 ENTREES :
<                    1- 'R' : READ : L'ITEM EST LU A
<                    PARTIR DE NVP=10 ET C'EST TOUT (KA
<                    GARDE LA MAIN) ,
<                                    RI=0
<                    2- 'I' : ITEM : L'ITEM EST LUU A PARTIR
<                    DE NVP=10 , ET LE CONTROLE EST RENDU
<                    IMMEDIATEMENT A 'GI' POUR FAIRE
<                    UN 'IS' AUTOMATIQUE SUIVI D'UN RETOUR
<                    A 'GE'.
<                                    RI=-1.
<
<
ITEM:    EQU         $
         DC          RI              < RI=-1 : COMMANDE 'I'.
READ:    EQU         $
<
< PREPARATION DE LA LECTURE :
<
         LAD         DERASE
         BSR         ASVCI           < EFFACEMENT DE L'ECRAN SI 'R'.
         LAI         BCARTE-ZERO*2
         STA         DEMOUT+1        < @OCTET BUFFER DE VISUALISATION.
         LAI         NBCAR           < NBRE DE CARACTERES PAR LIGNE.
         STA         DEMOUT+2        < MISE EN PLACE DU COMPTE OCTETS
                                     < DE VISUALISATION DES CARTES.
         LXI         NBLIG           < NBRE MAX DE CARTES A LIRE.
         LB          AIC             < B=@MOT DE LA LIGNE COURANTE.
         RBT         0+16            < RAZ DU BIT D'INDEX.
<
< LECTURE D'UNE CARTE :
<
E30:     EQU         $
         LAD         DEMCA
         BSR         ASVC            < LECTURE 1 CARTE.
         JANE        E22             < ERREUR D'ASSIGNATION  , VERS UN
                                     < RETOUR AU CCI.
<
< CREATION DE LA LIGNE COURANTE
< A PARTIR DE LA CARTE LUE :
<
         LAD         BCARTE          < A=@EMETTEUR=@BUFFER DE LECTURE
                                     <   DES CARTES ,
                                     < B=@RECEPTEUR=@LIGNE COURANTE.
         LR          X,Y             < SAVE X DANS Y.
         LXI         NBCAR/2         < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < CREATION DE LA LIGNE COURANTE.
         LR          Y,X             < RESTAURE X.
<
< VISUALISATION DE LA LIGNE COURANTE :
<
         LAD         DEMOUT
         BSR         ASVCI           < VISUALISATION CARTE LUE SI 'R'.
         JGE         E105            < ARRET POUR CTRL-X-OFF : LA
                                     < DERNIERE CARTE LUE SERA REMISE
                                     < A 'SPACE'.
<
< PASSAGE A LA LIGNE SUIVANTE :
<
         ADRI        NBCAR/2,B       < PROGRESSION DE L'@MOT DE LA
                                     < LIGNE COURANTE.
<
< TEST DE FIN D'ENTREE :
<
         LA          BCARTE          < ACCES AUX 2 PREMIERS CARACTERES
                                     < DU BUFFER D'ENTREE.
         CP          FINP            < EST-CE L'INDICATEUR DE FIN ???
         JE          E101            < OUI , ON ARRETE LA ....
         CP          IPLUS           < EST-CE UNE DEMANDE CREATION ITEM???
         JE          E200            < PEUT-ETRE ...
E201:    EQU         $               < RETOUR DES FAUSSES CREATION
                                     < D'ITEM.
         JDX         E30             < PASSAGE A LA CARTE SUIVANTE.
<
< MISE A JOUR DE L'EN-TETE DE L'ITEM COURANT :
<
E102:    EQU         $
         LXI         IINDIC-LTN*2
         LAI         "T"
         STBY        &AIC            < L'ITEM COURANT RECOIT LE
                                     < TYPE 'TEXTE'.
         LXI         LRITEM-LTN
         LA          NCP
         STA         &AIC            < LA LONGUEUR REELLE DU CORPS
                                     < DE L'ITEM EST DE 35 LIGNES ....
         CPZ         RI              < DISCRIMINATION 'I'/'R' ???
         JNE         E206            < CAS DE LA COMMANDE 'I' (RI=-1).
<
< CAS DE LA COMMANDE 'R' :
<
         BR          AE23            < VERS LE RETOUR DES FONCTIONS.
<
< CAS DE LA COMMANDE 'I' :
<
E206:    EQU         $
         LAD         DERASE
         BSR         ASVCI           < EFFACEMENT DE L'ECRAN SI 'R'.
         LAD         ISGE            < A=@EMETTEUR D'UN MESSAGE DESTINE
                                     < A 'GI' POUR FAIRE UN 'IS'
                                     < AUTOMATIQUE ET RETOUR A 'GE'.
         LXI         4/2             < X=NBRE DE MOTS A DEPLACER.
         JMP         E205            < VERS LA PREPARATION DU RETOUR
                                     < A'GI'.
<
< MISE A 'SPACE' DES DERNIERES LIGNES DE L'ITEM :
<
E101:    EQU         $
         JDX         E105            < SORTIE IMMEDIATE AU CAS OU
                                     < L'INDICATEUR DE FIN SE TROUVAIT
                                     < SUR LA DERNIERE LIGNE ....
         JMP         E102            < OK , '*/' SUR LA DERNIERE LIGNE.
E105:    EQU         $               < CAS OU IL Y A AU MOINS UNE
                                     < LIGNE A METTRE A 'SPACE'.
         LAI         '20
         SBT         2               < A='SPACE''SPACE'.
         ADRI        -1,B            < B=@DE LA 1ERE LIGNE A METTRE
                                     < A 'SPACE' -1 (POUR INDEXER
                                     < PAR RAPPORT A 1).
<
< BOUCLE DE MISE A 'SPACE' DES LIGNES :
<
E104:    EQU         $
         SBT         0+16            < BIT D'INDEX.
         STB         DEBLIG          < DEBLIG=RELAI VERS LA
                                     < LIGNE COURANTE.
         LR          X,Y             < SAVE X DANS Y.
         LXI         NBCAR/2         < X=NBRE DE MOTS A METRE A 'SPACE'.
<
< BOUCLE DE MISE A 'SPACE' D'UNE LIGNE :
<
E103:    EQU         $
         STA         &DEBLIG
         JDX         E103
         LR          Y,X             < RESTAURE X.
         ADRI        NBCAR/2,B       < PASSAGE A LA LIGNE SUIVANTE.
         JDX         E104            < PASSAGE A LA LIGNE SUIVANTE.
         JMP         E102            < C'EST FINI ...
<
<
<        C R E A T I O N   N O M   D ' I T E M  :
<
<
E200:    EQU         $
         LR          X,A
         CPI         NBLIG           < EST-CE LA 1ERE CARTE QUE
                                     < L'ON LIT ???
         JNE         E201            < NON , CE N'EST DONC PAS UNE C
                                     < CREATION DE NOM D'ITEM.
<
< CAS D'UNE 1ERE CARTE AVEC '*+' EN TETE :
<
         LYI         2               < INDEX 1ER CARACTERE SUIVANT '*+'.
         LXI         NBCAR-2-2       < NBRE DE CARACTERES A TESTER
                                     < SUR LA CRATE COURANTE.
<
< RECHERCHE D'UN ';' SUR LA CARTE :
<
E202:    EQU         $
         XR          X,Y             < X=INDEX CARACTERE SUR LA CARTE.
         LBY         &AIC            < A=CARACTERE COURANT.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         CPI         ";"             < EST-CE ';' (CARACTERE UTILISE
                                     < COMME <EOT> PAR 'GI'.
         JE          E203            < OUI , C'EST BON.
         XR          X,Y             < NON , POURSUIVONS LA RECHERCHE.
         JDX         E202            < CARACTERE SUIVANT ....
<
< CAS OU L'ON N'A PAS TROUVE DE ';' SUR LES PREMIERS CARACTERES :
<
         LXI         NBLIG-1         < RE-INITIALISATION DE X AVEC
                                     < APSSAGE A LA CARTE SUIVANTE.
         JMP         E30             < VERS LA LECTURE DE LA CARTE
                                     < SUIVANTE ('*+' IGNORE...).
<
< CAS OU ON A TROUVE UN ';' :
<
E203:    EQU         $
         LBY         &AIC            < ACCES AU CARATERE SUIVANT.
         CPI         " "             < EST-CE UN 'SPACE' ???
         JNE         E204            < NON , ON NE FAIT RIEN.
         ADRI        1,X             < OUI , PASSAGE AU CARACTERE
                                     < SUIVANT.
         LBY         &AIC            < ACCES CARACTERE SUIVANT.
         CPI         " "             < EST-CE UN 'SPACE' ???
         JNE         E204            < NON , ON NE FAIT RIEN.
<
< CAS OU ON A TROUVE ';  ' :
<
         LAI         "A"
         STBY        &AIC
         ADRI        -1,X
         LAI         "K"
         STBY        &AIC            < ON GENERE ';KA' A LA PLACE
                                     < DE ';  ' RENCONTRE.
<
< GENERATION DE L'ITEM2 :
<
E204:    EQU         $
         LR          B,A
         ADRI        -NBCAR/2,A      < A=@CORPS DE L'ITEM1.
         LXI         NBCAR/2         < X=NBRE DE MOTS A DEPLACER.
E205:    EQU         $               < ENTRY POUR LA COMMANDE 'I'.
         LB          AI2             < B=@CORPS DE L'ITEM2.
         MOVE                        < GENERATION ITEM2.
<
< PREPRARTION DE L'APPEL DE 'GI' :
<
         LAI         "I"
         STBY        &AI2            < MISE DE 'I+' EN TETE DE L'ITEM2.
                                     < (A LA PLACE DE '*+').
                                     < (DANS LE CAS DE 'ISGE' LE 'I'
                                     < RESTE UN 'I' ....).
<
< APPEL DE 'GI' :
<
E505:    EQU         $               < ENTRY POUR FIN DE 'SAVE'.
<
< MISE EN PLACE DU TYPE 'TEXTE' :
<
         LXI         IINDIC-LTN*2
         LAI         "T"
         STBY        &XAI2           < LE TYPE 'T' EST MIS POUR 'GI'
                                     < QUI VALIDE L'ITEM2.
         LA          NGI
         STA         0,W             < LE NOM DE LA BRANCHE 'GI' EST
                                     < MIS EN TETE DE LA BRANCHE
                                     < DE L'OVERLAY.
         BR          AGOGE           < VERS LE CHARGEMENT (ID. A 'GE').
         PAGE
<
<
<        V A L I D A T I O N   I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI < @ITEM2.
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI LE
                                     < PROCESSEUR RECOUVRE L'ITEM2.
         DZS         X10+1
         EOT         #SIP GEN PROCESSEUR#



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.