<
<        R E S T A U R A T I O N
<
         IDP         "RESTAURATION"
         IDP         "P. FRANCONNET"
ORDI:    VAL                     "@"
         IF          ORDI-" ",XWOR%1,,XWOR%1
ORDI:    VAL         "T"
XWOR%1:  VAL         0
         IF          ORDI-"T",XWOR%1,,XWOR%1
         IDP         "VERSION T1600"
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         IDP         "VERSION SOLAR"
XWOR%1:  VAL         0
         IDP         "RELEASE 09 - 22/12/80"
         TABLE
ZERO:    EQU         $
         DZS         '10             < POUR CMS.
DIALOG:  VAL         0               < DIALOGUE DUMP/REST POUR SORTIE VISU.
                                     < CETTE VARIABLE INDIQUE SI LE PROGRAMME
                                     < A OU NON L'INITIATIVE DU DIALOGUE.
                                     < POUR L'INSTANT, C'EST LE PROGRAMME
                                     < EXECUTE SUR LE SOLAR QUI A L'INITIATIVE.
                                     < DONC DIALOG EST FONCTION DE 'ORDI'.
                                     <
                                     < DIALOG=1 LE PROGRAMME A L'INITIATIVE.
                                     < DIALOG=0 LE PROGRAMME N'A PAS L'INI-
                                     <          TIATIVE.
         IF          ORDI-"S",XWOR%1,,XWOR%1
DIALOG:  VAL         1
XWOR%1:  VAL         0
<
         IF          ORDI-"T",XWOR%1,,XWOR%1
QUANTA:  VAL         1               < QUANTA=NB SECTEURS PHYSIQUES
                                     < POUR 1 SECTEUR LOGIQUE (SGF)
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
QUANTA:  VAL         3               < QUANTA=NB SRCTEURS PHYSIQUES
                                     < POUR 1 SECTEUR LOGIQUE (SGF)
XWOR%1:  VAL         0
LNOM:    VAL         17              < LONG MAX NOM (EN MOTS)
LMAXV:   VAL         '1500           < LONGUEUR MAXIMUM EN MOTS DE
                                     < NOM+VALEUR SUR T1600
         IF          ORDI-"S",XWOR%1,,XWOR%1
LMAXV:   VAL         '7FFF-2/2       < LONGUEUR MAX EN MOTS DE NOM+VALEUR
                                     < ON FAIT -2 SUR LA LONGUEUR OCTETS
                                     < ADMISSIBLE, CAR LORS DU DUMP, LE NOM
                                     < ET LA VALEUR SONT PRECEDES D'UN COUNT
                                     < SUR 1 MOT CONTENANT 2+L(NOM+VAL).
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
LPAD:    VAL         128*QUANTA-1    < LONG PAGE VIRT SI DKU
                                     < LE PREMIER MOT SERT A NUMEROTER LES BLOCS
                                     < S'IL VAUT -1,LE BLOC EST INVALIDE
                                     < ET LA RESTAURATION EST FINIE
                                     < S'IL VAUT -2,LE BLOC EST INVALIDE
                                     < ET LA RESTAURATION PASSE AU BLOC SUIVANT
<
<        PARAMETRES "MEMOIRE COMMUNE" (CDA).
<
ADDCDA:  VAL         0               < ADRESSE DEBUT DE LA ZONE CDA
                                     < A UTILISER.
LCDAD:   VAL         '8000-1-ADDCDA+1 < LONGUEUR (MOTS) DE LA ZONE CDA
                                     < DISPONIBLE.
LPAM:    VAL         512-1           < LONGUEUR MOTS PAGE VIRTUELLE SI
                                     < MEMOIRE COMMUNE (CDA); UN VERROU + UNE
                                     < PAGE VIRTUELLE FERONT DONC UN COMPTE
                                     < ROND...
XWORK:   VAL         LPAM+1          < LONGUEUR PAGE VIRTUELLE + VERROU ASSOCIE.
XWORK:   VAL         LCDAD/XWORK
         IF          XWORK,,XWOR%2,XWOR%2
XWORK:   VAL         -XWORK          < RENDRE XWORK POSITIF.
XWOR%2:  VAL         0
         IF          XWORK-1,,,XWOR%2
         IF          ERREUR : IL FAUT AU MOINS DEUX BUFFERS EN CDA.
XWOR%2:  VAL         0
NBVER:   VAL         XWORK           < NOMBRE DE VERROUS ( = NOMBRE DE BUFFERS
                                     < EN CDA.
XWOR%1:  VAL         0
LPAF:    VAL         128*QUANTA-1    < LONG PAGE VIRT SI FICHIER (MOTS)
LPAC:    VAL         128             < LONG PAGE VIRT SI CARTES
LBUFV:   VAL         50              < LONGUEUR MOT BUFFER VISU
LPAV:    VAL         LBUFV*8         < LONGUEUR MOTS PAGE VIRTUELLE SI DUMP
                                     < SUR LIGNE VISU. IL Y AURA DONC 16 BUFFERS
                                     < VISU PAR PAGE VIRTUELLE.
NBCOL:   VAL         80              < NOMBRE DE COLONNES CARTE
                                     < ATTENTION: CECI N'EST PAS UN PARAMETRE
ACK:     VAL         "K"             < CARACTERE DE SYNCHRONISATION
SYNC:    VAL         "S"             < CARACTERE DE RESYNCHRONISATION
                                     < EN CAS DE REPRISE VISU.
         IF          ORDI-"S",XWOR%1,,XWOR%1
NB1DKU:  VAL         '0000           < NUMERO DU 1ER BLOC POSSIBLE SUR DKU
NBFDKU:  VAL         'FA00-1         < ET DU DERNIER
NBTRY:   VAL         10              < NOMBRE DE TENTATIVES DE LECTURES
                                     < SUR DKU.
         IF          NBFDKU,,XWOR%2,XWOR%2 < LE DERNIER DOIT ETRE<'FA00
         IF          NBFDKU-'FA00,XWOR%2,,
         IF          LE DERNIER BLOC POSSIBLE SUR DKU
         IF          DEPASSE LA LIMITE PHYSIQUE DU DISQUE
XWOR%2:  VAL         0
         IF          NB1DKU)NBFDKU,XWOR%2,, < SI LE DEBUT ET LA FIN SONT
                                            < DE MEME SIGNE
         IF          NBFDKU-NB1DKU,,XWOR%2,XWOR%2 < IL FAUT DERNIER>=1ER
         IF          LE NUMERO DU DERNIER BLOC
         IF          EST INFERIEUR AU NUMERO DU PREMIER
XWOR%2:  VAL         0
         IF          NB1DKU)NBFDKU,,XWOR%2,XWOR%2 < S'ILS SONT DE SIGNE
                                                  < DIFFERENT
         IF          NBFDKU,XWOR%2,, < LE DERNIER DOIT ETRE NEGATIF
         IF          LE NUMERO DU DERNIER BLOC
         IF          EST INFERIEUR AU NUMERO DU PREMIER
XWOR%2:  VAL         0
XWOR%1:  VAL         0
         WORD        DEB1
         WORD        ENTRY1
         PROG
DEB1:    EQU         $
         LRP         L
         BR          -1,L
<
NSPESC:  VAL         '58
NSPSTN:  VAL         '15
NSPDK1:  VAL         '23
NSPDK2:  VAL         NSPDK1+1
         IF          ORDI-"S",XWOR%1,,XWOR%1
NSPDKA:  VAL         '22             < DISQUE VIRTUEL FIXE
NSPDKB:  VAL         NSPDKA-1        < DISQUE VIRTUEL AMOVIBLE
NSPSTN:  VAL         '13
X123X:   VAL         '15-NSPSTN
XWOR%1:  VAL         0
         TABLE
PILE:    DZS         35              < PILE POUR 'K'.
         BYTE        '0;'6D
NOM:     DZS         LNOM+1          < NOM EN COURS (PRUDENCE)
NOMFS:   DZS         LNOM+1          < NOM DU FICHIER DE SAUVEGARDE
                                     < POUR UN !ASSIGN RELEASE ET UN
                                     < DLN EVENTUELS EN FIN DE TRAVAIL
         BYTE        '04             < CTRL-D
         IF          ORDI-"S",XWOR%1,,XWOR%1
NOMR:    DZS         LNOM+1          < NOM A RECHERCHER (MODE RECHERCHE).
XWOR%1:  VAL         0
<
BC:      DZS         80              < BUFFER CARTE
FBC:     EQU         $               < FIN BUFFER CARTE
<
XWOR%1:  VAL         BC-ZERO
XWOR%2:  VAL         $-ZERO
         $EQU        ZERO+XWOR%1     < RECOUVREMENT DU BUFFER 'BC' PAR 'BV'
BV:      DZS         LBUFV           < BUFFER VISU: IL RECOIT DES CARACT.
                                     < ASCI
BVF:     EQU         $               < FIN BUFFER VISU
LBV:     VAL         BVF-BV          < LONGUEUR MOTS BUFFER VISU
         $EQU        ZERO+XWOR%2
<
<
<        MESSAGES A ENVOYER PAR S/P ENVOI
<
M:       EQU         $+256
MFI:     ASCI        " (FICHIER)"
         WORD        0
MIT:     ASCI        " (ITEM)"
         WORD        0
MIMP:    BYTE        " ";"?";"?";0
MPBSTN:  EQU         MIMP
MPBAS:   EQU         MIMP
MCONEX:  EQU         MIMP
         IF          ORDI-"T",XWOR%1,,XWOR%1
MREST:   BYTE        '6D;"R"
         ASCI        "ESTAURATION CARTES,FICHIER,VISU (C/F/V)?"
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MREST:   BYTE        '6D;"R"
         ASCI        "EST C/1/2/F/X/V/D/M/T?"
         WORD        0
MDELAR:  BYTE        '6D;"D"
         ASCI        "ELETE & REST?"
         WORD        0
MDR:     BYTE        '6D;'83;"*";" "
         ASCI        "DELETE & REST!"
         WORD        0
MDD:     BYTE        '6D;'83;"*";" "
         ASCI        "DELETE!"
         WORD        0
MINIT:   BYTE        '6D;"I"
         ASCI        "NITIALISER?"
XWOR%1:  VAL         0
         WORD        0
MQV:     BYTE        " ";"V";"I";0
MFICH:   ASCI        " FICHIER="
         WORD        0
MSAUV:   BYTE        '6D;"S"
         ASCI        "AUVEGARDE?"
         WORD        0
MCHN:    BYTE        '6D;"C"
         ASCI        "HANGEMENTS?"
         WORD        0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MSRAC:   BYTE        '6D;"S"
         ASCI        "UR RACINE?"
         WORD        0
MRAC0:   BYTE        '6D;"R"
         ASCI        "AC1>"
         WORD        0
MRAC2:   BYTE        " ";"-";"-";">";0
MCHA:    BYTE        '6D;"C"
         ASCI        "HANGEMENT D'ACN'S ?"
         WORD        0
MACNR:   BYTE        '6D;"A";"C";"N";"=";0
XWOR%1:  VAL         0
MNOM:    BYTE        " ";"N";"O";"M";">";0
MSEQ:    BYTE        '6D;"E"
         ASCI        "RR. SEQ."
         WORD        0
MCHECK:  BYTE        '6D;"E"
         ASCI        "RR. CHECK"
         WORD        0
MRELIR:  ASCI        "  RELIRE CARTE"
         WORD        0
MASCI:   BYTE        '6D;"A"
         ASCI        "SCI INCORRECT..."
         WORD        0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MRETAR:  BYTE        '6D;'84;" ";"R"
         ASCI        "ETOUR ARRIERE"
         WORD        0
MSSARA:  BYTE        '6D;"S"
         ASCI        "ORTIE ZONE DE RECH SUITE A RETOUR ARRIERE"
         WORD        0
MDEF:    BYTE        '6D;0
         ASCI        "    EN DEFAUT" < BLOC DKU EN DEFAUT.
         WORD        0
MRECH:   BYTE        '6D;"R"
         ASCI        "ECHERCHE?"
         WORD        0
MNTR:    BYTE        '07;" ";'6D;"N"
         ASCI        "OM NON TROUVE"
         BYTE        '07;0
MNOMR:   BYTE        '6D;"N";"O";"M";"=";0
MPDR:    ASCI        "  NON RESTAURE"
         WORD        0
XWOR%1:  VAL         0
         IF          DIALOG,,,XWOR%1
MTMPO:   BYTE        '07;'0D;'07;0   < MESSAGE DE TEMPORISATION
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MTOUS:   BYTE        '6D;"D"
         ASCI        "E T OU S ?"
         WORD        0
MQFR:    BYTE        '6D;"Q";"F";"R";"=";0
                                     < QUANTA DU FICHIER DE RESTAURATION ?
MQDKD:   BYTE        '6D;"Q";"D";"="
QDKD:    BYTE        0;0             < QUANTA DE DUMP EN ASCI
MQDKR:   BYTE        '6D;"Q";"R";"="
QDKR:    BYTE        0;0             < QUANTA DE RESTAURATION EN ASCI
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MASD:    BYTE        '6D;"A"         < ADRESSE DEBUT DKU
         ASCI        "S DEB="
         WORD        0
MASFIN:  BYTE        '6D;"A"
         ASCI        "S FIN="
         WORD        0
MCLEF2:  BYTE        '6D;"C"
         ASCI        "LEF ON"
         WORD        0
MCLEF1:  BYTE        '6D;"C"
         ASCI        "CLEF="
         WORD        0
MSTDKU:  BYTE        '6D;"M"
         ASCI        "ULTIPLE?"
         WORD        0
XWOR%1:  VAL         0
MINHD:   BYTE        '6D;"R"
         ASCI        "EST DK INHIBEE"
         WORD        0
MACTD:   BYTE        '6D;"R"
         ASCI        "EST DK ACTIVE"
         WORD        0
MOK:     BYTE        " ";" ";"O";"K";"?";0
MTRS:    BYTE        '6D;"T"
         ASCI        "ROP DE SECTEURS"
         WORD        0
         IF          ORDI-"T",XWOR%1,,XWOR%1
MDATE:   BYTE        '6D;'84;" ";"D"
         ASCI        "ATE DUMP= "
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MDATE:   BYTE        '6D;'83;" ";" "
XWOR%1:  VAL         0
DATE:    ASCI        "  /  /     /  /  "
         $EQU        $-1
         BYTE        " ";0
MACN:    BYTE        '6D;"A"
         ASCI        "CN DIFFERENTS, CONTINUER?"
         WORD        0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MACNC:   BYTE        '6D;"A"
         ASCI        "CNC="
         WORD        0
MQACN:   BYTE        '6D;"A";"C";"N";"=";0
MPACN:   BYTE        '6D;'84;" ";"P"
         ASCI        "AS D'ACN, ACN COURANT SUPPOSE"
         WORD        0
MERC:    BYTE        '6D;"E"
         ASCI        "RREUR CHAINAGE"
         WORD        0
MERDMI:  BYTE        '6D;"D"
         ASCI        "UMP INCOMPLET"
         WORD        0
MPERD:   BYTE        '6D;"P"
         ASCI        "ERDUS "
MPERDD:  DZS         2               < NOMBRE DE DUMPS.
         ASCI        " DUMPS, "
MPERDF:  DZS         2               < NOMBRE DE FICHIERS.
         ASCI        " FICHIERS"
         WORD        0
XWOR%1:  VAL         0
<
<        AUTRES MESSAGES
<
MACK:    BYTE        "K"+'80         < MESSAGE DE SYNCHRO 'ACK'. BIEN RECU.
MSYNC:   BYTE        "S"+'80         < MESSAGE DE RESYNCHRO.MAL RECU.
         IF          ORDI-"S",XWOR%1,,XWOR%1
MLGSYS:  ASCI        "!L :SY"        < POUR LOGON :SYS.
         BYTE        "S";'04
MLGSYF:  EQU         $
MCDA:    ASCI        "!CDA"
         BYTE        '04
FMCDA:   EQU         $
XWOR%1:  VAL         0
<
<        TABLES POUR PUNCH
<
MSK1:    BYTE        'FF;'E0;'FC;'FF;'80;'F0;'FE;'FF;'C0;'F8;'FF
SHF1:    BYTE        8;0;16-3;16-6;2;16-1;16-4;16-7;1;16-2;16-5
SHF2:    BYTE        0;5;2;0;7;4;1;0;6;3;0
<
         COMMON
COM:     EQU         $
ASS:     ASCI        "!ASSIGN "      < ASSIGNATION/DESASSIGNATION
ASSUL:   ASCI        "0="            < UL
ASS1:    DZS         1
ASS2:    DZS         LNOM+1
         BYTE        '04             < EOT
ASS3:    ASCI        "O,"
ASS4:    ASCI        "N,"
ASS5:    BYTE        "C";"R";"1";'04
ASS6:    ASCI        "VI"
ASS61:   BYTE        0;'04
ASS7:    BYTE        "I";'04
ASSS:    BYTE        "S";'04
         IF          ORDI-"S",XWOR%1,,XWOR%1
ASSD:    ASCI        "D-"
ASST:    BYTE        "M";"T";"1";'04
XWOR%1:  VAL         0
         IF          ORDI-"T",XWOR%1,,XWOR%1
ASSR:    BYTE        "R";'04
XWOR%1:  VAL         0
CCMP:    DZS         1               < COMPTEUR DE COMPACTAGE (EN
                                     < L'OCCURRENCE DECOMPACTAGE)
TYPRST:  DZS         1               < TYPE DE RESTAURATION
                                     < =0  LIGNE VISU
                                     < =-1 CARTES
                                     < =1  FICHIER
         IF          ORDI-"S",XWOR%1,,XWOR%1
                                     < =2  DKU
IDELAR:  DZS         1               < INDICATEUR "DELETE AND REST":
                                     < = 0 : NON,
                                     < =+1 : OUI, OPTION 'DELETE & REST' ACTIVE,
                                     < =-1 : OUI, OPTION 'DELETE SEUL'...
NBEND:   DZS         1               < NOMBRE D'ENTITES N'AYANT PU ETRE DELETEES
                                     < L'OPTION "DELETE AND REST" ETANT ACTIVE.
TRAV:    DZS         1
IRESTF:  WORD        0               < INDICATEUR DE RESTAURATION FICHIER:
                                     < A 1 IL INDIQUE QUE L'ON EST EN TRAIN
                                     < DE RESTAURER UN FICHIER. EXPLOITE EN
                                     < CAS DE SECTEUR ILLISIBLE SUR DKU
                                     < LORS D'UNE RESTAURATION MULTIPLE.
IRETAR:  WORD        0               < INDICATEUR DE RETOUR ARRIERE POUR
                                     < RESTAURATION DKU
                                     < =0 : RETOUR ARRIERE AUTORISE
                                     <      (PREMIER RETOUR ARRIERE)
                                     < #0 : RETOUR ARRIERE NON AUTORISE.
IRECH:   WORD        0               < INDICATEUR DE MODE RECHERCHE:
                                     < = 0 : MODE HABITUEL.
                                     < # 0 : MODE RECHERCHE.
                                     < NOTA: LE MODE RECHERCHE N'EST POSSIBLE
                                     < QU'EN RESTAURATION DKU MULTIPLE.
         IF          ORDI-"S",XWOR%1,,XWOR%1
IACN:    DZS         1               < INDICATEUR "ACN RENCONTRE". UTILISE
                                     < EN CAS DE MODE RECHERCHE:
                                     < = 0 : ACN NON RENCONTRE,
                                     < = 1 : ACN RENCONTRE. DANS CE DERNIER
                                     < CAS, L'INDICATEUR 'IEGACN' EST
                                     < POSITIONNE (CF. CI-DESSOUS).
IEGACN:  DZS         1               < INDICATEUR "EGALITE ACN'S" ENTRE ACN
                                     < COURANT ET ACN RENCONTRE ('IACN'=1):
                                     < = 0 : EGAUX,
                                     < < 0 : ACN COURANT < ACN RENCONTRE,
                                     < > 0 : ACN COURANT > ACN RENCONTRE.
ICHACN:  DZS         1               < INDICATEUR DE CHANGEMENT D'ACN'S :
                                     < = 0 : CHANGEMENT AUTOMATIQUE,
                                     < = 1 : CHANGEMENT (A CHAQUE RUPTURE SUR
                                     < ACN SERA PROPOSE DE PRCISER UN
                                     < NOUVEL ACN DE RESTAURATION).
XWOR%1:  VAL         0
IFINR:   WORD        0               < INDICATEUR FIN DE RECHERCHE
                                     < = 0 : CE N'EST PAS LA FIN,
                                     < # 0 : C'EST LA FIN DE RECHERCHE.
                                     < CET INDICATEUR N'A DE SENS QU'EN MODE
                                     < RECHERCHE.
IEXEC:   WORD        0               < INDICATEUR DE MODE 'EXECUTE' (EXECUTION
                                     < D'IEM-PROGRAMME RESTAURE)
XWOR%1:  VAL         0
IPRR1:   DZS         1               < INDICATEUR 1ER READ DE 1 CAR SUR
                                     < PAGE VIRTUELLE
ICHN:    DZS         1               < INDICATEUR DE CHANGEMENTS:
                                     < = 0 : PAS DE CHANGEMENTS,
                                     < = 1 : CHANGEMENTS,
                                     < =-1 : CHANGEMENTS DE NOMS SUR RACINE.
IRCARD:  DZS         1               < INDICATEUR READ ACTIF/INACTIF
                                     < SUR CARTES
                                     < =0 ACTIF   #0 INACTIF
ISGFO:   DZS         1               < INDICATEUR SGF OUTPUT ACTF/
                                     < INACTIF
                                     < =0 ACTIF    #0 INACTIF
IDKO:    EQU         ISGFO           < INDICATEUR DK OUTPUT ACTIF/INACTIF
                                     < =0 ACTIF    #0 INACTIF
<
<        ATTENTION AU RECOUVREMENT ISGFO/IDKO
<
QUANDP:  WORD        0               < QUANTA UTILISE LORS DU DUMP DK
QUANRS:  WORD        0               < QUANTA A UTILISER LORS DE LA
                                     < RESTAURATION DK
NBSECD:  WORD        0               < NOMBRE DE SECTEURS AU DUMP DK
NBSECR:  WORD        0               < NOMBRE DE SECTEURS A LA RESTAURATION DK
NBREST:  WORD        0               < NOMBRE DE SECTEURS DE 128 MOTS RESTANT
                                     < A RESTAURER (DE 0 A 2)
                                     < DIFFERENT DE 0 DANS LE CAS SUIVANT:
                                     < RESTE DE ( NBSECD / QUANRS ) # 0
REP:     DZS         1               < REPONSE
LPC:     WORD        LPAC*2          < LONG OCT PAGE SI CARTES
LPF:     WORD        LPAF*2          < LONG OCT PAGE SI FICHIER
         IF          LPAC-LPAV,,XWOR%1,
LPV:     WORD        LPAV*2          < LONG OCT PAGE SI VISU
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
LPD:     WORD        LPAD*2          < LONG OCT PAGE SI DKU
LPM:     WORD        LPAM*2          < LONGUEUR OCT. PAGE VIRT. SI CDA.
LMPM:    WORD        LPAM            < LONGUEUR MOTS PAGE VIRT. SI CDA.
ADCDA:   WORD        ADDCDA          < ADRESSE DEBUT ZONE CDA UTILISEE.
STDKU:   WORD        0               < 0 : RESTAURATION NORMAL DKU,
                                     < 1 : RESTAURATION MULTIPLE SUR DKU,
                                     <     VOIR A CE SUJET 'DUMP'...
NERDKU:  WORD        0               < NOMBRE D'ERREURS IRRECUPERABLES DKU.
                                     < EN RESTAURATION DKU MULTIPLE, DONNE
                                     < LE NOMBRE DE DUMPS PERDUS, C'EST-A-
                                     < DIRE N'AYANT PU ETRE EXPLOITES.
NBDELF:  WORD        0               < NOMBRE DE DELETE DE FICHIERS EN COURS
                                     < DE RESTAURATION, SUITE A ERREURS DKU
                                     < LORS DE RESTAURATION MULTIPLE.
         BYTE        0;"!";"L";" "   < POUR LOGON SOUS ACN COURANT.
ACNC:    DZS         2               < ACN COURANT.
         BYTE        '04;'04         < DEUX EOT CAR L'UTILISATEUR PEUT
                                     < ECRASER LE PREMIER (CF: DEMANDE
                                     < D'ACN).
         BYTE        0;"!";"L";" "   < POUR LOGON SOUS ACN D'ENTREE.
ACNENT:  DZS         2               < ACN D'ENTREE.
         BYTE        '04
XWOR%1:  VAL         0
LGN:     DZS         1               < LONGUEUR DU NOM FICHIER OU ITEM
                                     < A RESTAURER
LGN1:    DZS         1               < LONGUEUR DU NOUVEAU NOM FICHIER
                                     < OU ITEM SOUS LEQUEL IL DOIT
                                     < ETRE RESTAURE
<
<        RELAIS DIVERS
<
APILM1:  WORD        PILE-1          < PILE POUR K
AM:      WORD        M               < POUR S/P ENVOI
AXNOM:   WORD        NOM,X           < NOM EN COURS
         IF          ORDI-"S",XWOR%1,,XWOR%1
AONOM:   WORD        NOM-ZERO*2
AXNOMR:  WORD        NOMR,X          < RELAI D'ACCES AUX CARACTERES DE
                                     < 'NOMR' (NOM RECHERCHE).
LGNR:    WORD        0               < LONGUEUR DE 'NOMR', EOT INCLUS.
XWOR%1:  VAL         0
AXASS2:  WORD        ASS2,X          < POUR MOUVMT NOM
ALT:     DZS         1               < POUR INFOS DEVANT VALEUR
                                     < (LONGUEUR TOTALE)
AOVAL:   DZS         1               < NOM+VALEUR
AXVAL:   DZS         1               < RELAI INDEXE MOT NOM+VALEUR
AXTRAV:  WORD        ZERO,X
AOPAG:   DZS         1               < ADR OCT DEB PAGE VIRT
AOFPAG:  DZS         1               < ADR OCT FIN PAGE VIRT
AOPAG0:  WORD        PAG0            < ADR OCT DEB PAG VIRT SI CARTES
AOPAG2:  WORD        PAG2            < IDEM SI FICHIER
         IF          ORDI-"S",XWOR%1,,XWOR%1
ADPAG0:  WORD        FIN             < ADRESSE MOT DEBUT PAGE VIRTUELLE
ADKU1:   WORD        NB1DKU          < 1ER BLOC POSSIBLE SUR DKU
ADKU2:   WORD        NBFDKU          < ET DERNIER
N0BDKU:  WORD        0               < NUMERO DU BLOC COURANT SUR DKU
DEBDIC:  WORD        0               < 'DEBDIC' ET 'FINDIC' DEFINISSENT
FINDIC:  WORD        0               < L'ESPACE DKU SUR LEQUEL ON DEVRA FAIRE
                                     < LA RECHERCHE DICHOTOMIQUE (EN MODE
                                     < RECHERCHE, VOIR 'IRECH')
DICHO1:  WORD        0               < 'DICHO1' ET 'DICHO2' DEFINISSENT
DICHO2:  WORD        0               < L'ESPACE COURANT SUR LEQUEL S'EFFECTUE
                                     < CETTE RECHERCHE DICHOTOMIQUE.
DICHOM:  WORD        0               < 'MILIEU' DE LA ZONE DE RECHERCHE
                                     < DICHOTOMIQUE.
DICHM1:  WORD        0               < 'DICHOM'-1 ('DICHOM PRECEDENT)
                                     < PERMET DE DETECTER UNE RECHERCHE
                                     < DICHOTOMIQUE INFRUCTUEUSE.
<
<        ATTENTION AU RECOUVREMENT 'NVC' / 'N0BDKU'.
<
NBV:     WORD        NBVER           < NOMBRE DE VERROUS EN CDA.
NVC:     EQU         N0BDKU          < NUMERO DU VERROU COURANT ( DE 0 A ...).
XWOR%1:  VAL         0
PPG:     DZS         1               < POINTEUR OCT PAGE VIRTUELLE
ANOMFS:  WORD        NOMFS           < ADRESSE DU NOM DU FICHIER DE
                                     < RESTAURATION
         IF          ORDI-"S",XWOR%1,,XWOR%1
ADMM2:   WORD        DMMEM+2         < ADRESSE TAILLE OCTETS DANS DEMANDE
                                     < DE MEMOIRE DU 'RUNNER'.
T800:    WORD        '800            < 2K OCTETS.
T1000:   WORD        '1000           < 4K OCTETS.
XWOR%1:  VAL         0
ABC:     WORD        BC              < ADR BUFFER CARTE
AXBC:    WORD        BC,X            < ADR X BUFFER CARTE
AFBC:    WORD        FBC             < ADR FIN BUFFER CARTE
AXBCM1:  WORD        BC-1,X          < RELAI INDEXE BC-1
ACHECK:  WORD        BC+75           < ADRESSE CHECK CARTE
PBC:     DZS         1               < POINTEUR BUFFER CARTE
NUMC:    DZS         1               < NUMERO CARTE EN COURS
NBM11:   DZS         1               < INDEX MODULO 11 POUR LECTURE
                                     < CARACTERE SUR CARTE
AXMSK1:  WORD        MSK1,X          < TABLE PUNCH
AXSHF1:  WORD        SHF1,X          < IDEM
AXSHF2:  WORD        SHF2,X          < IDEM
SUI:     WORD        '6EC0           < INDICATEURS MOT SUIVANT BUFFER
                                     < PUNCH
DIX:     WORD        10
DIXMIL:  WORD        10000           < POUR NUM CARTES MODULO 10000
SAVK:    WORD        0               < SAUVEGARDE DE 'K' POUR CERTAINES
                                     < REPRISES DELICATES
AODATE:  WORD        DATE-ZERO*2     < ADRESSE OCTET DATE POUR SON EDITION.
         IF          ORDI-"S",XWOR%1,,XWOR%1
AOQDKD:  WORD        QDKD-ZERO*2     < ADRESSE OCTET QUANTA DUMP ASCI.
AOQDKR:  WORD        QDKR-ZERO*2     < ADRESSE OCTET QUANTA REST ASCI.
                                     < (POUR RESTAURATION DK)
XWOR%1:  VAL         0
<
< ATTENTION AUX RECOUVREMENTS PBV/PBC  ABV/ABC
<
ABV:     EQU         ABC             < ADRESSE MOT BUFFER VISU
PBV:     EQU         PBC             < POINTEUR BUFFER VISU
<
<        DEMANDES PAR SVC
<
         IF          ORDI-"S",XWOR%1,,XWOR%1
REPOUI:  DZS         2
OUI:     ASCI        "OU"
DMOUI:   WORD        '0101           < DEMANDE REPONSE.
         WORD        REPOUI-ZERO*2
         WORD        3
XWOR%1:  VAL         0
DMASS:   WORD        '0002           < ASSIGNATION/DESASSIGNATION
         WORD        ASS-ZERO*2
         WORD        ASS3-ASS*2
DMOUT:   WORD        '0202           < ENVOI MESSAGE
         DZS         1
         DZS         1
         IF          ORDI-"T",XWOR%1,,XWOR%1
MACN1:   BYTE        '6D;'84;" ";"A"
         ASCI        "CN DUMP="
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
MACN1:   ASCI        "  "
XWOR%1:  VAL         0
ACND:    DZS         2               < ACN DE DUMP.
MACNF:   EQU         $
DMAFAC:  WORD        '0202           < AFFICHAGE DE L'ACN DE DUMP.
         WORD        MACN1-ZERO*2
         WORD        MACNF-MACN1*2
AOACND:  WORD        ACND-ZERO*2     < RELAI OCTET SUR L'ACN DE DUMP.
         IF          ORDI-"S",XWOR%1,,XWOR%1
DMOUTA:  WORD        '0202           < AFFICHAGE ACN COURANT.
         WORD        ACNC-ZERO*2
         WORD        4
DMACN:   WORD        '0101           < DEMANDE ACN.
         WORD        ACNC-ZERO*2
         WORD        5
DMLGN:   WORD        '0002           < DEMANDE DE LOGON.
         WORD        ACNC-ZERO*2-3
         WORD        8
DMLGSY:  WORD        '0002           < DEMANDE DE LOGON :SYS.
         WORD        MLGSYS-ZERO*2
         WORD        MLGSYF-MLGSYS*2
DMLGE:   WORD        '0002           < LOGON SOUS ACN D'ENTREE.
         WORD        ACNENT-ZERO*2-3
         WORD        8
XWOR%1:  VAL         0
DMREP:   WORD        '0101           < DEMANDE REPONSE 1 CAR
         WORD        REP-ZERO*2
         WORD        1
DMREPF:  WORD        '0101           < DEMANDE NOM FICHIER
AOASS2:  WORD        ASS2-ZERO*2
         WORD        LNOM*2
<
DMGETM:  WORD        '0004           < GET MEMOIRE
         WORD        0
ESPACE:  DZS         1               < ESPACE ACTUELLEMENT ALLOUE
DMSTN:   WORD        '8402           < SGN  STORE NAME
         DZS         1
         DZS         1
         WORD        -1
DMCCI:   WORD        '0001           < RETOUR CCI
DMOPNK:  WORD        '0304           < SGF  OPEN NEW KEY
KEYN1:   DZS         1
KEYN2:   DZS         1
DMCLSK:  WORD        '0307           < SGF  CLOSE SAVE KEY
DMWBLC:  WORD        '0302           < SGF  WRITE BLOC
AOBUFF:  DZS         1               < BUFFER FICHIER OUTPUT
         WORD        128*2*QUANTA
DMRDC:   WORD        '0B08           < READ CARTE BINAIRE
         WORD        BC-ZERO*2
         WORD        NBCOL*2
DMOPNX:  WORD        '0B03           < OPEN NEXT KEY
DMCLSB:  WORD        '0B07           < CLOSE SAVE
DMRBLF:  WORD        '0B00           < READ BLOC AVEC OU SANS DELETE
         WORD        PAG0            < BUFFER FICHIER INPUT
         WORD        128*2*QUANTA
DMLVI:   WORD        '0B00           < LECTURE SANS ECHO SUR LIGNE
                                     < VISU
AOBV:    WORD        BV-ZERO*2
         WORD        LBV*2
DMWACK:  WORD        '0B02           < ENVOI 'ACK' VERS VISU EMETTRICE
         WORD        MACK-ZERO*2
         WORD        1
DMRACK:  WORD        '0B00           < READ 'ACK' DE VISU EMETTRICE
         WORD        REP-ZERO*2
         WORD        1
DMWSYN:  WORD        '0B02           < ENVOI DU CARACTERE DE RESYNCHRONISATION
         WORD        MSYNC-ZERO*2    < VERS LA VISU EMETTRICE SI LE DERNIER
         WORD        1               < BUFFER A ETE MAL RECU.
DMTMPO:  WORD        '0005           < TEMPORISATION.
         IF          ORDI-"T",XWOR%1,,XWOR%1
         WORD        0               < MOT UTILISABLE...
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
DMTMP2:  WORD        '0005           < TEMPORISATION 2 SECONDES.
XWOR%1:  VAL         0
         WORD        1               < 1 SECONDE.
         IF          ORDI-"S",XWOR%1,,XWOR%1
         WORD        2               < 2 SECONDES.
DMRDKU:  WORD        '8A00           < LECTURE SUR DKU.
         WORD        PAG0
         WORD        128*2*QUANTA
         DZS         1               < NUMERO DU BLOC
DMRAZ:   WORD        '0205           < ERASE ECRAN VISU.
DMNOMR:  WORD        '0101           < DEMANDE DU NOM A RECHERCHER (CF 'NOMR')
         WORD        NOMR-ZERO*2
         WORD        LNOM*2
XWOR%1:  VAL         0
DMBHTP:  WORD        '010A           < POUR DISCRIMINER BATCH/TP
         WORD        0
         WORD        1
         IF          ORDI-"T",XWOR%1,,XWOR%1
DMDLN:   WORD        '8302           < DELETE NOM+VALEUR DU FICHIER DE
                                     < RESTAURATION
         WORD        NOMFS-ZERO*2
         WORD        LNOM+1*2+1
         WORD        -1
XWOR%1:  VAL         0
MDKI:    BYTE        '6D;"D"
         ASCI        "K "
MAS:     BYTE        '6D;"A"
MASDR:   WORD        0               < "SD" / "SR"
MASAS:   WORD        0;0             < ADRESSE SECTEUR EN ASCI.
MASF:    EQU         $               < FIN ZONE 'MAS'.
DMDKI:   WORD        '0202           < AFFICHAGE NUMERO DE DISQUE
         WORD        MDKI-ZERO*2
         WORD        0
DMWAS:   WORD        '0202           < AFFICHAGE ADRESSE SECTEUR
         WORD        MAS-ZERO*2
         WORD        0
DMRAS:   WORD        '0101           < READ ADRESSE SECTEUR DEMANDEE
         WORD        MASAS-ZERO*2
         WORD        4
MNSDR:   BYTE        '6D;"N"
         WORD        0               < "SD" / "SR"
         WORD        0
         WORD        0
MNSD:    ASCI        "SD"
MNSR:    ASCI        "SR"
DMWNS:   WORD        '0202           < AFFICHAGE NOMBRE DE SECTEURS
         WORD        MNSDR-ZERO*2
         WORD        8
         IF          ORDI-"T",XWOR%1,,XWOR%1
DMWDK:   WORD        '0302           < WRITE 1 SECTEUR SUR DK
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
DMWDK:   WORD        '0002           < EN SOLAR, ON S'ASSIGNERA LE DK A
                                     < RESTAURER SOIT EN ASSIGNATION EXPLICITE
                                     < SOIT EN ASSIGNATION IMPLICITE (DK1/DKU).
XWOR%1:  VAL         0
         WORD        0               < ADRESSE OCTET BUFFER DK
         WORD        0               < LONGUEUR OCTET BUFFER DK
         WORD        0               < ADRESSE SECTEUR
DMASDK:  WORD        '0003           < CONNEXION/DECONNEXION DK<-->UL 3
         WORD        '0300           < UL ;  NSPDKI
         IF          ORDI-"S",XWOR%1,,XWOR%1
XIMPL:   VAL         3               < ADRESSE D'IMPLANTATION DU RUNNER.
ARUN:    WORD        XIMPL           < ADRESSE DU RUNNER.
                                     < DANS LE MODE "X" (EXECUTION ITEM-
                                     < PROGRAMME)
<        ATTENTION!  CE RELAI D'ACCES AU RUNNER DOIT ETRE BASE PAR 'C' !
<                    (CF LE S/P 'EXEC').
<
         LOCAL
LOC:     EQU         $
DMCDA:   WORD        '0002           < !CDA
         WORD        MCDA-ZERO*2
         WORD        FMCDA-MCDA*2
< CHANGEMENTS DE NOMS SUR RACINE.
LMRAC:   VAL         10*2            < LONGUEUR OCTETS MAX RACINE.
RAC0:    DZS         LMRAC+1/2       < RACINE A MODIFIER (+1: EOT).
RAC2:    DZS         LMRAC+1/2       < NOUVELLE RACINE (+1: EOT).
LRAC0:   DZS         1               < LONGUEUR OCTETS RAC0.
LRAC2:   DZS         1               < LONGUEUR OCTETS RAC2.
DMRAC0:  WORD        '0101           < GET RAC0.
         WORD        RAC0-ZERO*2
         WORD        LMRAC
DMRAC2:  WORD        '0101           < GET RAC2.
         WORD        RAC2-ZERO*2
         WORD        LMRAC
DMENN:   WORD        '0202           < EDITION NOUVEAU NOM.
         WORD        ASS2-ZERO*2
         DZS         1
AXRAC0:  WORD        RAC0,X
AXRAC2:  WORD        RAC2,X
XWOR%1:  VAL         0
<
<        RELAIS SOUS-PROGRAMMES
<
AENTR1:  WORD        ENTRY1          < ENTREE 1 DANS REST.
         IF          ORDI-"S",XWOR%1,,XWOR%1
AENTR2:  WORD        ENTRY2          < ENTREE 2 DANS REST (REPRISE SUR
                                     < DEFAUT DKU EN RESTAURATION MULTIPLE).
XWOR%1:  VAL         0
ARTCCI:  WORD        RTCCI           < RETOUR CCI
ADESAS:  WORD        DESAS           < DESASSIGNATION
         IF          ORDI-"S",XWOR%1,,XWOR%1
ATAD:    WORD        TAD             < TEST AND DELETE (MODE "DELETE
                                     < AND REST).
ADFPR:   WORD        DFPR            < DELETE (EVENTUEL) FICHIER PARTIEL-
                                     < LEMENT RESTAURE.
AARDLN:  WORD        ARDLN           < ASSIGN RELEASE ET DLN.
AEXEC:   WORD        EXEC            < PROGRAMME DE PREPARATION AU RUN,
ARVAS:   WORD        RVAS            < READ ET VALIDATION ADRESSE SECTEUR DKU.
AVALID:  WORD        VALID           < VALIDATION ADRESSE SECTEUR DKU PAR
                                     < RAPPORT AUX BORNES 'ADKU1' ET 'ADKU2'
                                     < DEFINISSANT L'ESPACE DKU ACCESSIBLE.
ACOMP:   WORD        COMP            < COMPARAISON NOM COURANT ('NOM') ET
                                     < NOM RECHERCHE ('NOMR') DANS LE CAS
                                     < DU MODE 'RECHERCHE'.
ATSTAC:  WORD        TSTAC           < TEST ACN DE LOGON INITIAL.
ASETV:   WORD        SETV            < SET VERROU COURANT 'NVC' EN CDA.
ARSETV:  WORD        RSETV           < RESET VERROU VOURANT 'NVC' EN CDA.
ATESTV:  WORD        TESTV           < TEST VERROU COURANT 'NVC' EN CDA.
XWOR%1:  VAL         0
AULB:    WORD        ULB             < VERIF UL 'B
ARITEM:  WORD        RITEM           < RESTAURATION ITEM
ARFICH:  WORD        RFICH           < RESTAURATION FICHIER
ARSTDK:  WORD        RSTDK           < RESTAURATION DISQUE
ARSTDA:  WORD        RSTDA           < RESTAURATION DE LA DATE DU DUMP.
ARSTAC:  WORD        RSTAC           < RESTAURATION DE L'ACN DU DUMP.
AEDN:    WORD        EDN             < EDITION NOM SUR VISU
AR1:     WORD        R1              < READ 1 CAR SUR PAGE VIRTUELLE
ALDC:    WORD        LDC             < LOAD CARACTERE PAGE VIRTUELLE
ARN:     WORD        RN              < READ N CAR SUR PAGE VIRTUELLE
ARPAGE:  WORD        RPAGE           < READ 1 PAGE VIRTUELLE
AGESTM:  WORD        GESTM           < GESTION ESPACE MEMOIRE
APRCH:   WORD        PRCH            < PROPOSITION CHANGEMENT NOMS
ACHN:    WORD        CHN             < CHANGEMENT DE NOM
ARCARD:  WORD        RCARD           < READ CARTE
AR1C:    WORD        R1C             < READ 1 CARACTERE SUR CARTE
AENVOI:  WORD        ENVOI           < ENVOI MESSAGE
AQREP:   WORD        QREP            < ENVOI QUESTION ET DEMANDE REPONSE
ACONVH:  WORD        CONVH           < CONVERSION ASCI --> BINAIRE
ACONVA:  WORD        CONVA           < CONVERSION BINAIRE --> ASCI
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
< DONNEES DE DECODAGE :
<
LCLEF::  VAL         16              < LONGUEUR DES CLEFS.
CLEF:    DZS         LCLEF/2
ACLEF:   WORD        CLEF,X          < RELAI D'ACCES A LA CLEF.
CLEFB:   DZS         LCLEF/2
ACLEFB:  WORD        CLEFB,X         < ACCES A LA CLEF DE DECODAGE.
DMCLEF:  WORD        '0101           < DEMANDE D'ENTREE DE LA CLEF.
         WORD        CLEF-ZERO*2
         WORD        LCLEF
ABUF:    WORD        0               < RELAI VARIABLE D'ACCES A LA PAGE
                                     < VIRTUELLE DKU.
AKOMP:   WORD        KOMP            < SOUS-PROGRAMME DE DECODAGE...
ICLEF:   WORD        0               < 0 : PAS DE DECODAGE...
<
< DONNEES D'ARRET :
<
CARALT:  WORD        0               < =0 : PAS DE CARACTERE D'ARRET,
                                     < =CODE ASCI ENTRE " " ET "@", ALORS
                                     <  LORSQU'UN CARACTERE IDENTIQUE EST REN-
                                     <  CONTRE DANS UN NOM (ITEM OU FICHIER),
                                     <  EN COURS DE RESTAURATION, ON SIMULE UN
                                     <  ALT-MODE AFIN D'ARRETER LA RESTAURA-
                                     <  TION...
         PAGE
         PROG
<
<        RUNNER A IMPLANTER EN ADRESSES BASSES ET QUI SE CHARGERA DE
<        'MOVER' ET LANCER L'ITEM-PROGRAMME A EXECUTER.
<
RUNNER:  EQU         $
         LB          0,W             < LOAD MOT.
         STB         0,L             < STORE MOT.
         ADRI        1,W             < AU SUIVANT.
         ADRI        1,L             < ...
         JDX         RUNNER
         SVC         0               < DEMANDE MEMOIRE.
         LRM         W
         WORD        '10             < ADRESSE DE RUN.
         BR          0,W
DMMEM:   WORD        '0004           < DEMANDE MEMOIRE.
         WORD        0               < INUTILISE.
         WORD        0               < TAILLE OCTETS (VALORISEE PAR 'EXEC')
RUNF:    EQU         $               < FIN DU RUNNER.
XWORK:   VAL         DMMEM-RUNNER
XMEM:    EQU         ZERO+XIMPL+XWORK< ADRESSE DEMANDE DE MEMOIRE.
XWOR%1:  VAL         0
         PAGE
         PAGE
         PROG
         WORD        COM+128
ENTRY1:  EQU         $
<
<        E N T R Y   1   D A N S   R E S T   ( I N I T I A L E . . . )
<
<        INITIALISATIONS
<
         LRP         C
         LA          -1,C
         LR          A,C
         LA          APILM1
         LR          A,K
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LRM         L
         WORD        LOC+'80         < 'L' BASE LE 'LOCAL'.
         WORD        '1E25           < POUR SAUVER L'ACN D'ENTREE.
         STA         ACNENT
         STB         ACNENT+1
XWOR%1:  VAL         0
         IF          ORDI-"T",XWOR%1,,XWOR%1
         LA          ARTCCI          < SI ALT-MODE --->CCI
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
< EN SOLAR: INITIALISATION DE L'INDICATEUR "DELETE AND REST"...
REST0:   EQU         $
         STZ         NBEND           < NOMBRE D'ENTITES N'AYANT PU ETRE DELETEES
                                     < RECOIT 0 A PRIORI.
         STZ         IDELAR          < MODE NON DELETE A PRIORI.
         STZ         CARALT          < PAS DE CARACTERE D'ARRET A PRIORI...
         LAI         MDELAR-M
         BSR         AENVOI          < ENVOI QUESTION.
         LAD         DMOUI           < LA REPONSE DOIT ETRE "OUI"/"OUD" EN TOUTE
         SVC         0               < LETTRES, SINON C'EST NON.
         LA          REPOUI
         CP          OUI
         JNE         REST1
         LBY         REPOUI+1
         CPI         "D"             < EST-CE LE DELETE SEUL ???
         JE          REST2X          < OUI...
         CPI         " "             < EST-CE UN CODE D'ARRET ???
         JL          REST1X          < NON...
         CPI         '40             < EST-CE UN CODE D'ARRET ???
         JG          REST1X          < NON...
         STA         CARALT          < OUI, ON LE MEMORISE...
         JMP         REST1           < ET C'EST TOUT...
REST2X:  EQU         $
         DC          IDELAR          < OUI : IDELAR=-1 (DELETE EUL).
         LAI         MDD-M
         JMP         REST1Y          < ET ON VA LE DIRE...
REST1X:  EQU         $
         CPI         "I"             < "OUI" ???
         JNE         REST1           < NON...
         IC          IDELAR          < OUI : IDELAR=+1 (DELETE & REST).
         LAI         MDR-M           < ON PREVIENT !
REST1Y:  EQU         $
         BSR         AENVOI
REST1:   EQU         $
         LRM         A               < SI ALT-MODE --> 'RFINF'.
         WORD        RFINF
XWOR%1:  VAL         0
         WORD        '1EB5
         WORD        '1E35
         STA         ESPACE          < ESPACE ACTUELLEMENT ALLOUE
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LRM         A
         WORD        128*2*QUANTA    < EN SOLAR, LONGUEUR BLOC SGF
         STA         DMWBLC+2        < A PRIORI POUR LES FICHIER
                                     < A RESTAURER
         STA         DMRBLF+2        < AINSI QUE POUR LE FICHIER DE RESTAURATION
XWOR%1:  VAL         0
         BSR         AULB            < ASSIGNATION UL RESTAURA
                                     < TION ET POSITIONNEMENT
                                     < TYPRST ET FIXATION EN CONSEQU
                                     < ENCE DE LA LONGUEUR DE PAGE
                                     < VIRTUELLE ET DONC DES ADRESSES
                                     < DES ZONES IMPLANTEES DERRIERE
         LAI         0
         BSR         AGESTM          < ALLOCATION MEMOIRE POUR COMMENCER
         BSR         APRCH           < PROPOSITION CHANGEMENTS DE NOMS
                                     < CE S/P POSITIONNE ICHN
RBCLX:   EQU         $               < BOUCLE EN MODE MULTIPLE...
         STZ         IPRR1           < PREMIER READ=OUI
         IF          ORDI-"S",XWOR%,,XWOR%
         STZ         IACN            < INDICATEUR "ACN RENCONTRE" = NON;
                                     < UTILISE EN CAS DE MODE "RECHERCHE".
         CPZ         IRECH           < TEST MODE RECHERCHE.
         JE          RBCL1
         CPZ         IFINR           < EST-CE UNE FIN DE RECHERCHE, AUTREMENT
                                     < DIT, FAUT-IL PROPOSER UNE NOUVELLE
                                     < RECHERCHE OU POURSUIVRE CELLE EN COURS?
         JE          RBCL3           < POURSUIVRE LA RECHERCHE EN COURS.
RBCL6:   EQU         $
<
< PROPOSER UNE NOUVELLE RECHERCHE.
<
         CPZ         ICHACN          < TEST CHANGEMENT ACN DEMANDE ?
         JE          RBCL7
         BSR         ATSTAC          < TEST ACN DE LOGON INITIAL,
         JE          $+2             < QUI DOIT ETRE :SYS, SINON...
         ACTD
RBCL8:   EQU         $
         LAI         MACNR-M         < DEMANDE D'ACN DE RECHERCHE.
         BSR         AENVOI
         LAD         DMACN
         SVC         0
         LAD         DMLGN           < SOUS LEQUEL ON FAIT LOGON.
         SVC         0
         JNE         RBCL8           < ACN INCORRECT.
RBCL7:   EQU         $
         LAI         MNOMR-M         < DEMANDER LE NOM A RECHERCHER.
         BSR         AENVOI
         LAD         DMNOMR
         SVC         0
         WORD        '1E35           < 'B' <-- 'BOX'; 'A' DETRUIT.
         STB         LGNR            < LONGUEUR NOM A RECHERCHER, EOT INCLUS.
         LR          B,A
         CPI         1               < TEST NOM VIDE.
         JE          RBCL2           < C'EST FINI, FIN DE TRAVAIL.
<
< NOUVELLE RECHERCHE, REINITIALISER DICHO1' ET 'DICHO2', BORNES COURANTES
< DE LA RECHERCHE DICHOTOMIQUE, AINSI QUE 'IFINR', L'INDICATEUR DE FIN
< DE RECHERCHE.
<
         LA          DEBDIC
         STA         DICHO1
         LA          FINDIC
         STA         DICHO2
         STZ         IFINR           < FIN DE RECHERCHE = NON.
         LAI         -1
         STA         DICHM1          < ADRESSE SECTEUR "IMPOSSIBLE"; VALEUR
                                     < D'INITIALISATION DE 'DICHM1' QUI
                                     < CONTIENT LE 'DICHOM' "PECEDENT". CECI
                                     < PERMET DE SAVOIR SI UNE RECHERCHE
                                     < EST INFRUCTUEUSE ("PATINAGE!").
RBCL3:   EQU         $
<
< POURSUITE DE LA RECHERCHE COURANTE.
<
         LA          DICHO1          < POSITIONNEMENT DE 'DMRDKU+3' (ADRESSE
         SLRD        16+1            < DKU COURANTE) A ENVIRON DICHO1+DICO2/2.
         LA          DICHO2
         SLRS        1
         ADR         B,A
         STA         DICHOM          < ON VA AJOUTER 1 A CETTE ADRESSE
         LA          DICHO1          < SI DICHO1 ET DICHO2 SONT IMPAIRES.
         AND         DICHO2
         TBT         15
         JNC         RBCL4
         IC          DICHOM          < + 1.
RBCL4:   EQU         $
         LA          DICHOM
         CP          DICHM1          < 'DICHOM' EST-IL EGAL AU 'DICHOM' PRCEDENT
                                     < SI C'EST LE CAS, C'EST QUE LA RECHERCHE
                                     < COURANTE EST INFRUCTUEUSE...
         JNE         RBCL5
         LAI         MNTR-M          < LA RECHERCHE COURANTE EST INFRUCTUEUSE,
         BSR         AENVOI          < ON LE SIGNALE.
         JMP         RBCL6           < VERS PROPOSITION D'UNE NOUVELLE
                                     < RECHERCHE.
RBCL5:   EQU         $
         STA         DICHM1          < POUR LE PROCHAIN TEST...
         STA         DMRDKU+3        < ADRESSE SECTEUR COURANTE DKU.
         STZ         IRETAR          < RE-AUTORISATION RETOUR ARRIERE.
         STZ         NERDKU          < RE-INITIALISATION NB ERREURS DKU.
         STZ         NBDELF          < RE-INITIALISATION NOMBRE DE FICHIERS
                                     < PARTIELLEMENT RESTAURES DELETES SUITE
                                     < AUX ERREURS DKU IRRECUPERABLES.
RBCL1:   EQU         $
         BSR         AR1
         JANE        RCBLX1
         STZ         TRAV
         BSR         AR1
         JANE        RCBLX2
RBCL2:   EQU         $
         STZ         STDKU           < DUMP VIDE, ON ARRETE LE MODE MULTIPLE...
         LAD         DMRAZ           < ERASE ECRAN.
         SVC         0
         LA          NERDKU          < NOMBRE DE DUMPS PERDUS.
         LRM         Y
         WORD        MPERDD-ZERO*2
         BSR         ACONVA          < EDITION ASCI.
         LA          NBDELF          < DONT NOMBRE DE FICHIERS PERDUS.
         ADRI        MPERDF-MPERDD*2,Y
         BSR         ACONVA          < EDITION ASCI.
         LAI         MPERD-M         < ENVOI DU MESSAGE.
         BSR         AENVOI
         JMP         RFIN            < C'EST FINI...
XWOR%:   VAL         0
RBCL:    EQU         $
<
<        BOUCLE DE RESTAURATION
<
         BSR         AR1
RCBLX1:  EQU         $
         CPI         'DA             < DATE ?
         JE          RDA1
         CPI         'AC
         JE          RAC1
         CPI         'DF             < DEBUT FICHIER ?
         JE          RF1
         CPI         'DD             < DEBUT DISQUE ?
         JE          RD1
         IF          ORDI-"T",XWOR%1,,XWOR%1
         SWBR        A,L
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         SWBR        A
         STA         TRAV
XWOR%1:  VAL         0
         BSR         AR1
RCBLX2:  EQU         $
         IF          ORDI-"T",XWOR%1,,XWOR%1
         ORR         L,A
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         OR          TRAV
XWOR%1:  VAL         0
         JAE         RFIN            < SI '0000 --> FIN
         BSR         ARITEM          < RESTAUR ITEM
         JMP         RBCLF
RF1:     EQU         $
         BSR         ARFICH          < RESTAUR FICH
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPZ         IRECH           < TEST MODE RECHERCHE
         JNE         RFIN            < EN EFFET, EN MODE 'RECHERCHE',
                                     < ON PEUT AVOIR ABANDONNE
                                     < BRUTALEMENT UNE RESTAURATION FICHIER
                                     < (SI NOM RENCONTRE # NOM RECHERCHE).
                                     < IL FAUT DONC SORTIR TOUT DE SUITE
                                     < DE LA BOUCLE DE RESTAURATION DANS
                                     < LAQUELLE NOUS SOMMES.
XWOR%1:  VAL         0
         JMP         RBCLF
RDA1:    EQU         $
         BSR         ARSTDA          < RESTAURATION DATE.
         JMP         RBCLF
RAC1:    EQU         $               < RESTAURATION DE L'ACN DU DUMP.
         BSR         ARSTAC
         JMP         RBCLF
RD1:     EQU         $
         BSR         ARSTDK          < RESTAURATION DISQUE
RBCLF:   EQU         $
         JMP         RBCL            < AU SUIVANT
         IF          ORDI-"S",XWOR%1,,XWOR%1
RBCLXX:  JMP         RBCLX           < SAUT > 128 !
XWOR%1:  VAL         0
<
<        FIN DU PROGRAMME
<
RFIN:    EQU         $
         CPZ         TYPRST          < OPERATIONS DE FIN, EN FONCTION
                                     < DU TYPE DE RESTAURATION
         JE          RFIN9           < RESTAURATION VISU: RIEN A FAIRE
         JL          RFINC           < RESTAURATION CARTES
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LA          TYPRST
         CPI         1
         JNE         RFIN9           < DKU OU CDA, RIEN A FAIRE.
XWOR%1:  VAL         0
                                     < RESTAURATION FICHIER: IL FAUT
                                     < EVENTUELLEMENT FAIRE UN ASSIGN
                                     < RELEASE ET UN DLN SUR LE FICHIER
                                     < DE RESTAURATION
         LA          DMRBLF          < DEMANDE DE READ BLOC
         TBT         15              < C'ETAIT LECTURE-DELETE ?
         JNC         RFIN9           < NON, RIEN A FAIRE
         IF          ORDI-"T",XWOR%1,,XWOR%1
         LAI         "B"             < OUI, FAIRE ASSIGN B=R.
         STBY        ASSUL
         LA          ASSR
         STA         ASS1
         LAD         DMASS           < !ASSIGN B=R
         SVC         0
         JE          $+2
         ACTD
         LAD         DMDLN           < SGN: DELETE NOM+VALEUR
         SVC         0
         JE          $+2
         ACTD
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LRM         A,B,X
         WORD        NOMFS           < NOM DU FICHIER DE RESTAURATION A DELETER.
         WORD        ASS2            < POUR LE S/P 'ARDLN'.
         WORD        LNOM+1
         MOVE                        < 'ASS2' CONTIENT LE NOM.
         LAD         DMLGSY
         SVC         0               < ON TENTE A PRIORI DE PASSER SOUS
                                     < :SYS, CAR EN EFFET SI CELA EST POSSI-
                                     < BLE, LE FICHIER A DETRUIRE LUI APPAR-
                                     < TIENT...
         LAI         "B"             < UNITE LOGIQUE.
         BSR         AARDLN          < DELETE DU FICHIER.
XWOR%1:  VAL         0
         JMP         RFIN9
RFINC:   EQU         $               < RESTAURATION CARTES
                                     < ON S'ASSURE QUE TOUTES
                                     < LES CARTES ONT BIEN ETE LUES
                                     < (ENCHAINEMENTS EVENTUELS DE
                                     < RESTAURATIONS)
RFIN1:   EQU         $
         BSR         ARCARD          < READ CARD
         CPZ         IRCARD          < READ CARD TOUJOURS ACTIF?
         JE          RFIN1           < OUI, CONTINUER
RFIN9:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         STDKU           < MULTIPLE ???
         JNE         RBCLXX          < OUI, ON RECOMMENCE...
XWOR%:   VAL         0
         LAI         0
         BSR         AGESTM          < ON RELACHE L'ESPACE INUTILE
         IF          ORDI-"S",XWOR%1,,XWOR%1
RFINF:   LAD         DMLGE           < LOGON SOUS ACN INITIAL,
         SVC         0               < SYSTEMATIQUE, ET TANT PIS POUR
                                     < LE CODE RETOUR...
XWOR%1:  VAL         0
         BR          ARTCCI
         PAGE
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<        E N T R Y   2   D A N S   R E S T   ( S U I T E  A   E R R E U R
<
<        I R R E C U P E R A B L E   S U R   D K U   E N   R E S T A U R A -
<
<        T I O N   M U L T I P L E.
<
ENTRY2:  EQU         $
         LRM         C,L,K
         WORD        COM+'80
         WORD        LOC+'80
         WORD        PILE-1
         JMP         RBCLXX          < ET VOILA...
XWOR%1:  VAL         0
         PAGE
RITEM:   EQU         $
<
<        R E S T A U R A T I O N   I T E M
<
<                    EN ENTREE A=LONGUEUR TOTALE
<                    C-A-D  L(NOM+VAL+2)
<
IVALEX:: VAL         0               < BIT DISCRIMINANT LES ITEMS D'EXTENSION
                                     < SUR VOLUME DES AUTRES...
         TBT         IVALEX          < S'AGIT D'UN ITEM D'EXTENSION ???
         RBT         IVALEX          < A PRIORI...
         STA         &ALT            < LONGUEUR TOTALE
         PSR         A
         LAI         -1
         STA         DMSTN+3         < NON, PAS D'EXTENSION A PRIORI...
         JNC         RITEM1          < EFFECTIVEMENT...
NSPDKU:: VAL         'A3             < VALEUR DE DISCRIMINATION ENTRE LES ITEMS
                                     < D'EXTENSION ET LES AUTRES...
         LAI         NSPDKU
         STBY        DMSTN+3         < QUE L'ON MET DANS LA DEMANDE...
RITEM1:  EQU         $
         PLR         A
         ADRI        -2,A            < LONGUEUR "NETTE" NOM+VALEUR
         BSR         AGESTM          < AJUSTEMENT MEMOIRE
         LR          A,X             < LONGUEUR A LIRE
         LA          AOVAL           < @ OCT STOCKAGE
         BSR         ARN             < READ NOM+VAL
         STX         DMSTN+2         < LONGUEUR NOM+VAL
         BSR         AEDN            < EDITION NOM
         LAI         MIT-M           < ON SIGNALE QUE C'EST UN ITEM
         BSR         AENVOI
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPZ         IEXEC           < TEST INDICATEUR 'EXECUTE'.
         JE          RI2
         BR          AEXEC           < IL FAUT EXECUTER L'ITEM PROGRAMME
                                     < DONT ON VIENT DE RECUPERER LE NOM ET LA
                                     < VALEUR...
RI2:     EQU         $
         BSR         ACOMP           < COMPARAISON NOM COURANT :: NOM RECHERCHE
                                     < SI L'ON N'EST PAS EN MODE 'RECHERCHE'
                                     < ON OBTIENDRA 'EGALITE'.
         JE          RI3
<
< MODE RECHERCHE ET NOM COURANT # NOM RECHERCHE.
<
         LAI         MPDR-M          < MESSAGE "PAS DE RESTAURATION".
         BSR         AENVOI
         JMP         RI1             < ET VOILA.
RI3:     EQU         $
XWOR%1:  VAL         0
         BSR         ACHN            < CHANGEMENT DE NOM (EVENTUEL)
         IF          ORDI-"S",XWOR%1,,XWOR%1
RI4:     EQU         $
XWOR%1:  VAL         0
         LAD         DMSTN           < SGN  STORE NAME
         SVC         0
         JE          RI1             < OK?
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LA          DMSTN+1         < 'A' = ADRESSE OCTET DU NOM COURANT.
         BSR         ATAD            < TEST AND DELETE EVENTUEL.
         JNE         RI4X1           < LE NOM N'A PAS ETE DETRUIT...
         CPZ         IDELAR          < LE NOM A ETE DETRUIT, EST-CE TOUT ???
         JL          RI1             < OUI (DELETE SEUL)...
         JMP         RI4             < NON (DELETE & REST) ...
RI4X1:   EQU         $
< ICI, DE DEUX CHOSES L'UNE: OU LE NOM N'A PU ETRE DETRUIT,
< OU BIEN L'OPTION DELETE AND REST N'EST PAS ACTIVE.
XWOR%1:  VAL         0
         LAI         MPBSTN-M        < ON PREVIENT
         BSR         AENVOI
RI1:     EQU         $
         RSR
         PAGE
RFICH:   EQU         $
<
<        R E S T A U R A T I O N   F I C H I E R
<
<
<        AJUSTEMENT ESPACE MEMOIRE, ON MET DANS A LA LONGUEUR
<        OCTETS NECESSAIRE DANS VALEUR POUR LE BUFFER FICHIER
<        INPUT, CELUI-CI ETANT EN RECOUVREMENT DE VALEUR
<        A PARTIR DU 2ND MOT,IL NOUS FAUT DONC QUANTA*128-1*2
<        OCTETS EN RECOUVREMENT DANS VALEUR
<
         IF          ORDI-"T",XWOR%1,,XWOR%1
         LAI         128-1*2
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LRM         A
         WORD        QUANTA*128-1*2
XWOR%1:  VAL         0
         BSR         AGESTM          < AJUSTEMENT MEMOIRE
<
<        ACQUISITION ET EDITION NOM FICHIER
<
         LXI         0               < INIT COUNT
RF2:     EQU         $
         BSR         AR1             < READ 1 CAR
         STBY        &AXVAL          < STORE CARACTERE
         CPI         '04             < EOT ?
         JE          RFET
         ADRI        1,X             < NON, AU SUIVANT
         JMP         RF2
RFET:    EQU         $
         BSR         AEDN            < EDIT NOM...
         LAI         MFI-M
         BSR         AENVOI          < ...ET ON SIGNALE QUE C'EST
                                     < UN FICHIER
         IF          ORDI-"S",XWOR%1,,XWOR%1
         BSR         ACOMP           < COMPARAISON NOM COURANT :: NOM RECHERCHE.
                                     < SI L'ON N'EST PAS EN MODE 'RECHERCHE',
                                     < ON OBTIENDRA 'EGALITE'.
         JE          RF8
<
< MODE RECHERCHE ET NOM COURANT # NOM RECHERCHE.
<
         LAI         MPDR-M          < MESSAGE "PAS DE RESTAURATION".
         BSR         AENVOI
         JMP         RFF             < CARREMENT !
RF8:     EQU         $
XWOR%1:  VAL         0
         BSR         ACHN            < CHANGEMENT DE NOM(EVENTUEL)
<
<        RESTAURATION FICHIER
<        -ACTIVATION OPERATIONS SGF OUT (INDIC SGFO)
<        -DESASSIGNATION DE L'UL '3
<        -ASSIGNATION A L'UL '3 EN NEW DU FICH EN COURS
<         SI ELLE N'EST PAS POSSIBLE, ON LE SIGNALE ET ON
<         INHIBE LES OPERATIONS SGF JUSQU'A LA FIN DE TRAITE
<         MENT DE CE FICHIER
<        -LA RESTAURATION SE FAIT CLE PAR CLE ET BLOC PAR
<         BLOC DANS LA CLE
<
         IF          ORDI-"S",XWOR%1,,XWOR%1
RF9:     EQU         $
XWOR%1:  VAL         0
         STZ         ISGFO           < ACTIVATION SGF OUTPUT
         LAI         "3"
         BSR         ADESAS          < DESASS UL '3
         LA          ASS4
         STA         ASS1
         LAD         DMASS           < ASSIGNATION EN NEW
         SVC         0
         JE          RF3             < OK?
         IF          ORDI-"T",XWOR%1,,XWOR%1
                                     < NON,LE SIGNALER
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LAD         ASS2
         SLLS        1               < ADRESSE OCTET DU NOM COURANT.
         BSR         ATAD            < TEST AND DELETE EVENTUEL.
         JNE         RF9X1           < LE NOM N'A PAS ETE DETRUIT...
         CPZ         IDELAR          < LE NOM A ETE DETRUIT, EST-CE TOUT ???
         JL          RF7X1           < OUI (DELETE SEUL)...
         JMP         RF9             < NON (DELETE & REST)...
RF9X1:   EQU         $
< ICI, LE NOM N'A PU ETRE DETRUIT, OU ALORS L'OPTION DELETE AND REST N'EST PAS
< ACTIVE.
XWOR%1:  VAL         0
         LAI         MPBAS-M
         BSR         AENVOI
RF7X1:   EQU         $
         IC          ISGFO           < ET INHIBER OPERATIONS SGF OUTPUT
         IF          ORDI-"S",XWOR%1,,XWOR%1
         JMP         RF7             < CE FICHIER N'A PU ETRE ASSIGNE EN NEW,
                                     < IL NE SERA DONC PAS RESTAURE.
XWOR%1:  VAL         0
RF3:     EQU         $
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<        ICI, LE FICHIER VIENT D'ETRE ASSIGNE EN NEW: IL FAUT DONC
<        POSITIONNER L'INDICATEUR 'IRESTF' DE RESTAURATION FICHIER POUR LE
<        CAS D'UN DEFAUT IRRECUPERABLE SUR DKU EN CAS DE DUMP DKU MULTIPLE
<
         STZ         IRESTF
         IC          IRESTF
RF7:     EQU         $
XWOR%1:  VAL         0
         BSR         AR1
         CPI         'FF             < FIN FICHIER?
         JE          RFF
         CPI         'DE             < NON, DEBUT ENR?
         JE          $+2
         ACTD
         LXI         4
         LAD         KEYN1
         SLLS        1
         BSR         ARN             < ACQUISITION KEY (READ 4 CAR)
         LAD         DMOPNK          < OPEN NEW KEY
         CPZ         ISGFO           < SSI SGF OUTPUT ACTIF
         JNE         RF4
         SVC         0
         JE          $+2
         ACTD
RF4:     EQU         $
         BSR         AR1
         CPI         'FE             < FIN D'ENREGISTREMENT?
         JE          RFFE
         CPI         'DB             < NON, ALORS DEBUT BLOC?
         JE          $+2
         ACTD
         LA          DMWBLC+1        < @ OCT ZONE STOCK
         LX          DMWBLC+2        < LONGUEUR A LIRE
         BSR         ARN             < READ BLOC
         LAD         DMWBLC          < WRITE BLOC
         CPZ         ISGFO           < SSI SGF OUTPUT ACTIF
         JNE         RF5
         SVC         0
         JE          $+2
         ACTD
RF5:     EQU         $
         BSR         AR1
         CPI         'FB             < FIN DE BLOC?
         JE          $+2
         ACTD
         JMP         RF4             < ON CONTINUE
RFFE:    EQU         $               < FIN D'ENR
         LAD         DMCLSK          < CLOSE SAVE KEY
         CPZ         ISGFO           < SSI SGF OUTPUT ACTIF
         JNE         RF6
         SVC         0
         JE          $+2
         ACTD
RF6:     EQU         $
         JMP         RF3             < AU SUIVANT
RFF:     EQU         $               < FIN RESTAUR FICHIER
         IF          ORDI-"S",XWOR%1,,XWOR%1
         STZ         IRESTF          < RESTAURATION FICHIER TERMINEE.
XWOR%1:  VAL         0
         RSR
         PAGE
RSTDK:   EQU         $
<
<        R E S T A U R A T I O N   D ' U N   D I S Q U E
<
         PSR         X,Y             < SAUVEGARDES
<
         STZ         IDKO            < RESTAURATION DK ACTIVE A PRIORI
<
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<        EN  SOLAR, ON UTILISERA LE DK A RESTAURER SEN ASSIGNATION EXPLICITE
<        A PRIORI.
<
         LAI         3
         STBY        DMWDK
         LA          DMWDK           < ON "RAZE" SYSTEMATIQUEMENT LE
         RBT         12              < BIT 12 DE LA DEMANDE D'ECRITURE
         STA         DMWDK           < SUR DISQUE.
XWOR%1:  VAL         0
         BSR         AR1             < READ QUANTA DE DUMP
         STA         QUANDP          < QUANTA DUMP
<
         BSR         AR1             < READ NSP DU DK DE DUMP
         PSR         A
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPI         NSPDK1
         JGE         RSTDKG          < DK1, DK2 OU DK3.
         LBI         "A"             < DKA A PRIORI
         CPI         NSPDKA
         JE          $+2             < B="A"
         LBI         "B"             < B="B"
         LR          B,A
         ADRI        +NSPDK1-1-'30,A
RSTDKG:  EQU         $
XWOR%1:  VAL         0
         ADRI        -NSPDK1+1+'30,A
         LB          MDKI+1
         SLLD        8
         SWBR        A,A
         STA         MDKI+1          < STORE NSPDKI EN ASCI POUR EDITION
         PLR         A
         LB          DMASDK+1        < PREPARATION ASSIGNATION
         SLRD        8
         SWBR        B,B
         STB         DMASDK+1        < POUR ASSIGNATION
<
         LAD         DMWDK+3
         SLLS        1               < ADRESSE OCTETE ADRESSE SECTEUR
                                     < DE LA DEMANDE DK
         LXI         2               < 2 OCTETS
         BSR         ARN             < READ ADRESSE SECTEUR
<
         LAD         NBSECD
         SLLS        1               < ADRESSE OCTETS NOMBRE DE SECTEURS
         LXI         2
         BSR         ARN             < READ NOMBRE DE SECTEURS
<
RSTDK2:  EQU         $
<
<        AFFICHAGE DU NUMERO DE DISQUE ET DEMANDE EVENTUELLE DE
<        CHANGEMENT DE DISQUE (!!!)
<
         LAI         128             < QUANTA = 1 A PRIORI
         SLLS        1
         STA         DMWDK+2
         STZ         QUANRS
         IC          QUANRS          < QUANTA = 1 A PRIORI
<
         LAI         4
         STA         DMDKI+2
         LAD         DMDKI           < AFFICHAGE :  "DKI"
         SVC         0
         CPZ         ICHN            < CHANGEMENT DEMANDE ?
         JE          RSTDK5          < NON
         DC          DMDKI+2         < AFFICHAGE  :  "DK"
         SVC         0
         LAD         DMREP           < DEMANDE REPONSE
         SVC         0
         LBY         REP             < REPONSE
RSTDK0:  EQU         $
         CPI         '04             < EOT ?
         JE          RSTDK5
         CPI         '0D             < RETURN ?
         JE          RSTDK5
         CPI         "3"             < DK3 ?
         JE          RSTDK3
         CPI         "2"             < DK2 ?
         IF          ORDI-"T",XWOR%1,,XWOR%1
         JNE         RSTDK2          < T1600  REPONSE NON RECONNUE
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         JE          RSTDKH
         CPI         "1"             < DK1 ?
         JE          RSTDKH
         CPI         "A"
         JE          RSTDK3
         CPI         "B"
         JE          RSTDK4
         JMP         RSTDK2          < SOLAR  REPONSE NON RECONNUE
RSTDKH:  EQU         $               < DK2 DEMANDE SUR SOLAR...
         LR          A,B             < SAUVER LA REPONSE
         LA          DMASDK+1
         ANDI        '00FF           < LE DUMP ETAIT-IL SUR DK2?
         CPI         NSPDK1
         JE          RSTDXX          < DK1 : DEMANDER LE QUANTA...
         CPI         NSPDK2          < SI OUI...
         JNE         RSTDKS
RSTDXX:  EQU         $
         LA          QUANDP          < ...IL FAUT REGARDER LE QUANTA
         CPI         QUANTA          < DE DUMP: ET PRENDRE LE MEME
         JE          RSTDKS          < A PRIORI POUR LA RESTAURATION.
         LA          DMWDK           < C'ETAIT QUANTA 1 ! IL FAUT DONC
         SBT         12              < TRAVAILLER A PRIORI AVEC QUANTA 1
         STA         DMWDK           < (BIT 12 DEMANDE DISQUE)
         LR          B,A             < RECUPERATION REPONSE
         JMP         RSTDK3
RSTDKS:  EQU         $
         LR          B,A             < RECUPERATION REPONSE
RSTDK4:  EQU         $               < QUANTA 3.
         LRM         B
         WORD        QUANTA*128*2    < ON A QUANTA RESTAURATION=3
         STB         DMWDK+2         < TAILLE BUFFER DEMANDE DISQUE
         LBI         3               < QUANTA RESTAURATION
         STB         QUANRS          < QUANTA RESTAURATION = 3.
XWOR%1:  VAL         0
RSTDK3:  EQU         $
<
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LBI         NSPDKA
         CPI         "A"
         JL          RSTDKI          < DK2 OU DK3
         JE          $+2             < B=NSPDKA
         ADRI        -1,B            < B=NSPDKB
         LR          B,A
         ADRI        +'30-NSPDK1+1,A
RSTDKI:  EQU         $
XWOR%1:  VAL         0
         ADRI        -'30+NSPDK1-1,A
         SWBR        A,B
         LBY         DMASDK+1
         SLLD        8
         STA         DMASDK+1        < PREPARATION ASSIGNATION
         JMP         RSTDK6
RSTDK5:  EQU         $               < PAS DE CHANGEMENT DEMANDE, ON
         LA          MDKI+1          < VA FAIRE COMME SI !
         ANDI        'FF             < A=PSEUDO-REPONSE
         JMP         RSTDK0          < LE TOUR EST JOUE
                                     < NOTA: EN SUPPOSANT QUE L'ON VEUILLE
                                     < RESTAURER DU DKA OU DU DKB EN T1600,
                                     < UN CHANGEMENT DE NSP VA ETRE
                                     < AUTOMATIQUEMENT DEMANDE, FABULEUX !
RSTDK6:  EQU         $
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<        AFFICHAGE DU QUANTA DE DUMP ET DU QUANTA DE RESTAURATION.
<        EN CAS DE RESTAURATION AVEC CHANGEMENTS ET SUR DK2, ALORS
<        ON PROPOSE DE CHANGER DE QUANTA.
<
         LA          QUANDP          < QUANTA DE DUMP
         ADRI        '30,A
         LX          AOQDKD
         STBY        &AXTRAV
         LAI         MQDKD-M         < AFFICHAGE DU QUANTA DE DUMP...
         BSR         AENVOI
<
         LA          QUANRS          < QUANTA DE RESTAURATION
         ADRI        '30,A
         LX          AOQDKR
         STBY        &AXTRAV
         LAI         MQDKR-M         < AFFICHAGE DU QUANTA DE RESTAURATION
         BSR         AENVOI          < UTILISE A PRIORI.
<
         LA          DMASDK+1        < S'AGIT-IL D'UNE RESTAURATION
         ANDI        '00FF           < SUR DK2 ?
         CPI         NSPDK1
         JE          RSTDKX          < DK1 : ON PEUT CHANGER LE QUANTA...
         CPI         NSPDK2
         JNE         RSTDKP
RSTDKX:  EQU         $
         CPZ         ICHN            < OUI, CHANGEMENTS DEMANDES ?
         JE          RSTDKP
RSTDKQ:  EQU         $               < ON VA PROPOSER UN CHANGEMENT DE
                                     < QUANTA...
         LX          AOQDKR
         LAI         0
         STBY        &AXTRAV         < RAZ QUANTA RESTAURATION D'EDITION
         LAI         MQDKR-M
         BSR         AQREP           < CHOIX DU QUANTA: QUESTION REPONSE.
         CPI         QUANTA='FA00('00FF < QUANTA NORMAL DEMANDE?
         JE          RSTDKT          < DONC QUANTA 3.
         CPI         "1"             < QUANTA 1 ?
         JNE         RSTDKQ          < REPONSE NON RECONNUE
         LAI         1               < FIXER QUANTA = 1
         STA         QUANRS          < QUANTA RESTAURATION
         SLLS        8
         STA         DMWDK+2         < TAILLE BUFFER
         LA          DMWDK
         SBT         12
         STA         DMWDK           < BIT 12 DE LA DEMANDE
         JMP         RSTDKP
RSTDKT:  EQU         $               < FIXER QUANTA 3 ( CAR ON PEUT
                                     < TRES BIEN AVOIR 1 EN SUPPOSANT
                                     < QU'ON AIT EU UN DUMP DK2 QUANTA 1
                                     < ET QUE L'ON DOIVE RESTAURER EN
                                     < DK2 QUANTA 3)
         LAI         3
         STA         QUANRS          < QUANTA RESTAURATION
         LRM         A
         WORD        QUANTA*128*2
         STA         DMWDK+2         < TAILLE BUFFER
         LA          DMWDK
         RBT         12
         STA         DMWDK           < RAZ BIT 12 DE LA DEMANDE.
XWOR%1:  VAL         0
RSTDKP:  EQU         $
<
<        AFFICHAGE DE L'ADRESSE SECTEUR AU DUMP ET DE L'ADRESSE
<        SECTEUR A LA RESTAURATION, AVEC CHANGEMENT EVENTUEL).
<
         LA          DMWDK+3         < ADRESSE SECTEUR AU DUMP
         LY          DMRAS+1         < ADRESSE OCTET RANGEMENT DE L'ASCI
         BSR         ACONVA          < POU LE S/P CONVA
         LAI         MASF-MAS*2      < POUR L'AFFICHAGE DE
         STA         DMWAS+2         < L'ADRESSE SECTEUR AU DUMP
         LA          MNSD
         STA         MASDR
         LAD         DMWAS           < WRITE ADRESSE SECTEUR DUMP
         SVC         0
<
         LA          MNSR
         STA         MASDR
         CPZ         ICHN            < CHANGEMENT DEMANDE ?
         JE          RSTDKU          < NON...AFFICHER LA MEME.
         LAI         MASAS-MAS*2     < LONGUEUR.
         STA         DMWAS+2
         LAD         DMWAS           < PROPOSITION ADRESSE SECTEUR RESTAURATION.
         SVC         0
         LAD         DMRAS           < READ ADRESSE SECTEUR DEMANDEE
         SVC         0
         WORD        '1E35           < BOX --> B
         LR          B,A
         CPI         1               < REPONSE SUR 1 CARACTERE: DONC
         JE          RSTDK7          < C'EST RETURN OU EOT
         LA          DMRAS+1         < ADRESSE OCTET AS EN ASCI
         BSR         ACONVH          < CONVERSION EN HEXA DANS A
         JNE         RSTDKP          < B#0 : ADRESSE INCORRECTE
         STA         DMWDK+3         < STOCKAGE AS DANS LA DEMANDE DK
         JMP         RSTDK7
RSTDKU:  EQU         $               < PAS DE CHANGEMENT, AFFICHER L'ADRESSE
         LAD         DMWAS           < SECTEUR RESTAURATION QUI
         SVC         0               < EST LA MEME QU'AU DUMP.
<
<        AFFICHAGE DU NOMBRE DE SECTEURS AU DUMP
<
RSTDK7:  EQU         $
         LA          NBSECD          < NOMBRE DE SECTEURS DUMP
         LY          DMWNS+1
         ADRI        4,Y             < ADRESSE OCTET STOCKAGE NBSECD EN ASCI
         BSR         ACONVA
         LA          MNSD            < POU AFFICHAGE NB SECT AU DUMP
         STA         MNSDR+1
         LAD         DMWNS           < AFFICHAGE NB SECT AU DUMP
         SVC         0
<
<         CALCUL ET AFFICHAGE DU NB DE SECTEURS A LA RESTAURATION
<
         LA          NBSECD          < A PRIORI, ON A :
         STA         NBSECR          < NBSECR = NBSECA
         STZ         NBREST          < PAS DE SECTEURS RESTANT A PRIORI
         LA          QUANDP          < QUANTA AU DUMP
         CP          QUANRS          < QUANTA A LA RESTAURATION
         JE          RSTDK8          < IDENTIQUES
<
<        QUANTA DUMP  #  QUANTA RESTAURATION
<
         CPI         1               < QUANTA DUMP
         JE          RSTDK9
         CPI         3               < QUANTA DUMP
         JE          RSTDKA
         ACTD                        < QUANTA INCORRECT
<
RSTDK9:  EQU         $               < QUANDP=1  ET  QUANRS=3
         LB          NBSECD
         LAI         0
         DV          QUANRS
         JNV         $+2
         ACTD
         STA         NBSECR          < NOMBRE DE SECTEURS DE QUANTA 3
                                     < A RESTAURER
         STA         NBSECD          < POUR AFFICHAGE : ON AJOUTERA 1 SI
                                     < NBREST EST # 0
         STB         NBREST          < NOMBRE DE SECTEURS DE 128 MOTS RESTANT
         JMP         RSTDK8          < VERS AFFICHAGE
<
RSTDKA:  EQU         $               < QUANDP=3  ET  QUANRS=1
         LA          NBSECD          < NOMBRE DE SECTEURS AU DUMP
         MP          QUANDP          < NB DE SECTEURS DE 128 MOTS
         STB         NBSECR          < A RESTAURER
         STB         NBSECD          < POUR AFFICHAGE
         JAE         RSTDK8          < VALIDATION...
         LAI         MTRS-M          < TROP DE SECTEURS
         BSR         AENVOI          < ON PREVIENT
         ACTD                        < ET ON TRAPPE
<
RSTDK8:  EQU         $
         LA          MNSR
         STA         MNSDR+1         < MESSAGE A AFFICHER
         CPZ         NBREST          < SECTEURS RESTANT ?
         JE          $+2
         IC          NBSECD          < +1 A AFFICHER
         LA          NBSECD          < NOMBRE A AFFICHER
         LY          DMWNS+1
         ADRI        4,Y             < ADRESSE OCTET RANGEMENT POUR S/P CONVA
         BSR         ACONVA
         LAD         DMWNS           < AFFICHAGE NB SECTEURS RESTAURATION
         SVC         0
<
<        AVANT D'ALLER PLUS LOIN, ON DEMANDE A L'UTILISATEUR S'IL EST
<        BIEN D'ACCORD...CELA VAUT MIEUX
<
RSTDKJ:  EQU         $
         LAI         MOK-M
         BSR         AQREP           < ENVOI QUESTION ' OK? ' ET DEMANDE
                                     < REPONSE.
         CPI         "O"             < OUI ?
         JE          RSTDKK          < ALLONS-Y DONC...
         CPI         "N"             < NON ?
         JNE         RSTDKJ          < REPONSE NON-RECONNUE
         IC          IDKO            < INHIBITION OPERATIONS DK
         LAI         MINHD-M         < ON SIGNALE QUE LA RESTAURATION DK
                                     < EST INHIBEE
         JMP         RSTDKL
RSTDKK:  EQU         $
         LAI         MACTD-M         < ON SIGNALE QUE LA RESTAURATION DK
                                     < EST ACTIVE
RSTDKL:  EQU         $
         BSR         AENVOI          < ENVOI MESSAGE
<
<        DECONNEXION UL 3  ET  CONNEXION  UL3<-->DKI
<
         LAI         "3"             < DESASSIGNATION DE L'UL 3 ...
         BSR         ADESAS          < ...AU CAS OU...
         LB          DMASDK+1
         LBY         DMASDK+1
         STZ         DMASDK+1
         STBY        DMASDK+1
         LAD         DMASDK
         SVC         0               < DECONNEXION DISQUE
         STB         DMASDK+1
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LA          DMASDK+1
         ANDI        'FF
         CPI         NSPDK1          < EST-CE DK1 (DKU) ?
         JNE         RSTDKW
< C'EST DK1, ON VA UTILISER L'ASSIGNATION IMPLICITE.
         LAI         '8A
         STBY        DMWDK
         JMP         RSTDKN
RSTDKW:  EQU         $
         LAD         DMASDK          < ASSIGNATION DK.
XWOR%1:  VAL         0
         SVC         0               < CONNEXION DISQUE
         JE          RSTDKN          < OK
         LAI         MCONEX-M        < MESSAGE CONNEXION IMPOSSIBLE
         CPZ         IDKO            < INUTILE DE L'ENVOYER SI LA RESTAU
         JNE         RSTDKN          < RATION DK EST DEJA INHIBEE
         BSR         AENVOI          < ON PREVIENT...
         IC          IDKO            < ET ON INHIBE LA RESTAURATION DK
RSTDKN:  EQU         $
<
<        AJUSTEMENT  MEMOIRE
<
         LA          DMWDK+2         < NOMBRE D'OCTETS BUFFER DK
         BSR         AGESTM          < IL NOUS LES FAUT
<
<        BOUCLE DE WRITE DE  N  SECTEURS SUR DKI
<        ON DOIT RESTAURER 'NBSECR' SECTEURS + 1 SECTEUR
<        SI 'NBREST'#0
<
RSTDKF:  EQU         $               < BOUCLE DE RESTAURATION DK
         CPZ         NBSECR          < NOMBRE DE SECTEURS RESTANT A
                                     < RESTAURER
         JE          RSTDKB
RSTDKE:  EQU         $
         LA          DMWDK+1         < ADRESSE BUFFER DK
         LX          DMWDK+2         < LONGUEUR OCTET
         BSR         ARN             < READ N OCTETS EN PAGE VIRTUELLE
         JMP         RSTDKC          < VERS WRITE D'UN SECTEUR DK
RSTDKB:  EQU         $               < ON DOIT ENCORE RESTAURER
                                     < 'NBREST' * 128  OCTETS
         LA          NBREST
         JAE         RSTDKD          < C'EST FINI
         STZ         NBREST          < CE SERA BIENTOT FINI...
         SLLS        8               < NOMBRE D'OCTETS
         STA         DMWDK+2         < COMPTE D'OCTETS DE LA DEMANDE DK
         IC          NBSECR          < POUR SE RAMENER AU CAS PRECEDENT
         JMP         RSTDKF          < ON EST RAMENE AU CAS PRECEDENT
RSTDKC:  EQU         $               < WRITE 1 SECTEUR
         LAD         DMWDK           < DEMANDE DE WRITE DK
         WORD        1               < POUR '1E16 EVENTUEL
         CPZ         IDKO            < RESTAURATION DK ACTIVE ?
         JNE         RSTDKM          < NON
         SVC         0
         JE          $+2
         ACTD
RSTDKM:  EQU         $
         IC          DMWDK+3         < ADRESSE SECTEUR SUIVANT
         DC          NBSECR          < -1 SUR NOMBRE DE SECTEURS RESTANT
         JMP         RSTDKF
RSTDKD:  EQU         $
         BSR         AR1             < READ DELIMITEUR 'FD
         CPI         'FD             < QUI SIGNIFIE 'FIN DUMP DISQUE'
         JE          $+2
         ACTD
         LBY         DMASDK+1
         STZ         DMASDK+1
         STBY        DMASDK+1
         LAD         DMASDK          < DECONNEXION DK
         SVC         0
<
         PLR         X,Y             < RESTAURATIONS
         RSR
         PAGE
RSTDA:   EQU         $
<
<        R E S T A U R A T I O N   D E   L A   D A T E   D U   D U M P
<
<                      CELLE-CI EST EMISE SUR L'ORGANE DE SORTIE
<                    A TITRE D'INFORMATION.
<
         PSR         A,X             < SAUVEGARDES
         LA          AODATE          < ADRESSE OCTET DATE A EDITER.
         LXI         6               < ANNEE,MOIS,JOUR,HEURE,MIN,SEC.
RSTDA1:  EQU         $
         PSR         X
         LXI         2               < DEUX CHIFFRES PAR RUBRIQUE.
         BSR         ARN             < READ CES 2 CHIFFRES EN PAGE VIRTUELLE.
         ADRI        3,A             < NOUVELLE ADRESSE D'EDITION.
         PLR         X
         JDX         RSTDA1
<
         LAI         MDATE-M         < EDITION DE LA DATE DU DUMP.
         BSR         AENVOI
<
         PLR         A,X             < RESTAURATIONS.
         RSR
         PAGE
RSTAC:   EQU         $
<
<        R E S T A U R A T I O N   D E   L ' A C N   D U   D U M P
<
<                      SI CET ACN EST DIFFERENT DE L'ACN DE L'UTILISATEUR
<                    EFFECTUANT LA RESTAURATION, ON LE SIGNALE ET ON
<                    LUI DEMANDE DE DECIDER S'IL VEUT EFFECTUER OU NON
<                    LA RESTAURATION, QUI SE FERA SOUS SON ACN.
<
         PSR         A,B,X           < SAUVEGARDES.
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPZ         IRECH           < TEST MODE RECHERCHE.
         JE          RSTAC5
         IC          IACN            < MODE RECHERCHE: SIGNALER "ACN RENCONTRE"
         STZ         IEGACN          < A PRIORI ACN COURANT=ACN RENCONTRE.
RSTAC5:  EQU         $
XWOR%1:  VAL         0
         LA          AOACND          < ADRESSE OCTET ACN U DUMP.
         LXI         4               < 4 CARACTERES.
         BSR         ARN             < LECTURE DE L'ACN EN PAGE VIRTUELLE.
         LAD         DMAFAC          < AFFICHAGE DE L'ACN DE DUMP.
         SVC         0
         WORD        '1E25           < 'A' ET 'B' RECOIVENT L'ACN COURANT.
         CP          ACND
         JNE         RSTAC1          < DIFFERENTS.
         LR          B,A
         CP          ACND+1
         JE          RSTAC2          < EGAUX.
RSTAC1:  EQU         $
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPZ         IRECH           < TEST MODE RECHERCHE.
         JE          RSTAC6
         WORD        '1E25           < ON SAIT QUE ACN DIFFERENTS, IL
                                     < FAUT VOIR DANS QUEL SENS.
         CP          ACND
         JG          RSTAC7          < COURANT > RENCONTRE.
         JL          RSTAC8          < COURANT < RENCONTRE.
         LR          B,A
         CP          ACND+1
         JG          RSTAC7          < COURANT > RENCONTRE.
RSTAC8:  EQU         $               < ACN COURANT < ACN RENCONTRE.
         DC          IEGACN          < C'EST NOTE.
         JMP         RSTAC9
RSTAC7:  EQU         $               < ACN COURANT > ACN RENCONTRE.
         IC          IEGACN          < C'EST NOTE.
RSTAC9:  EQU         $
         JMP         RSTAC2
RSTAC6:  EQU         $
         BSR         ATSTAC          < TEST ACN DE LOGON INITIAL.
         JNE         RSTAC3          < # :SYS, FAUDRA-IL CONTINUER A RESTAURER?
         CPZ         ICHACN          < CHANGEMENT D'ACN'S MANUEL ?
         JNE         RSTACA          < OUI.
< ICI, LE CHANGEMENT D'ACN EST FAIT AUTOMATIQUEMENT.
         LA          ACND            < ACN COURANT DEVIENT ACN DE DUMP.
         STA         ACNC
         LA          ACND+1
         STA         ACNC+1
         LAI         '04
         STBY        ACNC+2
         LAD         DMLGN           < LOGON SOUS NOUVEL ACN.
         SVC         0
RSTACA:  EQU         $
         LAI         MACNC-M         < AFFICHAGE ACN COURANT...
         BSR         AENVOI
         LAD         DMOUTA
         SVC         0
         CPZ         ICHACN
         JE          RSTAC2          < SI LE CHANGEMENT D'ACN EST AUTOMATIQUE,
                                     < ON SE SERA CONTENTE D'AFFICHER LE NOUVEL
                                     < ACN COURANT.
RSTAC4:  EQU         $
         LAI         MQACN-M         < ... ET PROPOSER UN ACN DE RESTAURATION.
         BSR         AENVOI
         LAD         DMACN
         SVC         0
         LAD         DMLGN           < LOGON SOUS CET ACN...
         SVC         0
         JNE         RSTAC4
         JMP         RSTAC2          < ET VOILA.
RSTAC3:  EQU         $
XWOR%1:  VAL         0
         LAI         MACN-M          < PROPOSITION
         BSR         AQREP           < ET DEMANDE REPONSE.
         CPI         "O"
         JE          RSTAC2          < ON CONTINUE LA RESTAURATION.
         CPI         "N"
         JNE         RSTAC1          < REPONSE NON RECONNUE.
         LAD         DMCCI           < ON NE RESTAURE PAS, RETOUR CCI.
         SVC         0
         JMP         RSTAC1
RSTAC2:  EQU         $               < ON CONTINUE.
         PLR         A,B,X           < RESTAURATIONS.
         RSR
         PAGE
         IF          ORDI-"S",XWOR%1,,XWOR%1
         PAGE
TSTAC:   EQU         $
<
<        T E S T   A C N   D E   L O G O N   " I N I T I A L ".
<
<        RESULTAT:
<                    - 'ACNC' RECOIT L'ACN COURANT.
<                    - TESTER AU RETOUR COMME CECI:
<
<                                    JE    ACN INITIAL = :SYS
<                                    JNE   ACN INITIAL # :SYS.
<
         PSR         A,B,X
<
         WORD        '1E25           < 'A' ET 'B' RECOIVENT L'ACN COURANT.
         STA         ACNC            < QU'ON STOCKE.
         STB         ACNC+1
<
         LAD         DMLGSY          < ESSAYONS LOGON :SYS.
         SVC         0
         LR          X,B             < 'B' = CODE RETOUR.
         LAD         DMLGN           < RELOGON SOUS ACN COURANT.
         SVC         0               < ET ICI, PEU IMPORTE LE CODE RETOUR.
         CPZR        B               < POUR TEST EN RETOUR.
<
         PLR         A,B,X
         RSR
COMP:    EQU         $
<
<        C O M P A R A I S O N   N O M   C O U R A N T   -   N O M
<
<        R E C H E R C H E.
<
<          CE S/P COMPARE LE NOM COURANT (QUI EST CELUI DE L'ITEM OU DU
<        FICHIER EN COURS DE RESTAURATION) AVEC LE NOM RECHERCHE; CECI
<        LORS D'UNE RESTAURATION EN MODE RECHERCHE ('IRECH'#0).
<
<          SI L'ON N'EST PAS EN MODE RECHERCHE, ALORS CE S/P RENVOIE TOUJOURS
<        LE RESULTAT 'EGALITE'. (... CE S/P EST APPELE EN EFFET SYSTEMATIQUE-
<        MENT...)
<
<          SI L'ON EST EN MODE RECHERCHE, IL RENVOIE 'EGALITE' OU 'INEGALITE' :
<                    - EGALITE : DANS CE CAS 'IFINR' (INDICATEUR DE FIN
<                      DE RECHERCHE) EST POSITIONNE, CE QUI PROVOQUERA PAR
<                      LA SUITE LA PROPOSITION D'UNE NOUVELLE RECHERCHE.
<                    - INEGALITE : DANS CE CAS, SUIVANT QUE NOM COURANT EST
<                      SUPEIEUR OU INFERIEUR AU NOM RECHERCHE, LES BORNES
<                      DE RECHERCHE DICHOTOMIQUE ('DICHO1' ET 'DICHO2') SONT
<                      MODIFIEES POUR LA SUITE DE LA RECHERCHE.
<
<        ARGUMENTS:
<                    - 'NOM'   :  NOM COURANT.
<                    - 'LGN'   :  LONGUEUR NOM COURANT.
<                    - 'NOMR'  :  NOM RECHERCHE.
<                    - 'LGNR'  :  LONGUEUR NOM RECHERCHE.
<                    - 'LGN' ET 'LGNR' SONT DES LONGUEURS DE NOMS <EOT>
<                      INCLUS.
<                    - 'IACN' : INDICATEUR "ACN RENCONTRE"
<                    - 'IEGACN':INDICATEUR "EGALITE/INEGALITE" ENTRE ACN
<                    COURANT ET ACN RENCONTRE :
<                      = 0 : ACN COURANT = ACN RENCONTRE
<                      < 0 : ACN COURANT < ACN RENCONTRE
<                      > 0 : ACN COURANT > ACN RENCONTRE.
<
<
<        RESULTATS:
<                    - AU RETOUR, FAIRE :
<                                          JE     EGAUX          OU
<                                          JNE    DIFFERENTS
<                    - SI MODE = RECHERCHE, 'DICHO1' ET 'DICHO2' ONT ETE
<                      RECALCULES (EN CAS D'INEGALITE SEULEMENT).
<
         PSR         A,B,X,Y         < SAUVEGARDES.
<
         LYI         1               < INEGALITE A PRIORI.
         CPZ         IRECH           < TEST MODE RECHERCHE.
         JE          COMPE1          < ON N'EST PAS EN MODE RECHERCHE, DONC
                                     < ON REPOND SYSTEMATIQUEMENT 'EGALITE'.
         CPZ         IACN            < TEST ACN RENCONTRE?
         JNE         COMP6
         LAI         MPACN-M         < ON PREVIENT QUE "ACN COURANT SUPPOSE".
         BSR         AENVOI
         STZ         IEGACN          < ET ON SUPPOSE ACN COURANT = ACN
                                     < RENCONTRE.
COMP6:   EQU         $
         CPZ         IEGACN          < TEST ACN COURANT :: ACN RENCONTRE.
         JL          COMP4           < PLUS PETIT.
         JG          COMP3           < PLUS GRAND.
< SI EGALITE, ALORS IL FAUT BIEN COMPARER LES NOMS.
<
< FAIRE LA COMPARAISON.
<
         LA          LGNR            < LONGUEUR NOM RECHERCHE.
         CP          LGN             < COMPARAISON AVEC LONGUEUR NOM COURANT.
         JLE         COMP1
         LA          LGN
COMP1:   EQU         $
         LR          A,X             < ON VA FAIRE LA COMPARAISON SUR UNE
                                     < LONGUEUR = MIN (LGN , LGNR).
         LBI         0               < INDEX COURANT.
COMP2:   EQU         $
         PSR         X               < SAUVEGARDE COUNT.
         LR          B,X             < INDEX COURANT.
         LBY         &AXNOM          < CARACTERE DE 'NOM COURANT'.
         CPBY        &AXNOMR         < TEST :: CARACTERE DE 'NOM RECHERCHE'.
         PLR         X               < RESTAURATION COUNT.
         JL          COMP3           < PLUS PETIT.
         JG          COMP4           < PLUS GRAND.
         ADRI        1,B             < INDEX COURANT.
         JDX         COMP2
<
< EGALITE DES DEUX NOMS SUR LE MIN DES LONGUEURS.
<
<
         LA          LGN
         CP          LGNR
         JE          COMPE           < ET LONGUEURS EGALES: DONC EGALITE.
         JG          COMP4           < ET 'LGN' > 'LGNR' DONC NOM COURANT
                                     < EST SUPERIEUR A NOM RECHERCHE.
COMP3:   EQU         $
<
< NOM COURANT < NOM RECHERCHE :   DONC IL FAUDRA RECHERCHER PLUS HAUT.
<
         LA          DICHOM
         STA         DICHO1          < DEPLACEMENT BORNE INFERIEURE.
         JMP         COMP5
COMP4:   EQU         $
<
< NOM COURANT > NOM RECHERCHE :   DONC IL FAUDRA RECHERCHER PLUS BAS.
<
         LA          DICHOM
         STA         DICHO2          < DEPLACEMENT BORNE SUPERIEURE.
         JMP         COMP5
COMPE:   EQU         $
<
< EGALITE : RENVOYER INDICATEUR 'IFINR' (FIN DE RECHERCHE) POSITIONNE.
<
         IC          IFINR
COMPE1:  EQU         $               < MODE NON-RECHERCHE.
         LYI         0               < EGALITE.
COMP5:   EQU         $
         CPZR        Y               < POUR TEST AU RETOUR.
         PLR         A,B,X,Y         < RESTAURATIONS.
         RSR
         PAGE
RVAS:    EQU         $
<
<        R E A D   E T   V A L I D A T I O N   A D R E S S E   S E C T E U R
<
<        D K U   ( R E S T   D K U ).
<
<        ARGUMENT:
<                    - 'A'=ARGUMENT D'APPEL DU S/P 'ENVOI' POUR LA DEMANDE
<                      DE L'ADRESSE SECTEUR A L'UTILISATEUR.
<
<        RESULTAT:
<                    - 'A'=ADRESSE SECTEUR VALIDEE.
<
         PSR         B,X             < SAUVEGARDES.
<
         LR          A,B             < MESSAGE ARGUMENT POUR S/P 'ENVOI'.
RVAS1:   EQU         $
         LR          B,A             < ARGUMENT D'APPEL DU S/P 'ENVOI'.
         BSR         AENVOI          < ENVOI DEMANDE.
         LAD         DMRAS           < READ ADRESSE SECTEUR.
         SVC         0
         LA          DMRAS+1         < ADRESSE OCTET ADRESSE SECTEUR SERVIE.
         BSR         ACONVH          < CONVERSION HEXA.
         JNE         RVAS1           < ADRESSE INCORRECTE.
<
         BSR         AVALID          < ADRESSE CORRECTE, IL FAUT ENCORE
                                     < LA VALIDER PAR RAPPORT AUX BORNES
                                     < DEFINISSANT L'ESPACE DKU ACCESSIBLE.
         JNE         RVAS1           < ADRESSE INVALIDE, ON RECOMMENCE...
<
         PLR         B,X             < RESTAURATIONS.
         RSR
         PAGE
VALID:   EQU         $
<
<        V A L I D A T I N   A D R E S S E   S E C T E U R   P A R
<
<        R A P P O R T   A U X   B O R N E S   ' A D K U 1 '   E T
<
<        ' A D K U 2 '   D E F I N I S S A N T   L ' E S P A C E   D K U
<
<        A C E S S I B L E.
<
<
<        ARGUMENT:
<                    - 'A' = ADRESSE SECTEUR.
<
<        RESULTAT:
<                    - AU RETOUR, FAIRE :
<                                          JE     OK           OU
<                                          JNE    ERREUR
<
         PSR         A,B,Y           < SAUVEGARDES.
<
         LBI         0               < OK A PRIORI.
         LR          A,Y             < SAUVEGARDE ADRESSE SECTEUR.
<
< TESTS PAR RAPPORT A 'ADKU1' (DEBUT ESPACE ACCESSIBLE).
<
         EOR         ADKU1
         JAGE        VALID2
< DE SIGNES DIFFERENTS: AS DOIT DONC ETRE < 0.
         CPZR        Y
         JL          VALID3
         JMP         VALIDR          < ERREUR.
VALID2:  EQU         $
< DE MEME SIGNE: AS DOIT ETRE >= 'ADKU1'.
         LR          Y,A
         CP          ADKU1
         JL          VALIDR          < ERREUR.
VALID3:  EQU         $
<
< TESTS PAR RAPPORT A 'ADKU2' (FIN ESPACE ACCESSIBLE).
<
         LR          Y,A
         EOR         ADKU2
         JAGE        VALID4
< DE SIGNES DIFFERENTS: AS DOIT DONC ETRE >= 0.
         CPZR        Y
         JGE         VALID5
         JMP         VALIDR
VALID4:  EQU         $
< DE MEME SIGNE: AS DOIT DONC ETRE <= 'ADKU2'.
         LR          Y,A
         CP          ADKU2
         JLE         VALID5
<
VALIDR:  EQU         $               < ERREUR.
         LBI         1
VALID5:  EQU         $
         CPZR        B               < POUR TEST AU RETOUR.
<
         PLR         A,B,Y           < RESTAURATIONS.
         RSR
XWOR%1:  VAL         0
         PAGE
R1:      EQU         $
<
<        R E A D   1   C A R A C T E R E   E N   P A G E   V I R T U E L L E
<
<                    CE S/P ASSURE LE DECOMPACTAGE, ET RENVOIE LE
<                    CARACTERE LU DANS LE REGISTRE 'A' (BITS 8-15)
<
         PSR         X,Y
         CPZ         IPRR1           < PREMIER APPEL?
         JNE         R11
                                     < OUI,
         IC          IPRR1           < BASCULEMENT
         LAI         -1
         STA         CCMP            < INIT COMPT DE COMPACTAGE
                                     < BIT 0=1 SIGNIFIE EPUISE
<
                                     < INIT SPECIFIQUES AUX
                                     < DIFFERENTS SUPPORTS UTILISES
         CPZ         TYPRST          < TYPE DE RESTAURATION ?
         JL          R10C            < CARTES
         IF          ORDI-"T",XWOR%1,,XWOR%1
         JG          R10F            < FICHIER
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         STZ         N0BDKU          < INIT. NUMERO DU BLOC A LIRE
         LA          TYPRST
         CPI         1
         JE          R10F            < FICHIER
XWOR%1:  VAL         0
         JMP         R10
<
R10C:    EQU         $               < INITIALISATIONS SPECIFIQUES CARTES
         STZ         NUMC            < NUMERO CARTE EN COURS
         STZ         NBM11           < INDEX MODULO 11
         STZ         IRCARD          < READ CARTE ACTIF A PRIORI
         LA          ACHECK
         STA         PBC             < POINTEUR BUFF CARTES (PROVOQUERA
                                     < APPEL A READ CARD)
         JMP         R10
<
R10F:    EQU         $               < INITIALISATIONS SPECIFIQUES FICHIER
         LAD         DMOPNX          < OPEN NEXT
         SVC         0
         JE          R10
         ACTD
R10:     EQU         $
         BSR         ARPAGE          < READ 1ERE PAGE
<
<
<
R11:     EQU         $               < N EME APPEL
         LB          CCMP            < COMPTEUR COMPACTAGE
         LY          PPG             < POINTEUR DE PAGE
<
         TBT         16+0            < CONT INVALIDE?
         JNC         R101
                                     < OUI,REINIT CCMP
         BSR         ALDC            < LOAD COUNT
         LR          A,B
<
R101:    EQU         $
         TBT         16+8            < COUNT DE CAR REPETITIFS?
         JNC         R102
                                     < OUI,ON RESTE SUR LE CAR
                                     < ACTERE EN COURS
         LR          Y,X
         LBY         &AXTRAV         < CAR EN COURS
         JMP         R103
<
R102:    EQU         $               < COUNT DE CAR NON-REPETITIFS
         BSR         ALDC            < LOAD CARACTERE SUIVANT
<
R103:    EQU         $               < MAJ COUNT DE COMPACTAGE
         ADRI        -1,B
         XR          A,B
         PSR         A
         ANDI        '7F
         CPI         '7F             < EPUISE?
         PLR         A
         JNE         R1F
                                     < OUI,FAUT-IL AVANCER D'1 CAR
                                     < IL LE FAUT SI LE COUNT EN
                                     < COURS ETAIT UN COUNT DE CAR
                                     < REPETITIFS
         TBT         0
         JC          R1F
                                     < C'ETAIT UN REPETITIF
         PSR         A
         BSR         ALDC            < POUR PASSER AU COUNT SUIVANT
         PLR         A
         SBT         0               < SET CCMP EPUISE
<
R1F:     EQU         $
         XR          A,B
         STB         CCMP            < CCMP MIS A JOUR
         STY         PPG             < PPG MIS A JOUR
<
         PLR         X,Y
         RSR
<
         PAGE
LDC:     EQU         $
<
<        L O A D   1   O C T E T    D E   P A G E   V I R T U E L L E
<
<        D A N S   'A' (BITS 8-15)
<
<                      CE S/P EST APPELE PAR LE S/P 'R1' ET IL LIT BRUTALEMENT
<                    UN OCTET QUI PEUT ETRE UN COUNT OU UN CARACTERE.
<
         LR          Y,X
         LBY         &AXTRAV
         ADRI        1,Y
         LX          AOFPAG
         CPR         X,Y             < ON DEPASSE?
         JL          LDCF
                                     < OUI, LIRE PAGE SUIVANTE
         BSR         ARPAGE
         LY          PPG             < REINIT Y POUR R1
LDCF:    EQU         $
         RSR
<
         PAGE
RN:      EQU         $
<
<        R E A D   N   C A R A C T E R E S   E N   P A G E   V I R T U E L L E
<
<                    ARGUMENTS:
<                                    'A' = ADRESSE OCTET ZONE DE STOCKAGE DES
<                                    CARACTERES LUS
<                                    'X' = NOMBRE DE CARACTERES A LIRE
<
<                    NOTA:
<                                      CE S/P UTILISE LE S/P 'R1'(READ 1 CARACT)
<
         XR          A,X
         RBT         IVALEX          < A PRIORI...
         XR          A,X
         PSR         A,X,Y
         CPZR        X               < LONGUEUR NULLE?
         JNE         $+2
         ACTD                        < OUI,PROBLEME!
         LR          A,Y
RN1:     EQU         $               < BOUCLR DE READ 1 CAR
         PSR         X               < SVG COUNT
         BSR         AR1             < READ 1 CAR
         LR          Y,X
         STBY        &AXTRAV         < STOCKAGE CAR
         ADRI        1,Y
         PLR         X
         JDX         RN1             < BOUCLE
<
         PLR         A,X,Y
         RSR
         PAGE
RPAGE:   EQU         $
<
<        R E A D   U N E   P A G E   V I R T U E L L E
<
<        S U R   U N   S U P P O R T   E X T E R N E   Q U E L C O N Q U E  :
<
         PSR         A,B,X
         LA          AOPAG
         STA         PPG             < INIT POINTEUR PAGE
                                     <
         CPZ         TYPRST          < TYPE RESTAUR?
         JL          RPGC            < CARTES
         JG          RPGH            < FICHIER
RPGV:    EQU         $               < LIGNE VISU
<
         PSR         B,Y             < SAUVEGARDES
         LA          AOPAG
         SLRS        1
         LR          A,Y             < Y=POINTEUR MOT SUR PAGE VIRTUELLE
<
XWOR%1:  VAL         LPAV*2*2        < NOMBRE DE 'DIGITS' DANS LA PAGE VIRTUELLE
XWOR%2:  VAL         LBV*2           < NOMBRE D'OCTETS DANS LE BUFFER VISU
         LXI         XWOR%1/XWOR%2   < INIT COMPTEUR DE BOUCLE SUR N ECHANGES
                                     < VISU POUR REMPLIR LA PAGE VIRTUELLE
<
RPGV1:   EQU         $               < BOUCLE SUR LECTURE ET CONVERSION
                                     < D'UN BUFFER VISU EN PAGE VIRTUELLE
         PSR         X
         STY         PPG             < ON SAUVE LE POINTEUR DE PAGE
                                     < POUR LE CAS D'UNE "REPRISE"
         LAD         DMLVI           < LECTURE SUR VISU EMETTRICE
         SVC         0
         LA          AOBV
         STA         PBV             < POINTEUR OCTET BUFFER VISU
         LXI         LBV*2/4         < INIT BOUCLE SUR CONVERSION
                                     < ASCI-->BINAIRE DE BV--->PAGE
RPGV2:   EQU         $
         PSR         X
         LXI         4               < ON TRAITE 4 OCTETS BV POUR OBTENIR
                                     < 1 MOT PAGE VIRTUELLE
<
RPGV3:   EQU         $
         PSR         X
         LX          PBV             < POINTEUR 'BV'
         LBY         &AXTRAV         < 1 CARACTERE ASCI
         RBT         8               < RAZ BIT DE PARITE
                                     < VALIDATION DU CARACTERE ASCI
         CPI         "0"
         JL          RPGV4           < ERREUR
         CPI         "F"
         JG          RPGV4           < ERREUR
         CPI         "9"
         JLE         RPGV5           < OK
         CPI         "A"
         JGE         RPGV5           < OK
RPGV4:   EQU         $               < CARACTERE ASCI INCORRECT:
         IF          DIALOG,XWOR%1,XWOR%1,
         CPI         '7D             < Y A-T-IL EU UN TIME OUT ?
         JNE         RPGV6           < NON, DONC ERREUR ASCI...
                                     < OUI, DONC IL FAUT ENVOYER A LA VISU
                                     < EMETTRICE LE CARACTERE DE RESYNCHRO-
                                     < SATION ET ALLER RELIRE LE DERNIER BUFFER.
         LAD         DMTMPO          < TEMPORISATION DE 1 SECONDE...
         SVC         0
         LAD         DMWSYN          < WRITE CARACTERE DE RESYNCHRONISATION.
         SVC         0
         PLR         X,Y             < PLR "BIDON" POUR QUE LA PILE SOIT INTEGRE
         PLR         X               < RECUPERATION DE L'INDEX DE BOUCLE.
         LY          PPG             < REPOSITIONNEMENT DU POINTEUR DE PAGE
                                     < POUR ETRE PROPRE.
         JMP         RPGV1           < ON PEUT MAINTENANT ALLER RELIRE LE
                                     < DERNIER BUFFER.
RPGV6:   EQU         $
XWOR%1:  VAL         0
         IF          DIALOG,,,XWOR%1
         CPI         SYNC            < CRACTERE DE "RESYNCHRONISATION" ?
         JNE         RPGV8
                                     < IL FAUT DONC RECOMMENCER LA LECTURE DU
                                     < DERNIER BUFFER ...
         PLR         X,Y             < PLR "BIDON" POUR QUE LA PILE
                                     < SOIT INTEGRE!
         PLR         X               < RECUPERATION DU COUNT DE BOUCLE
         LY          PPG             < RECUPERATION DU POINTEUR DE PAGE
         JMP         RPGV1           < ET ON REPART !
RPGV8:   EQU         $               < "VRAIE" ERREUR !
XWOR%1:  VAL         0
         LAI         MASCI-M         < ON PREVIENT...
         BSR         AENVOI
         ACTD                        < ...ET ON TRAPPE
RPGV5:   EQU         $
         CPI         '39
         JLE         $+2
         ADRI        -7,A
         ADRI        -'30,A
         SLLS        12              < STOCKAGE D'UN DIGIT...
         SCLD        4               < ... DANS B
         IC          PBV             < CARACTERE SUIVANT
         PLR         X
         JDX         RPGV3           < BOUCLE SUR CONVERSION 4 OCTETS
<
         LR          Y,X             < POINTEUR MOT PAGE
         STB         &AXTRAV         < STOCKAGE MOT
         ADRI        1,Y             < MOT SUIVANT
         PLR         X
         JDX         RPGV2           < BOUCLE SUR CONVERSION-STOCKAGEF
                                     < D'UN BUFFER VISU
<
         IF          DIALOG,XWOR%1,XWOR%1,
         LAD         DMTMPO          < TEMPORISATION DE 1 SECONDE AVANT
         SVC         0               < L'ENVOI D'UN 'ACK'
         LAD         DMWACK          < ENVOI 'ACK'
         SVC         0
XWOR%1:  VAL         0
         IF          DIALOG,,,XWOR%1
         LXI         4
         LAI         MTMPO-M         < ON TEMPORISE UN PEU...
         BSR         AENVOI
         JDX         $-1
         LAD         DMWACK          < ON ENVOIE UN 'ACK' POUR DIRE
         SVC         0               < QU'ON EST PRET POUR LE BUFFER
                                     < SUIVANT.
XWOR%1:  VAL         0
         PLR         X
         JDX         RPGV1           < BOUCLE SUR N BUFFERS VISU
                                     < LA PAGE VIRTUELLE EST PLEINE
         PLR         B,Y             < RESTAURATIONS
         IF          ORDI-"T",XWOR%1,,XWOR%1
         JMP         RPGF            < FIN
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         JMP         RPGFXX          < FIN.
XWOR%1:  VAL         0
RPGC:    EQU         $               < LECTEUR DE CARTES
         BSR         AR1C            < LIRE 1 CARACT SUR CARTE
         LX          PPG
         STBY        &AXTRAV         < STORE CAR EN PAGE
         IC          PPG             < +1 SUR POINT PAGE
         LA          PPG
         CP          AOFPAG          < ON DEPASSE?
         JL          RPGC            < NON,CONTINUER,C'EST BIEN
         IF          ORDI-"T",XWOR%1,,XWOR%1
         JMP         RPGF            < NON,FIN
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
RPGFXX:  JMP         RPGF            < NON, FIN.
XWOR%1:  VAL         0
<
RPGH:    EQU         $               < FICHIER
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LA          TYPRST          < PEUT-ETRE DKU?
         CPI         2
         JE          RPGD            < DKU
         CPI         3
         JE          RPGM            < CDA.
XWOR%1:  VAL         0
         LAD         DMRBLF          < READ BLOC
         SVC         0
         JE          RPGF
         ACTD
         IF          ORDI-"S",XWOR%1,,XWOR%1
         JMP         RPGF
RPGD:    EQU         $               < DKU.
         LXI         NBTRY           < NOMBRE DE TENTATIVES DE LECTURE.
RPGD2:   EQU         $
         PSR         X
         BSR         AKOMP           < LECTURE DKU ET DECODAGE EVENTUEL...
         PLR         X
         LA          &ADPAG0         < PREMIER MOT DU BLOC.
         JNE         RPGD1           < CODE RETOUR DU READ NON OK.
         CPI         -1              < DUMP INCOMPLET ?
         JE          RPGD8
         CPI         -2              < BLOC INVALIDE ?
         JNE         RPGD5           < BLOC VALIDE.
<
<        CAS D'UN BLOC INVALIDE PAR DUMP OU PRESUME TEL.
<
RPGD3:   EQU         $
         IC          N0BDKU          < COMPTAGE.
         IC          DMRDKU+3        < ADRESSE BLOC SUIVANT.
         JMP         RPGD            < LECTURE BLOC SUIVANT.
RPGD1:   EQU         $
         JDX         RPGD2           < NOUVELLES TENTATIVES.
<
<        TOUTES LES TENTATIVES ON ECHOUE.
<
         CPI         -2
         JE          RPGD3           < BLOC PRESUME AVOIR ETE INVALIDE
                                     < PAR DUMP.
         CPI         -1
         JE          RPGD8           < DUMP PRESUME ETRE INCOMPLET.
         LAD         DMRAZ           < ERASE ECRAN VISU.
         SVC         0
<
         LA          DMRDKU+3        < ADRESSE BLOC.
         LRM         Y
         WORD        MDEF-ZERO*2+1   < ADRESSE OCTET EDITION ADRESSE BLOC.
         BSR         ACONVA          < CONVERSION ASCI, EDITION.
         LAI         MDEF-M
         BSR         AENVOI          < ENVOI MESSAGE.
<
         BSR         ADFPR           < DELETE DU FICHIER EN COURS DE
                                     < RESTAURATION, S'IL EXISTE (CF: COMMENTS
                                     < DE CE SOUS-PROGRAMME).
         CPZ         STDKU
         JNE         RPGD4
         WORD        '1E16           < EN MODE CONTINU, PROBLEME...
         JMP         $-1
<
RPGD4:   EQU         $
<
<        BLOC ILLISIBLE EN MODE MULTIPLE. CHERCHONS LE PREMIER BLOC
<        DU DUMP SUIVANT.
<
         IC          DMRDKU+3        < ADRESSE BLOC.
         LXI         NBTRY           < NOMBRE DE TENTATIVES MAXIMUM.
RPGD6:   EQU         $
         PSR         X
         BSR         AKOMP           < LECTURE DKU ET DECODAGE EVENTUEL...
         PLR         X
         JE          RPGD7           < LECTURE REUSSIE.
         JDX         RPGD6
         JMP         RPGD4           < AU SUIVANT, C'EST RISQUE MAIS TANT PIS.
RPGD7:   EQU         $
         LA          &ADPAG0
         CPI         -1
         JE          RPGDA           < DUMP INCOMPLET...
         JANE        RPGD4           < BLOC SUIVANT.
<
<        ICI, ON EST SUR UN BLOC DE DEBUT DE DUMP. IL RESTE A RESTAURER
<        LE CONTEXTE PERMETTANT DE RELANCER LA RESTAURATION MULTIPLE
<        A PARTIR DU SECTEUR COURANT, SACHANT QU'ON A PERDU UN DUMP.
<        POUR RELANCER, IL SUFFIT DE REENTRER DANS REST AU POINT D'ENTREE
<        'ENTRY2'.
<
         IC          NERDKU          < COMPTABLISATION NOMBRE DE DUMPS PERDUS.
<
         BR          AENTR2          < VERS 'ENTRY2' DE 'REST'.
RPGD5:   EQU         $
<
<        BLOC LU AVEC SUCCES ET VALIDE.
<
         IC          DMRDKU+3        < ADRESSE BLOC SUIVANT.
         LA          N0BDKU
         IC          N0BDKU          < COMPTAGE.
         CP          &ADPAG0
         JE          RPGF            < BLOC BIEN NUMEROTE.
<
<        LE BLOC POSSEDE UNE NUMEROTATION INATTENDUE... C'EST QU'IL
<        DOIT FALLOIR REVENIR EN DEBUT DE CHAINE.
<
         LA          IRETAR          < INDICATEUR 'RETOUR ARRIERE AUTORISE'
         IC          IRETAR          < NON AUTORISE DESORMAIS.
         JANE        RPGD9
         LAI         MRETAR-M        < ON SIGNALE A L'UTILISATEUR QU'ON
         BSR         AENVOI          < FAIT UN RETOUR ARRIERE.
         STZ         N0BDKU
         LA          DMRDKU+3        < ON REVIENT
         SB          &ADPAG0         < EN DEBUT DE CHAINE.
         ADRI        -1,A
         STA         DMRDKU+3
<        ON VIENT DE FAIRE UN RETOUR ARRIERE. IL FAUT DONC ICI, SI L'ON
<        EST EN MODE RECHERCHE, S'ASSURER QUE L'ARESSE SECTEUR OBTENUE
<        N'EST PAS EN-DECA DE L'ADRESSE DE DEBUT DE LA ZONE DE RECHERCHE
<        DICHOTOMIQUE RENTREE PAR L'UTILISATEUR ('DEBDIC').
         CPZ         IRECH           < TEST MODE RECHERCHE.
         JE          RPGDC
         EOR         DEBDIC
         JAGE        RPGDB
< ADRESSE SECTEUR COURANTE ET 'DEBDIC' DE SIGNES DIFFERENTS.
         CPZ         DEBDIC          < IL FAUT DONC QUE 'DEBDIC' SOIT >= 0.
         JGE         RPGDC
         JMP         RPGDD
RPGDB:   EQU         $
< ADRESSE SECTEUR COURANTE ET 'DEBDIC' DE MEME SIGNE.
         LA          DMRDKU+3        < ADRESSE SECTEUR COURANTE.
         CP          DEBDIC          < DOIT ETRE >= 'DEBDIC'.
         JGE         RPGDC
< ICI, L'ADRESSE SECTEUR COURANTE EST EN-DECA DE 'DEBDIC'...
RPGDD:   EQU         $
         LAI         MSSARA-M        < ON PREVIENT...
         BSR         AENVOI
         BR          ARTCCI          < ... ET FIN DE TRAVAIL.
RPGDC:   EQU         $
         JMP         RPGD
RPGD9:   EQU         $
<
<        ON N'ACCEPTE QU'UNE SEULE FOIS LE RETOUR ARRIERE (EN DEBUT DE CHAINE)
<        AU SECOND RETOUR ARRIERE, ON PREVIENT L'UTILISATEUR QU'IL Y A ERREUR
<        DE CHAINAGE, ET ON ARRETE LE TRAVAIL.
<
         LAI         MERC-M
         BSR         AENVOI
         BR          ARTCCI          < FIN DE TRAVAIL.
<
<        CAS D'UN DUMP INCOMPLET OU PRESUME TEL.
<
RPGD8:   EQU         $
         BSR         ADFPR           < DELETE EVENTUEL FICHIER PARTIELLEMENT
                                     < RESTAURE (VOIR COMMENTAIRES DE CE S/P).
         LAD         DMRAZ           < ERASE ECRAN VISU.
         SVC         0
RPGDA:   EQU         $               < ICI, S/P 'DFPR' ET ERASE ONT ETE DEJA
                                     < FAITS.
         LAI         MERDMI-M        < MESSAGE "DUMP INCOMPLET".
         BSR         AENVOI
         WORD        '1E16           < RIEN D'AUTRE A FAIRE...
         JMP         $-1
RPGM:    EQU         $               < MEMOIRE COMMUNE (CDA).
<
<          L'ALGORITHME D'ACQUISITION D'UNE PAGE EN CDA EST LE SUIVANT :
<        - TEST VERROU COURANT 'NVC'.
<        - S'IL EST A 1, IL APPARTIENT A DUMP, DONC ATTENDRE.
<        - S'IL EST A 0, IL APPARTIENT A REST, DONC ON PEUT FAIRE UN RCDA
<          APRES QUOI ON LE FAIT PASSER A 1, ON INCREMENTE 'NVC' ETC...
<
         BSR         ATESTV          < TEST VERROU COURANT 'NVC'.
         JE          RPGM1           < VERROU = 0 : ALLONS-Y...
< VERROU = 1 : ATTENDRE...
         LAD         DMTMP2          < ON ATTEND DEUX SECONDES.
         SVC         0
         JMP         RPGM            < VERS NOUVELLE TENTATIVE.
RPGM1:   EQU         $
< VERROU = 0 : ON PEUT FAIRE LE RCDA.
         LA          AOPAG
         SLRS        1
         PSR         A               < ADRESSE MOT PAGE VIRTUELLE.
         LA          NVC             < NUMERO VERROU COURANT.
         MP          LMPM            < * NB DE MOTS PAR PAGE.
         LR          B,A
         AD          NBV             < + NB DE VERROUS (CAR LES VERROUS SONT
                                     < EN TETE DE LA ZONE CDA UTILISEE).
         AD          ADCDA           < + ADRESSE DEBUT ZONE CDA UTILISEE.
                                     < 'A' = ADRESSE CDA.
         PLR         B               < 'B' = ADRESSE PAGE VIRTUELLE.
         LX          LMPM            < 'X' = LONGUEUR.
         RCDA
< DEVERROUILLER POUR DUMP.
         BSR         ASETV
< INCREMENTER NUMERO DE VERROU COURANT 'NVC' MODULO 'NBV'.
         IC          NVC
         LA          NVC
         CP          NBV
         JL          $+2
         STZ         NVC
         JMP         RPGF            < C'EST FINI.
XWOR%1:  VAL         0
<
RPGF:    EQU         $               < FIN,REINIT PPG ET RETOUR
         LA          AOPAG
         STA         PPG
<
         PLR         A,B,X
         RSR
         PAGE
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<
<        D E C O D A G E   D K U  :
<
<
KOMP:    EQU         $
         LAD         DMRDKU
         SVC         0               < LECTURE DE LA PAGE...
<
< NOTA : S'IL Y A ERREUR,
< ON DECODE MALGRE TOUT,
< AU CAS OU IL Y AURAIT
< -2 DANS LE MOT0 :
<
         PSR         X
         CPZ         ICLEF           < Y-A-T'IL DECODAGE ???
         JE          KOMP2           < NON...
<
< OUI, DECODAGE :
<
         PSR         Y
         LA          DMRDKU+1
         SLRS        1
         SBT         0
         STA         ABUF            < GENERATION D'UN RELAI D'ACCES A LA PAGE
                                     < VIRTUELLE COURANTE...
         LX          DMRDKU+2        < X=NOMBRE D'OCTETS A CODER...
KOMP1:   EQU         $
         ADRI        -1,X
         LBY         &ABUF           < A=OCTET COURANT A CODER :
         SLRD        4               < DECONCATENATION...
         PSR         X
         LR          A,X
         LBY         &ACLEFB         < DECODAGE DES 4 PREMIERS BITS...
         SLLS        4
         LR          A,Y
         LAI         0
         SLLD        4
         LR          A,X
         LBY         &ACLEFB         < DECODAGE DES 4 DERNIERS BITS...
         ORR         Y,A
         PLR         X
         STBY        &ABUF           < ET MISE A JOUR DE LA PAGE VIRTUELLE...
         CPZR        X               < EST-CE FINI ???
         JG          KOMP1           < NON...
         PLR         Y               < OUI...
KOMP2:   EQU         $
         PLR         X
         CPZR        X
KOMP9:   EQU         $
         RSR
         PAGE
EDN:     EQU         $
<
<        E D I T I O N   D U   N O M   E N   C O U R S   S U R
<
<        L ' U N I T E   D E   S O R T I E
<
<                    NOTA:
<                                      LE NOM EST RECUPERE DANS LA ZONE
<                                    'NOM+VALEUR' (VAL)
<
         PSR         A,X
         LXI         0
EDN1:    EQU         $
         LBY         &AXVAL
         CP          CARALT          < EST-CE LA CARACTERE D'ARRET (RAPPELONS
                                     < QUE L'ABSENCE DE CE TEST EST REPRESENTE
                                     < PAR (CARALT)=0) ???
         JNE         EDN3            < NON...
         LRM         A               < OUI :
         WORD        RFINF
         PSR         A
         RSR                         < ON SIMULE UN ALT-MODE RECU...
EDN3:    EQU         $
         CPI         '04             < EOT?
         JE          EDN2
                                     < NON,STOCKER CAR
         STBY        &AXNOM
         STBY        &AXASS2
         ADRI        1,X
         JMP         EDN1
EDN2:    EQU         $
         STBY        &AXASS2         < IL FAUT L'EOT
         IF          ORDI-"S",XWOR%1,,XWOR%1
         STBY        &AXNOM          < ET LA AUSSI EN CAS DE 'RECHERCHE'.
XWOR%1:  VAL         0
         ADRI        1,X
         STX         LGN             < LONGUEUR NOM FICH/ITEM EN COURS
         STX         DMOUT+2         < LONG ('6D DE DEBUT INCLUS)
         LA          AXNOM
         SLLS        1
         ADRI        -1,A
         STA         DMOUT+1
         LAD         DMOUT
         SVC         0
         PLR         A,X
         RSR
         PAGE
R1C:     EQU         $
<
<        R E A D   1   C A R A C T E R E   S U R   C A R T E
<
<                     CE SOUS-PROGRAMME PREND 8 BITS A CHAQUE
<                    APPEL, QU'IL REND DANS 'A' (BITS 8-15),
<                    SACHANT QU'UNE CARTE CONTIENT 11 BITS UTILES
<                    PAR COLONNE.
<                      POUR RECONSTITUER UN CARACTERE QUI PEUT
<                    ETRE "A CHEVAL" SUR DEUX COLONNES OU MEME
<                    SUR DEUX CARTES, IL UTILISE LES TABLES
<                    'MSK1', 'SHF1', 'SHF2' ET LES BITS PLACES
<                    DANS 'SUI'.
<                      LORSQUE LE S/P A BESOIN DE LIRE LA CARTE
<                    SUIVANTE, IL APPELLE LE S/P 'RCARD'.
<
         LA          PBC             < POINTEUR BUFFER CARTE
         CP          ACHECK          < ON DEPASSE?
         JL          R1C1
         BSR         ARCARD          < OUI, LIRE UNE CARTE
R1C1:    EQU         $
         LX          PBC
         LA          &AXTRAV         < MOT EN COURS BUFFER CARTE
         LR          A,Y
         LX          NBM11           < INDEX MODULO 11 EN COURS
         LBY         &AXSHF1         < SHIFT1
         LR          A,X
         LR          Y,A
         SCLS        0,X
         LR          A,Y             < Y=MOT.SHIFT1
         LX          NBM11           < INDEX
         LBY         &AXMSK1         < MASQUE 1
         ANDR        A,Y             < Y=MOT.SHIFT1.MASK1
         LA          SUI             < INDICATEUR DE PASSAGE AU MOT
                                     < SUIVANT DU BUFFER CARTE
         TBT         0,X             < PASSER AU MOT SUIVANT?
         JNC         R1C3
                                     < OUI,
         IC          PBC             < POINTEUR BUFFER CARTE='+1
         LA          PBC
         CP          ACHECK          < ON DEPASSE?
         JL          R1C3
         BSR         ARCARD          < OUI, LIRE UNE CARTE
R1C3:    EQU         $
         LX          PBC
         LB          &AXTRAV         < MOT BUFFER CARTE
         LX          NBM11           < INDEX EN COURS MODULO 11
         LBY         &AXSHF2         < SHIFT2
         LR          A,X
         LR          B,A
         SCLS        0,X
         LR          A,B             < B=MOT.SHIFT2
         LX          NBM11
         LBY         &AXMSK1         < MASK1...
         CMR         A,A             < ...INVERSE...
         ANDI        '00FF           < ...ET NETTOYE
         ANDR        A,B             < B=MOT.SHIFT2.MASK1-INVERSE
         ORR         Y,B             < B=OCTET COMPLET
<
         IC          NBM11           < INDEX MODULO 11 = '+1
         LA          NBM11
         CPI         11              < ON DEPASSE?
         JL          R1C2
                                     < OUI,
         STZ         NBM11           < RAZ NBM11
         IC          PBC             < MOT SUIVANT BUFFER CARTE
R1C2:    EQU         $
         LR          B,A
         RSR                         < RETOUR, A(8-15)=OCTET LU
         PAGE
RCARD:   EQU         $
<
<        R E A D   C A R D
<
<                      CE SOUS-PROGRAMME LIT UNE CARTE, ET
<                    ASSURE LES CONTROLES DE "CHECK" ET DE
<                    SEQUENCE, AINSI QU'UNE REPRISE EVENTUELLE
<                    DE LA LECTURE SI UNE CARTE EST ERRONEE.
<                      IL ASSURE LES INITIALISATIONS ET REINITIALISATIONS
<                    NECESSAIRES ET LA GESTION DE FIN DE DECK.
<
         PSR         A,Y
         LR          K,A             < ON SAUVE LE K ACTUEL AU
         STA         SAVK            < IL Y AURAIT UNE RELECTURE SUITE
                                     < A ERREUR DE CHECKSUM OU DE
                                     < NUMEROTATION
RCD0:    EQU         $               < POINT D'ENTREE DE RELECTURE
         LAD         DMRDC           < READ CARTE
         CPZ         IRCARD          < SSI LECTURE ACTIVE
         JNE         $+2
         SVC         0
         LA          &ABC            < 1ER MOT BUFFER
         ANDI        'F0             < NETTOYAGE
         CPI         '70             < FIN PHYSIQUE?
         JNE         RCD1
                                     < OUI,
         IC          IRCARD          < INHIBITION LECTURE PHYSIQUE
         JMP         RCDFIN
<
RCD1:    EQU         $
<
<        CONTROLE DU CHECK
<
         LA          &ACHECK
         ANDI        'FFE0          < CHECK NETTOYE
         LR          A,Y
         LXI         NBCOL           < INIT COUNT
         LAI         0
         STA         &ACHECK         < RAZ CHECK
RCD2:    EQU         $               < BOUCLE DE RECALCUL CHECK
         EOR         &AXBCM1
         JDX         RCD2            < BOUCLE
         ANDI        'FFE0           < NETTOYAGE CHECK RECALCULE
         CPR         A,Y             < CHECK CORRECT?
         JE          RCD3
                                     < NON,PREVENIR ET TRAPPER
         LAI         MCHECK-M
         BSR         AENVOI
         JMP         RCDER           < VERS RELECTURE
RCD3:    EQU         $
<
<        CONTROLE DE SEQUENCE
<
         IC          NUMC            < NUMERO CARTE EN COURS
         LA          NUMC
         CP          DIXMIL          < ON ATTEINT 10000 CARTES?
         JL          RCD8
         LAI         1               < OUI,ON REPART A 1
         STA         NUMC
RCD8:    EQU         $
<
                                     < CONVERSION DECIMALE DE NUMC
         LXI         0
         LB          NUMC
RCD4:    EQU         $               < BOUCLE CONVERSION
         LAI         0
         DV          DIX             < DIVISION PAR 10
         JNV         $+2
         ACTD
         PSR         B               < ON EMPILE LE RESTE
         ADRI        1,X             < COUNT NB CHIFFRES DECIMAUX
         JAE         RCD5            < QUOTIENT NUL?
                                     < NON, ON CONTINUE
         XR          A,B
         JMP         RCD4
RCD5:    EQU         $
                                     < COMPARAISON DU NB DECIMAL RECALCULE
                                     < AVEC CELUI DU BUFFER CARTE
         LA          AFBC
         NGR         X,Y
         ADR         A,Y             < ADRESSE 1ER MOT DE STOCKAGE DE
                                     < LA NUMEROTATION SUR BUFFER CARTE
<
RCD6:    EQU         $               < BOUCLE COMPAR CHIFFRE PAR CHIFFRE
         PLR         A               < CHIFFRE DECIMAL
         PSR         X               < SVG COUNT
         LR          A,X
         LAI         0
         SBT         2,X             < SET BIT
         LR          Y,X
         LB          &AXTRAV         < MOT DU BUFFER
         XR          A,B
         ANDI        'FFF0           < NETTOYAGE
         CPR         A,B             < EGALITE CHIFFRE?
         JE          RCD7
                                     < NON,PREVENIR ET TRAPPER
         LAI         MSEQ-M
         BSR         AENVOI
         LA          NUMC            < NUMERO ATTENDU
         CPI         1
         JNE         $+2
         LA          DIXMIL
         ADRI        -1,A
         STA         NUMC            < MISE A JOUR DE 'NUMC'
RCDER:   EQU         $               < ERREUR DE CHECK OU DE NUMEROTATION
         LAI         MRELIR-M        < MESSAGE DE RELECTURE
         BSR         AENVOI
         LAD         DMCCI           < RETOUR CCI
         SVC         0
         LA          SAVK            < ON RECUPERE 'K' POUR REBOUCLER
         LR          A,K             < SUR LA LECTURE
         JMP         RCD0            < RELECTURE
RCD7:    EQU         $
         ADRI        1,Y             < CHIFFRE SUIVANT
         PLR         X               < RECUP COUNT
         JDX         RCD6            < AU SUIVANT
<
<        CHECK ET NUMEROTATION SONT CORRECTS
<        REINITS NECESSAIRES, RESTAURATIONS ET RETOUR
<
RCDFIN:  EQU         $
         LA          ABC
         STA         PBC             < POINTEUR BUFFER CARTE
         PLR         A,Y
         RSR
         PAGE
RTCCI:   EQU         $
<
<        R E T O U R   A U   C C I   A V E C   D E S A S S I G N A T I O N
<        D E S   U L   3  ET  'B.
<
         LAI         "3"
         BSR         ADESAS
         LAI         "B"
         BSR         ADESAS
         LAD         DMCCI
         SVC         0
         BR          AENTR1          < VERS ENTRY1 DE REST.
         PAGE
DESAS:   EQU         $
<
<        D E S A S S I G N A T I O N    (  !ASSIGN <UL>=S  )
<
<                    ARGUMENT:
<                                    'A' (BITS 8-15) = UL EN ASCI
<
         STBY        ASSUL           < STORE NUMERO UL
         LA          ASSS
         STA         ASS1
         LAD         DMASS
         SVC         0
         RSR
         PAGE
         IF          ORDI-"S",XWOR%1,,XWOR%1
DFPR:    EQU         $
<
<        D E L E T E   F I C H I E R   P A R T I E L L E M E N T
<
<        R E S T A U R E.
<
<          C'EST UN DELETE EVENTUEL.
<          EN EFFET, ON VIENT DE SUBIR UN DEFAUT DKU, ET 3 CAS SONT
<        POSSIBLES :
<        - SI L'ON RESTAURAIT DE L'ESPACE DISQUE, RIEN A FAIRE, C'EST
<          DESESPERE, ET CE QUI EST FAIT EST FAIT...
<        - SI L'ON RESTAURAIT UN ITEM, IL N'Y A RIEN A FAIRE NON PLUS, CAR
<          UN ITEM N'EST RESTAURE QUE LORSQU'IL EST COMPLET, ET DONC ON
<          EST SUR D'ETRE PROPRE QUOI QU'IL ARRIVE.
<        - SI L'ON RESTAURAIT UN FICHIER, ALORS CETTE RESTAURATION
<          PEUT AVOIR ETE PARTIELLE. ELLE L'AURA ETE SI L'INDICATEUR
<          'IRESTF' EST A 1. DANS CE CAS IL FAUT:
<                    1- FAIRE UN !ASSIGN 3=R
<                    2- FAIRE UN 'DLN' SUR LE NOM DU FICHIER.
<
<                       L'INDICATEUR EN QUESTION N'EST POSITIONNE QU'A
<                    BON ESCIENT, ON NE RISQUE PAS DE DETRUIRE UN FICHIER
<                    QUI N'AURAIT PAS A L'ETRE (CAS D'UN FICHIER A RESTAURER
<                    N'AYANT PU ETRE ASSIGNE : DANS CE CAS 'IRESTF' VAUT BIEN 0)
<
<          LE DELETE EVENTUEL D'UN FICHIER PARTIELLEMENT RESTAURE
<        EST FAIT QUE L'ON SOIT EN RESTAURATION DKU MULTIPLE OU CONTINUE.
<        MAIS DANS CE DERNIER CAS ON NE TENTERA PAS DE RELANCER LE DUMP
<        ENSUITE.
<
         PSR         A,B
         CPZ         IRESTF          < FICHIER EN COURS DE RESTAURATION?
         JE          DFPR1           < RIEN A FAIRE.
<
                                     < 'ASS2' CONTIENT DEJA LE NOM DU FICHIER
                                     < A DETRUIRE.
         LAI         "3"             < 'A' = UNITE LOGIQUE.
         BSR         AARDLN          < ASSIGN RELEASE ET DLN.
         STZ         IRESTF          < C'EST FINI.
<
         IC          NBDELF          < COMPTABILISATION FICHIERS DELETES,
                                     < CE COMPTEUR N'EST EXPLOITE QU'EN CAS
                                     < DE RESTAURATION MULTIPLE.
DFPR1:   EQU         $
         PLR         A,B
         RSR
         PAGE
ARDLN:   EQU         $
<
<        A S S I G N   R E L E A S E   E T   D L N
<
<        ARGUMENTS:
<                    'A' (BITS 8-15) = UNITE LOGIQUE EN ASCI.
<                    'ASS2' CONTIENT LE NOM DU FICHIER A DELETER.
<        RESULTAT:
<                    OK OU 'ACTD' SI CELA SE PASSE MAL.
<
         PSR         X
         BSR         ADESAS          < DESASSIGNATION UNITE LOGIQUE.
         LA          ASSD
         STA         ASS1
         LAD         DMASS           < !ASSIGN X=D-NOM FICHIER
         SVC         0
         JE          $+2
         ACTD
         PLR         X
         RSR
XWOR%1:  VAL         0
         PAGE
ULB:     EQU         $
<
<        C H O I X   E T   A S S I G N A T I O N   D E   L ' U L   ' B
<
<        (  S U P P O R T   A   P A R T I R   D U Q U E L   D O I T
<
<           S E   F A I R E   L A   R E S T A U R A T I O N  )
<
<
<        IL S'AGIT DE DEMANDER A L'UTILISATEUR A PARTIR DE QUEL
<        SUPPORT EXTERNE IL VEUT FAIRE LA RESTAURATION; LE SACHANT
<        ON TENTE D'ASSIGNER ET SI CE N'EST PAS POSSIBLE, ON LE DIT ET ON BOU
<        ET ON BOUCLE
<        DANS CE SP ON FIXE LA TAILLE DE
<        PAGE VIRTUELLE QUI EST FONCTION DU SUPPORT CHOISI ET
<        ON POSITIONNE TYPRST
<
<        NOTA: DE LA TAILLE DE PAGE CHOISIE DEPENDRONT
<        LES ADRESSES D'IMPLANTATION DE
<        LT (LOGUEUR TOTALE) ET VALEUR (NOM+VALEUR);
<        ON AURA:
<
<        PAGE
<        FIN PAGE
<        ZONE DE TRAVAIL             LNOM+1 MOTS (POUR FAIRE
<                                     LES CHANGEMENTS DE NOMS)
<        LT          1 MOT           LONGUEUR (EN RECOUVREMENT
<                                     ON A BUFF BUFFER FICHIER OUTPUT)
<        VALEUR      N MOTS          NOM+VALEUR
<
         IF          ORDI-"S",XWWOR%,,XWOR%
         STZ         STDKU           < EN CONTINU A PRIORI...
         STZ         IRECH           < MODE RECHERCHE = NON A PRIORI.
         STZ         NERDKU          < RAZ NOMBRE D'ERREURS IRRECUPERABLES DKU.
                                     < (RESTAURATION MULTIPLE DKU).
         STZ         IRETAR          < RAZ INDICATEUR 'RETOUR ARRIERE AUTORISE'
                                     < (POUR RESTAURATION DKU).
         STZ         IEXEC           < MODE # 'EXECUTE' A PRIORI.
XWOR%:   VAL         0
         LAI         "B"
         BSR         ADESAS          < DESASSIGNATION UL 'B
         STZ         TYPRST          < TYPE RESTAUR = 0 A PRIORI
                                     < TAILLE PAGE VIRTUELLE
                                     < A PRIORI
         LA          AOPAG0
         STA         AOPAG
         AD          LPC
         STA         AOFPAG
<
         LAI         MREST-M         < PROPOSITION SUPPORT
         BSR         AQREP           < ENVOI QUESTION, DEMANDE REPONSE
<
<        ANALYSE REPONSE
<
         CPI         "C"             < CARTES?
         JE          ULBC
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPI         "1"             < CR1 ?
         JE          ULBC
         CPI         "2"             < CR2 ?
         JE          ULBC2
XWOR%1:  VAL         0
         CPI         "F"             < FICHIER?
         JE          ULBF
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPI         "X"             < EXECUTE?
         JE          ULBX
XWOR%1:  VAL         0
         CPI         "V"             < VISU?
         JE          ULBV
         IF          ORDI-"S",XWOR%1,,XWOR%1
         CPI         "D"             < DKU?
         JE          ULBD
         CPI         "M"
         JE          AULBM           < MEMOIRE COMMUNE.
         CPI         "T"
         JE          ULBT            < MT1...
XWOR%1:  VAL         0
         JMP         ULB             < REPONSE NON RECONNUE
<
ULBC:    EQU         $               < SUPPORT CARTES
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LAI         "1"             < ASSIGNER CR1.
ULBC2:   EQU         $
         STBY        ASS5+1          < POUR ASSIGNER CR1 OU CR2.
XWOR%1:  VAL         0
         DC          TYPRST          < TYPE RESTAUR=CARTES
         LA          ASS5
         STA         ASS1
         LA          ASS5+1
         STA         ASS1+1
         LAD         DMBHTP          < DISCRIMINATION BATCH/TP
         SVC         0
         ADRI        -3,X            < 3=FONCTION INACCESSIBLE
         CPZR        X
         JE          AULBAS          < C'EST 'FONCTION INACCESSIBLE',
                                     < DONC NOUS SOMMES EN TP
         LA          ASS7            < ICI, NOUS SOMMES EN BATCH, DONC
         STA         ASS1            < IL FAUT ASSIGNER "I" ET NON "CR1"
         JMP         AULBAS          < VERS ASSIGNATION
<
ULBV:    EQU         $               < LIGNE VISU, ON A DEJE TYPRST=0
         IF          LPAC-LPAV,,XWOR%1,
         LA          AOPAG0
         AD          LPV
         STA         AOFPAG          < FIXATION TAILLE PAGE VIRTUELLE
XWOR%1:  VAL         0
         LA          ASS6            < PREPARATION ASSIGNATION
         STA         ASS1
         LA          ASS61
         STA         ASS1+1
         LAI         MQV-M           < PROPOSITION: QUELLE VISU?
         BSR         AQREP           < QUESTION, REPONSE. AU RETOUR
                                     < LA REPONSE EST DANS 'A'.
         STBY        ASS1+1          < STOCKAGE POUR ASSIGNATION
         JMP         AULBAS          < VERS ASSIGNATION
<
         IF          ORDI-"S",XWOR%1,,XWOR%1
ULBX:    EQU         $               < 'EXECUTE' DEMANDE.
         IC          IEXEC           < SET INDICATEUR 'EXECUTE'.
         JMP         ULBF            < ON FAIT MAINTENANT COMME POUR FICHIER.
XWOR%1:  VAL         0
<
ULBF:    EQU         $               < SUPPORT FICHIER
         IC          TYPRST          < TYPE RESTAUR.=FICHIER
                                     < FIXATION PAGE VIRT
         LA          AOPAG2
         STA         AOPAG
         AD          LPF
         STA         AOFPAG
         LAI         MFICH-M         < DEMANDE NOM FICHIER
         BSR         AENVOI
         LAD         DMREPF
         SVC         0
                                     < CE NOM EST LU EN ASS2,
                                     < POUR PREPARER ASSIGNATION
         LA          ASS3
         STA         ASS1
         IF          ORDI-"S",XWOR%1,,XWOR%1
AULBAS:  JMP         ULBAS
ULBT:    EQU         $               < MT1.
XWOR%1:  VAL         '0B
         LAI         XWOR%1='FA00('00FF
         STBY        ASSUL
         LA          ASST
         LB          ASST+1
         STA         ASS1
         STB         ASS1+1
         LAD         DMASS
         SVC         0               < TENTATIVE DE !ASSIGN B=MT1.
         JNE         ULBNOK          < IMPOSSIBLE !!!
         LRM         A
         BYTE        XWOR%1;'08      < POUR LIRE SUR MT1...
         JMP         ULBDT
AULBM:   JMP         ULBM            < RELAI...
ULBD:    EQU         $               < DKU
         LRM         A
         WORD        '8A00           < POUR LIRE SUR DKU...
ULBDT:   EQU         $
         STA         DMRDKU          < POUR LIRE SUR MT1 OU DKU...
         LAI         2               < TYPRST=2
         STA         TYPRST
         LA          AOPAG2          <FIXATION DE LA PAGE VIRTUELLE
         STA         AOPAG
         AD          LPD
         STA         AOFPAG
<
< DEFINITION DU SYSTEME DE DECODAGE :
<
         STZ         ICLEF           < PAS DE DECODAGE A PRIORI...
         LAI         MCLEF1-M
         BSR         AENVOI
         LAD         DMCLEF
         SVC         0               < ENTREE DE LA CLEF DE DECODAGE :
         LXI         0               < X=INDEX DES CLEFS,
         LBI         0               < POUR DETECTER LES CLEFS IDENTIQUES.
CLEF1:   EQU         $
         LBY         &ACLEF          < A=CLEF COURANTE :
         ADRI        -"0",A          < CONVERSION BINAIRE :
         JAL         CLEF9           < ERREUR ==> PAS DE DECODAGE !!!
         CPI         10
         JL          CLEF2           < C'EST UN CHIFFRE DECIMAL...
         ADRI        -"A"+"9"+1,A
         CPI         10
         JL          CLEF9           < ERREUR ==> PAS DE DECODAGE...
         CPI         16
         JGE         CLEF9           < ERREUR ==> PAS DE DECODAGE...
CLEF2:   EQU         $
         XR          A,X
         STBY        &ACLEFB         < SAUVEGARDE DE LA CLEF EN BINAIRE...
         TBT         16,X            < EXISTE-T'ELLE DEJA ???
         SBT         16,X
         XR          A,X
         JC          CLEF9           < OUI ==> PAS DE DECODAGE...
         ADRI        1,X             < A LA SUIVANTE...
         LR          X,A
         CPI         LCLEF
         JL          CLEF1           < OK, IL Y EN A UNE...
         LAI         MCLEF2-M
         BSR         AENVOI          < C'EST FINI, TOUT EST BON, ON
                                     < LE DIT,
         IC          ICLEF           < ET ON LE MEMORISE...
CLEF9:   EQU         $
ULBDX:   EQU         $
         LAI         MSTDKU-M
         BSR         AQREP           < ENVOI INTERROGATION...
         CPI         "N"
         JE          ULBDY           < MODE NORMAL : STDKU=0...
         CPI         "O"
         JNE         ULBDX           < ???
         IC          STDKU           < MODE MULTIPLE : STDKU=1...
         STZ         NBDELF          < RAZ NOMBRE DE FICHIERS PERDUS
                                     < (POUR RESTAURATION DKU MULTIPLE).
ULBDY:   EQU         $
ULBD1:   EQU         $
         LAI         MASD-M          < DEMANDE ADRESSE 1ER BLOC
         BSR         ARVAS           < READ ET VALIDATION ADRESSE SECTEUR
                                     < DKU.
         STA         DMRDKU+3
         CPZ         STDKU           < RESTAURATION DKU MULTIPLE?
         JE          ULBD5
<
< RESTAURATION DKU MULTIPLE : ON VA PROPOSER LE MODE 'RECHERCHE'.
<
         STA         DEBDIC          < BORNE INFERIEURE DE RECHERCHE
                                     < DICHOTOMIQUE POUR LE MODE RECHERCHE
                                     < EVENTUEL.
ULBD2:   EQU         $
         LAI         MRECH-M         < PROPOSITION RECHERCHE.
         BSR         AQREP           < ENVOI QUESTION ET DEMANDE REPONSE.
         CPI         "N"
         JE          ULBD5           < NON.
         CPI         "O"
         JNE         ULBD2           < REPONSE NON RECONNUE.
         IC          IRECH           < POSITIONNEMENT INDICATEUR MODE
                                     < 'RECHERCHE'.
         STZ         IFINR           < POSITIONNEMENT DE ...
         IC          IFINR           < ... L'INDICATEUR 'FIN DE RECHERCHE'
                                     < POUR PROVOQUER PAR LA SUITE L'INITIALI-
                                     < SATION D'UN RECHERCHE.
         LAI         -1
         STA         DICHM1          < INITIALISATION 'DICHOM' PRECEDENT
                                     < (CF RECHERCHE INFRUCTUEUSE).
ULBD4:   EQU         $
<
< MODE RECHERCHE DEMANDE, IL NOUS FAUT L'ADRESSE SECTEUR FIN DE ZONE
< DKU POUR DEFINIR LA ZONE DE RECHERCHE.
<
         LAI         MASFIN-M        < DEMANDE ADRESSE SECTEUR DE FIN.
         BSR         ARVAS           < READ ET VALIDATION ADRESSE SECTEUR DKU.
         STA         FINDIC          < BORNE DE FIN DE ZONE POUR LA RECHERCHE
                                     < DICHOTOMIQUE.
         EOR         DEBDIC          < POUR VALIDATION 'FINDIC' PAR RAPPORT
                                     < A 'DEBDIC'.
         JAGE        ULBD3
< 'DEBDIC' ET 'FINDIC' DE SIGNES DIFFERENTS.
         CPZ         DEBDIC          < DONC 'DEBDIC' DOIT >= 0.
         JL          ULBD4           < INACCEPTABLE.
         JMP         ULBD5           < OK.
< 'DEBDIC' ET 'FINDIC' DE MEME SIGNE.
ULBD3:   EQU         $
         LA          DEBDIC
         CP          FINDIC          < DONC IL FAUT 'DEBDIC' <= 'FINDIC'.
         JG          ULBD4           < INACCEPTABLE
ULBD5:   EQU         $
         JMP         ULBOK           < PAS D'ASSIGNATION EXLICITE DE DKU...
ULBM:    EQU         $               < MEMOIRE COMMUNE (CDA).
         LAI         3
         STA         TYPRST          < TYPRST=3.
         LA          AOPAG0
         AD          LPM
         STA         AOFPAG          < ADRESSE FIN DE PAGE VIRTUELLE.
ULBM1:   EQU         $
< ON PROPOSE D'INITIALISER LES VERROUS EN CDA.
         LAI         MINIT-M
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         "N"
         JE          ULBM2           < NE PAS INITIALISER.
         CPI         "O"
         JNE         ULBM1           < REPONSE INCORRECTE.
< INITIALISER LES 'NBV' VERROUS A LA VALEUR 'SETV'.
         STZ         NVC             < NUMERO VERROU COURANT.
         LX          NBV             < NOMBRE DE VERROUS.
ULBM3:   EQU         $
         BSR         ASETV           < SET VERROU COURANT 'NVC'.
         IC          NVC             < INCREMENTATION 'NVC' MODULO 'NBV'.
         LA          NVC
         CP          NBV
         JL          $+2
         STZ         NVC
         JDX         ULBM3
ULBM2:   EQU         $
< INITIALISATIONS.
         STZ         NVC             < VERROU COURANT INITIAL.
         LAD         DMCDA           < !CDA.
         SVC         0
         JE          $+2
         ACTD
         JMP         ULBOK
XWOR%1:  VAL         0
<
ULBAS:   EQU         $               < TENTATIVE D'ASSIGNATION
         LAI         "B"
         STBY        ASSUL
         IF          ORDI-"S",XWOR%1,,XWOR%1
         BSR         ATSTAC          < TEST ACN DE LOGON INITIAL (CE S/P
                                     < VA AUSSI POSITIONNER 'ACNC' CE QUI
                                     < PERMETTRA CI-DESSOUS UNE DEMANDE DE
                                     < LOGON ACN COURANT...).
         JNE         ULB1
         LAD         DMLGSY          < ICI, ON SAIT QUE L'ACN DE LOGON
         SVC         0               < INITIAL EST :SYS. ON SE MET DONC SOUS
                                     < :SYS POUR ASSIGNER L'UL 'B, CETTE
                                     < ASSIGNATION NE RISQUE DONC PAS DE
                                     < ETRE REFUSEE POUR DES RAISONS D'HA-
                                     < BILITATION.
ULB1:    EQU         $
XWOR%1:  VAL         0
         LAD         DMASS
         SVC         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         PSR         X               < SAVE CODE RETOUR.
         LAD         DMLGN           < LOGON SOUS ACN COURANT (ET TANT PIS
         SVC         0               < POUR CE CODE RETOUR-LA).
         PLR         X               < RESTAURATION CODE RETOUR.
         CPZR        X
XWOR%1:  VAL         0
         JE          ULBOK
                                     < ASIGNATION NON OK, ON LE
                                     < DIT ET ON BOUCLE
ULBNOK:  EQU         $
         LAI         MIMP-M
         BSR         AENVOI
         IF          ORDI-"T",XWOR%1,,XWOR%1
         JMP         ULB
XWOR%1:  VAL         0
         IF          ORDI-"S",XWOR%1,,XWOR%1
         BR          AULB
XWOR%1:  VAL         0
ULBOK:   EQU         $
<
<        SI ON FAIT UNE RESTAURATION FICHIER, ON PROPOSE
<        LA SAUVEGARDE DU FICHIER DE RESTAURATION
<        C E QUI PERMET DE LE DELETER OU NON AU FIR ET A MESURE
<        DE SON EXPLOITATION
<
<        DE PLUS, ON DEMANDE DE PRECISER SON QUANTA (EN
<        SOLAR SEULEMENT)
<
         CPZ         TYPRST          < TYPE RESTAURATION ?
         JE          ULBOK4          < VISU.
         JL          ULBOK2          < CARTES.
         IF          ORDI-"S",XWOR%1,,XWOR%1
         LA          TYPRST
         CPI         1
         JNE         ULBOK1          < DKU OU MEMOIRE COMMUNE.
XWOR%1:  VAL         0
                                     < RESTAURATION FICHIER:
ULBF2:   EQU         $               < POUR UN FICHIER, ON DEMANDE S'IL Y A
                                     < LIEU DE FAIRE UNE RECHERCHE, ET S'IL
                                     < FAUT LE SAUVEGARDER...
ULBF6:   EQU         $
         LAI         MRECH-M         < PROPOSITION RECHERCHE.
         BSR         AQREP           < ENVOI QUESTION ET DEMANDE REPONSE.
         CPI         "N"
         JE          ULBF5           < NON.
         CPI         "O"
         JNE         ULBF6           < REPONSE NON RECONNUE.
         IC          IRECH           < POSITIONNEMENT INDICATEUR MODE
                                     < 'RECHERCHE'.
         STZ         IFINR           < POSITIONNEMENT DE ...
         IC          IFINR           < ... L'INDICATEUR 'FIN DE RECHERCHE'
                                     < POUR PROVOQUER PAR LA SUITE L'INITIALI-
                                     < SATION D'UN RECHERCHE.
ULBF5:   EQU         $
ULBF9:   EQU         $               < FAUT-IL SAUVEGARDER LE FICHIER ???
         LBI         8               < FONCTION READ BLOC
         LAI         MSAUV-M         < PROPOSITION SAUVEGARDE
         BSR         AQREP           < QUESTION, REPONSE.
         CPI         "O"             < SAUVEGARDER?
         JE          ULBF1
         CPI         "N"             < NE PAS SAUVEGARDER?
         JNE         ULBF9           < REPONSE NON RECONNUE
<
< NOTA : LORSQU'ON REPOND "N" A "SAUVEGARDE?",
< LA QUESTION EST REPOSEE UNE DEUXIEME FOIS
< PAR MESURE DE SECURITE...
<
         LAI         MSAUV-M
         BSR         AQREP           < ON REDEMANDE...
         CPI         "O"
         JE          ULBF1           < SAUVEGARDE...
         CPI         "N"
         JNE         ULBF9           < ??!?!
<
< PAS DE SAUVEGARDE :
<
         ADRI        1,B             < POUR AVOIR READ-DELETE
         PSR         B               < PUISQUE C'EST READ-DELETE,ON STOCKE
         LAD         ASS2            < LE NOM DU FICHIER DE RESTAURATION
         LB          ANOMFS          < POUR SUPPRIMER CE FICHIER EN FIN
         LXI         LNOM+1          < DE TRAVAIL
         MOVE                        < STOCKAGE
         PLR         B
ULBF1:   EQU         $
         LAI         '0B             < UL
         SWBR        A,A
         ORR         A,B
         STB         DMRBLF          < UL,FONCTION(8 OU 9)
         IF          ORDI-"S",XWOR%1,,XWOR%1
ULBF3:   EQU         $
         LAI         MQFR-M          < QUANTA DU FICHIER DE RESTAURATION?
         BSR         AQREP           < QUESTION, REPONSE. AU RETOUR LA
                                     < REPONSE EST DANS 'A'.
XWORK1:  VAL         QUANTA='FA00('00FF
         CPI         XWORK1          < Q (FICH REST) = Q A PRIORI ?
         JE          ULBF4           < OUI, RIEN D'AUTRE A FAIRE
         CPI         "1"             < QUANTA 1 SPECIFIE ?
         JNE         ULBF3           < REPONSE NON RECONNUE
         LRM         A,B
         WORD        128-1*2         < TAILLE PAGE VIRTUELLE
         WORD        128*2           < TAILLE BUFFER DEMANDE SGF
         STB         DMRBLF+2        < DEMANDE SGF
         AD          AOPAG2          < ADRESSE DE FIN DE PAGE VIRTUELLE
         STA         AOFPAG          < NOUVELLE ADRESSE FIN DE PAGE
ULBF4:   EQU         $
XWOR%1:  VAL         0
         JMP         ULBOK1
ULBOK4:  EQU         $
         IF          DIALOG,XWOR%1,XWOR%1,
<
<        SI ON FAIT UNE RESTAURATION A PARTIR D'UN LIGNE VISU, ON SPECIFIE
<        UN TIME-OUT SUR LA VISU EMETTRICE.
<
         LRM         A
         WORD        '8B02           < SUR UL 'B, TIME-OUT DE 2.
         WORD        '1EA5
XWOR%1:  VAL         0
ULBOK2:  EQU         $
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<        SI ON FAIT UNE RESTAURATION CARTES OU VISU,
<        ON DEMANDE SI C'EST A PARTIR D'UN T1600 OU D'UN SOLAR
<        POUR FIXER LA TAILLE D'UN BUFFER FICHIER A RETAURER
<
         LAI         MTOUS-M         < ENVOI DEMANDE
         BSR         AQREP           < QUESTION, REPONSE.
         CPI         "S"
         JE          ULBOK3          < LA TAILLE EST DEJA CORRECTEMENT
                                     < INITIALISEE
         CPI         "T"             < T1600 ?
         JNE         ULBOK2
         LRM         A               < TAILLE DES BUFFERS FICHIERS
         WORD        128*2           < A RESTAURER
         STA         DMWBLC+2        < LONGUEUR BUFFER DE LA DEMANDE SGF
ULBOK3:  EQU         $
XWOR%1:  VAL         0
<
ULBOK1:  EQU         $
<
<        LA TAILLE DE PAGE VIRTUELLE ETANT FIXEE ON POSITIONNE
<        LES ADRESSES D'IMPLANTATION DE LT,BUFF,VALEUR
<
         LA          AOFPAG          < ADR OCT FIN PAGE VIRTUELLE
         ADRI        LNOM+1*2+2,A
         STA         AOVAL           < NOM+VALEUR
         STA         DMSTN+1         < POUR STORE NAME,=AOVAL
                                     < POUR L'INSTANT MAIS PEUT
                                     < EVOLUER AVEC LES CHAN-
                                     < GEMENTS DE NOMS
         SLRS        1
         SBT         0
         STA         AXVAL           < RELAI INDEXE MOT NOM+VALEUR
         RBT         0
         ADRI        -1,A            < MOT PRECEDENT
         STA         ALT             < RELAI MOT LONG TOTALE
         SLLS        1
         STA         AOBUFF          < BUFFER FICHIER OUTPUT
         STA         DMWDK+1         < BUFFER DK OUTPUT
         RSR
         PAGE
PRCH:    EQU         $
<
<        P R O P O S I T I O N   D E   C H A N G E M E N T S
<
<                      ON DEMANDE A L'UTILISATEUR S'IL VEUT FAIRE
<                    DES CHANGEMENTS (LES FRANCAIS AIMENT LE
<                    CHANGEMENT).
<                      CE SERONT DES CHANGEMENTS :
<                    - DE NOMS POUR LES FICHIERS ET ITEMS
<                      (ON POURRA AUSSI CHANGER LES NOMS SUR RACINE).
<                    - DE NUMEROS ET ADRESSES DISQUES POUR LES DISQUES
<                    - DE PLUS, EN SOLAR, ON POURRA CHANGER LES ACN'S A
<                      LA RESTAURATION, SOIT "MANUELLEMENT" ('ICHACN=1)
<                      SOIT AUTOMATIQUEMENT ('ICHACN'=0).
<
<        RESULTAT :
<                      L'INDICATEUR 'ICHN' RECOIT :
<                                    0  PAS DE CHANGEMENTS
<                                    1 CHANGEMENTS EVENTUELS (REST-
<                                      AURATION EN "PAS A PAS").
<                      L'INDICATEUR 'ICHACN' RECOIT (SI SOLAR ET SI
<                    ACN DE LOGON INITIAL=:SYS):
<                                    0 CHANGEMENT AUTOMATIQUE,
<                                    1 CHANGEMENT MANUEL.
<
         STZ         ICHN            < NON A PRIORI
         LAI         MCHN-M          < PROPOSITION
         BSR         AQREP           < QUESTION, REPONSE.
         IF          ORDI-"T",XWOR%1,,XWOR%1
         CPI         '04             < EOT
         JE          PRCHF
         CPI         '0D             < R/C
         JE          PRCHF
XWOR%1:  VAL         0
         CPI         "N"             < NON
         JE          PRCHF
         CPI         "O"             < OUI
         JNE         PRCH            < REPONSE NON RECONNUE
         IC          ICHN            < SET INDICATEUR
< PROPOSITION DE CHANGEMENTS "SUR RACINE".
PRCH1:   EQU         $
         LAI         MSRAC-M
         BSR         AQREP
         CPI         "N"
         JE          PRCHF           < NON.
         CPI         "O"
         JNE         PRCH1           < REPONSE INCORRECTE.
< CHANGEMENT SUR RACINE, DEMANDER 'RAC0' ET 'RAC2'.
         LAI         MRAC0-M         < DEMANDE DE RAC0.
         BSR         AENVOI
         LAD         DMRAC0
         SVC         0
         WORD        '1E35           < 'B' <-- BOX.
         ADRI        -1,B            < A CAUSE DE L'EOT.
         STB         LRAC0           < LONGUEUR DE RAC0.
         LAI         MRAC2-M         < DEMANDE DE RAC2.
         BSR         AENVOI
         LAD         DMRAC2
         SVC         0
         WORD        '1E35           < 'B' <-- BOX.
         ADRI        -1,B            < A CAUSE DE L'EOT.
         STB         LRAC2           < LONGUEUR DE RAC2.
         LAI         -1
         STA         ICHN            < SET INDICATEUR.
PRCHF:   EQU         $
         IF          ORDI-"S",XWOR%1,,XWOR%1
         BSR         ATSTAC          < TEST ACN DE LOGON INITIAL.
         JNE         PRCHF2          < CE N'ETAIT PAS :SYS...
PRCHF1:  EQU         $
         LAI         MCHA-M          < PROPOSITION.
         BSR         AQREP
         STZ         ICHACN          < A PRIORI.
         CPI         "N"
         JE          PRCHF2
         CPI         "O"
         JNE         PRCHF1          < REPONSE NON RECONNUE.
         IC          ICHACN          < CHANGEMENT "MANUEL" DEMANDE.
PRCHF2:  EQU         $
XWOR%1:  VAL         0
         RSR
<
         PAGE
CHN:     EQU         $
<
<        C H A N G E M E N T   E V E N T U E L   D E   N O M
<
<        P O U R   L ' I T E M   O U   L E   F I C H I E R   E N   C O U R S
<
<        CHANGEMENT DE NOM POR L'ITEM OU LE FICHIER
<        EN COURS, LE TRAITEMENT EST LE MEME DANS CES 2 CAS
<
<        EN ENTREE:
<        VALEUR: NOM EN COURS
<        ASS2:   IDEM
<        LGN:    LONGUEUR NOM EN COURS EOT INCLUS
<        ICHN:   =1 SI CHANGEMENT EVENTUEL
<                =0 SI PAS DE CHANGEMENT A FAIRE
<                =-1 SI CHANGEMENT SUR RACINE (RAC2 REMPLACE RAC0).
<
<        TRAITEMENT
<        SI ICHN=0 RIEN A FAIRE
<        SI ICHN=1, ON PROPOSE UN NOUVEAU
<        NOM, SI L'UTILISATEUR REPOND EOT OU R/C ON GARDE LE
<        NOM EN COURS, S'IL FOURNIT UN NOUVEAU NOM, ON PREND LES
<        DISPOSITIONS NECESSAIRES POUR QUE LA RESTAURATION SE
<        FASSE NORMALEMENT, QUE L'ON TRAITE UN FICHIER
<        OU UN ITEM
<        SI ICHN=-1, ON REGARDE SI LE NOM COURANT COMMENCE PAR RAC0,
<        AUQUEL CAS ON SUBSTITUE RAC2 A RAC0.
<
         CPZ         ICHN            < CHANGEMENT EVENTUEL?
         JE          CHNF
         JL          CHNR            < CHANGEMENT SUR RACINE.

                                     < OUI
         LAI         MNOM-M          < PROPOSITION
         BSR         AENVOI
         LAD         DMREPF          < DEMDE REPONSE DANS ASS2
         SVC         0
         WORD        '1E35           < BOX-->B
CHN4:    EQU         $
         LR          B,A
         CPI         1
         JLE         CHN2            < REPONSE DE 1 CAR DONC C'EST EOT OU
                                     < R/C, LE NOM EST A CONSERVER MAIS IL
                                     < FAUT RESTAURER LE 1ER CAR DE ASS2 QUI
                                     < QUI A ETE ECRASE,AINSI QUE
                                     < L'ADRESSE NOM+VALEUR POUR LE
                                     < STORE NAME EVENTUELLEMENT A
                                     < RESTAURER
         STB         LGN1            < LONG NOUVEAU NOM
         SB          LGN             < DELTA LONGUEUR
         LR          A,Y
         LB          DMSTN+2
         ADR         B,A
         STA         DMSTN+2         < NOUVELLE LONGUEUR STN
         LB          AOVAL
         SBR         Y,B
         STB         DMSTN+1         < NOUVELLE ADR POUR STN
<
         LA          AOVAL
         AD          LGN
         LR          A,Y
         ADRI        -1,Y            < Y-->ZONE RECEPTRICE
<
         LA          AXASS2
         SLLS        1
         AD          LGN1
         LR          A,B
         ADRI        -1,B            < B-->ZONE EMETTRICE
<
         LX          LGN1            < INIT COUNT
CHN1:    EQU         $               < BOUCLE MOVE
         PSR         X               < SVG COUNT
         LR          B,X
         LBY         &AXTRAV
         LR          Y,X
         STBY        &AXTRAV
         ADRI        -1,B
         ADRI        -1,Y
         PLR         X               < RECUP COUNT
         JDX         CHN1
         JMP         CHNF
CHN2:    EQU         $               < RESTAURER 1ER CAR DE ASS2
                                     < AINSI QUE L'ADRESSE NOM+VALEUR
                                     < POUR LE STORE NAME QUI EST
                                     < EVENTUELLEMENT A RESTAURER
         LXI         0
         LBY         &AXVAL
         STBY        &AXASS2
CHN3:    EQU         $
         LA          AOVAL
         STA         DMSTN+1
CHNF:    EQU         $
         RSR
<
<        C H A N G E M E N T   D E   R A C I N E   (RAC2 REMPLACE RAC0).
<
CHNR:    EQU         $
< COMPARER LE DEBUT DU NOM COURANT A RAC0.
         LX          LRAC0
         CPZR        X
         JE          CHNR3           < CAS RAC0 VIDE, EGALITE.
CHNR2:   EQU         $
         PSR         X
         LB          LRAC0
         SBR         X,B             < INDEX COURANT.
         LR          B,X
         LBY         &AXASS2         < CARACTERE NOM COURANT.
         CPBY        &AXRAC0         < COMPARAISON CARACTERE DE RAC0.
         PLR         X
         JNE         CHN3            < INEGALITE.
         JDX         CHNR2
CHNR3:   EQU         $
< EGALITE, SUBSTITUER RAC2 A RAC0.
< (ON CONSTRUIT LE NOUVEAU NOM DANS 'ASS2')
         LX          LRAC2
         CPZR        X
         JE          CHNR4           < RAC2 VIDE.
CHNR5:   EQU         $
         PSR         X
         LB          LRAC2
         SBR         X,B             < INDEX COURANT.
         LR          B,X
         LBY         &AXRAC2
         STBY        &AXASS2
         PLR         X
         JDX         CHNR5
CHNR4:   EQU         $
< IL NE RESTE PLUS QU'A CONSTRUIRE LA FIN DU NOUVEAU NOM.
         LA          LGN             < LONGUEUR NOM COURANT EOT INCLUS.
         SB          LRAC0
         JAG         $+2
         ACTD                        < PARCE QUE L'ON DOIT AVOIR AU MOINS 1
                                     < CARACTERE: L'EOT DE FIN DE NOM.
         LR          A,X             < NB DE CARACTERES CONSTITUANT LA FIN DU
                                     < NOUVEAU NOM.
         AD          LRAC2
         PSR         A               < LONGUEUR TOTALE NOUVEAU NOM.
         STA         DMENN+2         < POUR EDITION NOUVEAU NOM.
         LA          AOVAL
         AD          LRAC0
         LR          A,Y             < ADRESSE EMETTRICE.
         LA          AOASS2
         AD          LRAC2
         LR          A,B             < ADRESSE RECEPTRICE.
CHNR6:   EQU         $
         PSR         X
         LR          Y,X
         LBY         &AXTRAV
         LR          B,X
         STBY        &AXTRAV
         ADRI        1,Y
         ADRI        1,B
         PLR         X
         JDX         CHNR6
< EDITER LE NOUVEAU NOM, C'EST LA MOINDRE DES CHOSES...
         LAI         MNOM-M
         BSR         AENVOI
         LAD         DMENN
         SVC         0
<
         PLR         B               < FAUSSE BOX!
         JMP         CHN4
         PAGE
         IF          ORDI-"S",XWOR%1,,XWOR%1
EXEC:    EQU         $
<
<        P R O G R A M M E  ' E X E C ' :
<
<          IL EST CHARGE DE :
<
<                    - DESASSIGNER L'UL 3 (EN LAISSANT L'UL B ASSIGNEE
<                      DE FACON QUE LE FICHIER DE RESTAURATION RESTE INACESS-
<                      IBLE...
<                    - PREPARER L'EXECUTION DU 'RUNNER'.
<                    - IMPLANTER CELUI-CI.
<                    - LANCER CELUI-CI QUI LANCERA LE PROGRAMME A EXECUTER.
<
         LAI         "3"
         BSR         ADESAS          < DESASSIGNATION UL 3.
<
         LA          AOVAL           < ADRESSE OCTET NOM+VALEUR.
         AD          LGN             < + LONGUEUR DU NOM (EOT INCLUS).
         LR          A,W             < POUR TOUT A L'HEURE.
         TBT         15              < L'ADRESSE VALEUR EST-ELLE PAIRE???
         JNC         EXEC1
<
< L'ADRESSE VALEUR EST IMPAIRE, IL FAUT DONC LA DECALER DE 1 OCTET VERS LE HAUT.
<
         LR          A,Y             < ADRESSE OCTET EMETTEUR.
         LR          A,B
         ADRI        -1,B            < ADRESSE OCTET RECEPTEUR.
         LA          &ALT            < LONGUEUR NOM+VALEUR + 2.
         ADRI        -2,A            < LONGUEUR NOM+VALEUR.
         SB          LGN             < LONGUEUR (OCTETS) A DECALER.
         LR          A,X             < DANS 'X'.
EXEC2:   EQU         $
         PSR         X               < SAVE COUNT.
         LR          Y,X             < INDEX EMETTEUR.
         LBY         &AXTRAV         < LOAD OCTET.
         LR          B,X             < INDEX RECEPTEUR.
         STBY        &AXTRAV         < STORE OCTET.
         ADRI        1,Y             < SUIVANT...
         ADRI        1,B             < SUIVANT...
         PLR         X               < RESTAURATION COUNT
         JDX         EXEC2
<
EXEC1:   EQU         $
         LA          &ALT            < LONGUEUR OCTETS NOM+VALEUR+2...
         ADRI        -2,A            < LONGUEUR NOM+VALEUR.
         SB          LGN             < MOINS LONGUEUR DU NOM, EOT INCLUS.
         ADRI        1,A             < A CAUSE DES FRONTIERE D'OCTETS...
         SLRS        1               < LONGUEUR MOTS DU 'MOVE' POUR LE RUNNER,
         LR          A,X             < ET VOILA.
<
         LR          W,A
         SLRS        1               < ADRESSE EMETTEUR POUR LE MOVE DU RUNNER.
         LR          A,W             < W=ADRESSE EMETTEUR...
<
< CALCUL DE LA TAILLE MEMOIRE A DEMANDER PAR LE RUNNER AVANT LE
< LANCEMENT DU PROGRAMME.
<
         PSR         X,W             < SAUVEGARDES.
         LA          T800
         STA         &ADMM2          < 2 K OCTETS A PRIORI.
         LR          A,W             < ADRESSE MOT DE LA LONGUEUR REELLE
                                     < DU PROGRAMME.
         LA          0,W             < LONGUEUR OCTETS DU PROGRAMME.
         LYI         0               < Y=CONSTANTE ADDITIVE NULLE A PRIORI.
         JAGE        EXEC12          < OK, TAILLE>=0.
         NGR         A,A             < A=VALEUR ABSOLUE(TAILLE).
         LY          T1000           < ET Y = CONSTANTE ADDITIVE 2K MOTS.
EXEC12:  EQU         $
         STA         &ADMM2          < NOUVEAU COMPTE D'OCTETS DE LA DEMANDE MEM
         ADR         Y,A             < TAILLE REELLE DU PROGRAMME.
         ADRI        '10+'F+1*2,A    < POUR PRENDRE EN COMPTE LES '10 MOTS
                                     < RESERVES DEVANT 'SLO' PAR LE SYSTEME, LES
                                     < 'F MOTS RESERVES POUR !CALL, ET LE
                                     < MOT INACCESSIBLE AUX E/S EN FIN D'ESPACE
                                     < MEMOIRE.
         JALE        EXECB           < ERREUR DE TAILLE.
         CP          T800            < 1K MOTS ?
         JLE         EXEC3           < C'EST FAIT.
         LY          T1000           < NON,ALLONS VOIR 2K ET LA SUITE...
         LXI         6               < 6 TAILLES SONT RECONNUES:
                                     < 2,4,6,8,10 ET 12K.
EXEC11:  EQU         $
         CPR         Y,A             < LA TAILLE COURANTE SUFFIT?
         JLE         EXEC10          < OUI.
         XR          A,Y             < NON,
         AD          T1000           < ON PASSE 2K AU-DESSUS.
         XR          A,Y
         JDX         EXEC11          < AU SUIVANT...
         JMP         EXECB           < ERREUR, NON DISPONIBLE!
EXEC10:  EQU         $
         STY         &ADMM2          < STOCKAGE TAILLE DANS LA DEMANDE
                                     < POUR LE RUNNER.
         JMP         EXEC3
EXECB:   EQU         $               < ERREUR FATALE.
         ACTD
EXEC3:   EQU         $
<
<
< MOVE DU RUNNER VERS LA MEMOIRE BASSE.
<
         LRM         A,B,X
         WORD        RUNNER          < EMETTEUR.
         WORD        XIMPL           < RECEPTEUR (ADRESSE D'IMPLANTATION).
         WORD        RUNF-RUNNER     < LONGUEUR DU RUNNER.
         MOVE
< RUN DU RUNNER.
         PLR         X,W             < RESTAURE LONGUEUR PROGRAMME.
         LRM         A,L,K
         WORD        XMEM            < ADRESSE DEMANDE MEMOIRE.
         WORD        'F              < ADRESSE RECEPTEUR POUR LE MOVE DU RUNNER.
         WORD        XIMPL-2         < PILE K AU DEBUT DE L'ESPACE...
         WORD        '0001           < POUR '1E16 EVENTUEL.
         BR          ARUN
XWOR%1:  VAL         0
         PAGE
GESTM:   EQU         $
<
<        G E S T I O N   M E M O I R E   (  A J U S T E M E N T  )
<
<        GESTION MEMOIRE: SE S/P EST APPELE A CHAQUE FOIS QU'ON
<        S'APPRETE A FAIRE UNE RESTAURATION FICHIER OU ITEM
<        CE S/P AJUSTE L'ESPACE MEMOIRE: IL FAUT EN EFFET QUE
<        ADR OCT(NOM+VALEUR)+ (A)   TIENNE DANS L'ESPACE MEMOIRE
<        SANS QUE CELUI-CI SOIT SURDIMENSIONNE.
<
<        NOTA: QUAND IL S'AGIT D'UN FICHIER, LE BUFFER FICHIER A
<        DUMPER EST EN RECOUVREMENT AVEC LA ZONE LT CELLE-CI ETANT
<        D'ADRESSE: ADRESSE(NOM-VALEUR) -  1  --> DONC LE BUFFER
<        FICHIER EST EN RECOUVREMENT AVEC LA ZONE NOM+VALEUR SUR
<        QUANTA*128-1 MOTS; DANS LE S/P 'DFICH' ON A MIS
<        DANS LE REGISTRE 'A' LE NOMBRE QUANTA*128-1
<        NOTA2:QUAND IL S'AGIT D'UN ITEM, ON A DANS (A) LA LONGUEUR
<        EQUIVALENTE A UNE "BOX"
<
         PSR         A
         LR          A,B
         LA          AOVAL
         ADR         B,A
         ADRI        '10*2-1,A       < '1O MOTS NON ATTEIGNABLES
         SLRS        12
         ADRI        1,A
         SLLS        12              < A=ESPACE NECESSAIRE
         CP          ESPACE          < ESPACE ACTUEL CORRECT?
         JE          GESTMF
         STA         ESPACE
         LAD         DMGETM          < NON,DEMANDE D'ALLOCATION
         SVC         0
         JE          $+2
         ACTD
GESTMF:  EQU         $
         PLR         A
         RSR
         IF          ORDI-"S",XWOR%1,,XWOR%1
         PAGE
SETV:    EQU         $
<
<        S E T   V E R R O U   C O U R A N T   ' N V C '   E N   C D A.
<
         PSR         A,B,X
         LRM         B               < ADRESSE DE LA VALEUR DE SET.
         WORD        VSET
SRSET:   EQU         $
         LA          NVC             < NUMERO VERROU COURANT.
         AD          ADCDA           < ADRESSE CDA VERROU COURANT.
         LXI         1               < LONGUEUR.
         WCDA
         PLR         A,B,X
         RSR
RSETV:   EQU         $
<
<        R E S E T   V E R R O U   C O U R A N T   ' N V C '   E N   C D A.
<
         PSR         A,B,X
         LRM         B               < ADRESSE DE LA VALEUR DE RESET.
         WORD        VRSET
         JMP         SRSET           < VERS LE WCDA.
TESTV:   EQU         $
<
<        T E S T   V E R R O U   C O U R A N T   ' N V C '   E N   C D A.
<
         PSR         A,B,X,W
         LRM         B               < ADRESSE DE STOCKAGE DE LA VALEUR LUE.
         WORD        VTEST
         LR          B,W             < POUR TEST ULTERIEUR.
         LA          NVC             < NUMERO VERROU VOURANT.
         AD          ADCDA           < ADRESSE DU VERROU EN CDA.
         LXI         1               < LONGUEUR.
         RCDA
         CPZ         0,W             < POUR TEST EN RETOUR.
         PLR         A,B,X,W
         RSR
VSET:    WORD        1               < VALEUR DU SET.
VRSET:   WORD        0               < VALEUR DU RESET.
VTEST:   DZS         1               < VALEUR A TESTER.
XWOR%1:  VAL         0
         PAGE
CONVA:   EQU         $
<
<        S/P DE CONVERSION D'UN MOT EN ASCI
<
<        ARGUMENT:
<                    A = MOT A TRADUIRE
<                    Y = ADRESSE OCTET DE RANGEMENT DU RESULTAT
<
         PSR         A,B,X,Y         < SAUVEGARDES
<
         ADRI        3,Y             < ADRESSE OCTET DERNIER CHIFFRE
         PSR         A
         LXI         4               < INIT COUNT
CONVA1:  EQU         $
         PLR         A
         SLRD        4
         PSR         A
         SLLD        4
         ANDI        'F              < RECUPERATION CHIFFRE HEXA
         CPI         '9
         JLE         $+2
         ADRI        7,A
         ADRI        '30,A           < CARACTERE ASCI
         PSR         X               < SVG COUNT
         LR          Y,X             < INDEX CHIFFRE EN COURS
         STBY        &AXTRAV
         ADRI        -1,Y            < INDEX CHIFFRE SUIVANT
         PLR         X               < RECUPERATION COUNT
         JDX         CONVA1
<
         PLR         A               < A NE PAS OUBLIER !
         PLR         A,B,X,Y         < RESTAURATIONS
         RSR
         PAGE
<
<        CONVERSION EN BINAIRE D'UN NOMBRE HEXADECIMAL SAISI
<        EN ASCI (PAR EXEMPLE, NUMERO DE SECTEUR)
<
<        ARGUMENTS:
<                    'A' = ADRESSE OCTET DES 4 CARACTERES ASCI
<
<        RESULTAT:
<                    'A' = NOMBRE EN BINAIRE, A VALIDER EN FAISANT AU RETOUR:
<                                         JE     OK         OU
<                                         JNE    ERREUR
<
CONVH:   EQU         $
         PSR         B,X,Y,W         < SAUVEGARDES
         LR          A,Y             < Y = ADRESSE CARACTERE EN COURS
         LXI         4               < INIT COUNT
CONVH1:  EQU         $
         LR          X,W             < SAUVEGARDE COUNT
         LR          Y,X             < INDEX CARACTERE
         LBY         &AXTRAV         < CARACTERE
         CPI         "0"
         JL          CONVH3          < ERREUR
         CPI         "9"
         JLE         CONVH2
         CPI         "A"
         JL          CONVH3          < ERREUR
         CPI         "F"
         JG          CONVH3          < ERREUR
         ADRI        -7,A
CONVH2:  EQU         $
         ADRI        -'30,A
         SLLS        12
         SCLD        4               < CHIFFRE HEXA DANS 'B'
         ADRI        1,Y             < CARACTERE SUIVANT
         LR          W,X             < RESTAURATION COUNT
         JDX         CONVH1          < AU SUIVANT
<
         SLLD        16              < CONVERSION OK
         JMP         CONVH9
<
CONVH3:  EQU         $
         LBI         1               < ERREUR
CONVH9:  EQU         $
         CPZR        B               < POUR TEST AU RETOUR.
         PLR         B,X,Y,W         < RESTAURATIONS
         RSR
         PAGE
QREP:    EQU         $
<
<        E N V O I   Q U E S T I O N   E T   D E M A N D E   R E P O N S E
<
<                      LA REPONSE EST DE 1 CARACTERE (PAR EXEMPLE
<                    OUI/NON).
<
<        ARGUMENT:
<                    'A' = ARGUMENT D'APPEL DU S/P ENVOI POUR
<                          POSER UNE QUESTION.
<
<        RESULTAT:
<                    'A' ( 8-15 ) = REPONSE.
<
<        ATTENTION:
<                    DETRUIT 'X'.
<
         BSR         AENVOI          < ENVOI QUESTION
         LAD         DMREP           < DEMANDE REPONSE
         SVC         0
         LBY         REP             < CHARGEMENT REPONSE DANS 'A'.
         RSR
         PAGE
ENVOI:   EQU         $
<
<        ENVOI D'UN MESSAGE SUR UL '02
<
<        EN ENTREE
<
<        A=DEPLACEMENT MOTS DU MESSAGE A ENVOYER PAR RAPPORT
<          A M. TOUT MESSAGE EST DELIMITE PAR '00
<
<
<        NOTA: ON A
<                    EN TABLE:     M:    EQU    $+256
<                                  MES1: ASCI   "TEXTE..."
<                                        WORD   0
<                    EN COMMON:    AM:  WORD   M
<                    APPEL PAR:          LAI    MESI-M
<                                        BSR    AENVOI
<
         PSR         A,X
         AD          AM              < @ MOT MESSAGE
         ADR         A,A             < @ OCT MESSAGE
         STA         DMOUT+1
         STZ         DMOUT+2
         LR          A,X
ENV1:    EQU         $               < BOUCLE JUSQU'A DELIM '00
         LBY         &AXTRAV
         JAE         ENV2
         IC          DMOUT+2         < LONGUEUR='+1
         ADRI        1,X
         JMP         ENV1
ENV2:    EQU         $
         LAD         DMOUT
         SVC         0
         PLR         A,X
         RSR
         IF          ORDI-"S",XWOR%1,,XWOR%1
         PAGE
<
<        T E S T   A N D   D E L E T E.
<
<        - ARGUMENTS:
<
<                    - 'IDELAR', INDICATEUR OPTION "DELETE AND REST":
<                      = 0 : OPTION INACTIVE,
<                      # 0 : OPTION ACTIVE.
<                    - 'A' = ADRESSE   O C T E T   DU NOM COURANT TERMINE
<                      PAR CTRL-D.
<                    - 'C' BASE LE COMMON.
<                    - 'L' BASE LE LOCAL.
<
<        - RESULTAT:
<                    - AU RETOUR, FAIRE:
<                      JE              L'ENTITE COURANTE A ETE DETRUITE.
<                      JNE             L'ENTITE COURANTE N'A PAS ETE DETRUITE.
<                    - 'NBEND', NOMBRE D'ENTITES NON DELETEES A RECU +1 SI
<                      ET SEULEMENT SI L'OPTION "DELETE AND REST" ETAIT
<                      ACTIVE, QU'IL EXISTAIT UNE ENTITE PORTANT LE
<                      NOM COURANT ET QUE L'ON N'A PAS PU DELETER CETTE
<                      ENTITE (CAS D'UN FICHIER DEJA ASSIGNE PAR EXEMPLE).
<
TDMDS:   ASCI        "!ASSIGN 4="
         BYTE        "S";'04
FTDMDS:  EQU         $
TDMASD:  ASCI        "!ASSIGN 4=D-"  < LE NOM EST EN TETE DE 'TDBUF' !
TDBUF:   DZS         '7F-'48-6+1+1
<
<        LOCAL DU S/P 'TAD'.
<
         LOCAL
TDLOC:   EQU         $
                                     < EOT INCLUS.
AXTDBU:  WORD        TDBUF,X
TDDSAS:  WORD        '0002           < DESASSIGNATION..
         WORD        TDMDS-ZERO*2
         WORD        FTDMDS-TDMDS*2
TDASD:   WORD        '0002           < ASSIGNATION DELETE.
         WORD        TDMASD-ZERO*2
         WORD        80
TDLON:   WORD        '8502           < SGN LOAD NAME.
         WORD        TDBUF-ZERO*2
         WORD        '7F-'48-6+1*2+1
         WORD        -1
TDDLN:   WORD        '8302           < SGN DELETE NAME.
         WORD        TDBUF-ZERO*2
         WORD        '7F-'48-6+1*2+1
         WORD        -1
         PROG
TAD:     EQU         $
         PSR         A,B,X,Y
         PSR         W
<
         CPZ         IDELAR          < DELETE DEMANDE ?
         JE          TADF1
<
< INITIALISATIONS.
<
         LRM         W               < BASE DU LOCAL DE 'TAD'.
         WORD        TDLOC+'80
         USE         W,TDLOC+'80
<
< DETERMINATION DE LA LONGUEUR DU NOM COURANT ET, EN MEME TEMPS, STOCKAGE
< DE CE NOM EN TETE DU BUFFER DE 'TAD'.
<
         LR          A,X             < ADRESSE OCTET EMETTRICE.
         LYI         0               < LONGUEUR COURANTE.
         LB          TDLON+1         < ADRESSE OCTET RECEPTRICE.
TAD1:    EQU         $
         PSR         X
         LBY         &AXTRAV
         LR          B,X
         STBY        &AXTRAV
         ADRI        1,Y             < NOUVELLE LONGUEUR COURANTE.
         ADRI        1,B             < NOUVELLE ADRESSE RECEPTRICE.
         PLR         X
         ADRI        1,X             < NOUVELLE ADRESSE EMETTRICE.
         CPI         '04             < EOT ?
         JNE         TAD1
<
< SGN LOAD NAME.
<
         LAD         TDLON
         SVC         0
         JE          $+2
         ACTD
<
< TESTS POUR SAVOIR SI CE NOM DESIGNE UN FICHIER OU UN ITEM (CF LE S/P 'TSTFI'
< DE DUMP QUI FAIT AUSSI CE TRAVAIL). IL S'AGIRA D'UN FICHIER SI LES 3 TESTS
< CI-DESSOUS SONT POSITIFS.
<
         WORD        '1E35           < 'B' RECOIT LA 'BOX'.
<
< TEST 1.
<
         LAI         '7F-'48-6+1*2
         SBR         Y,A
         CPR         B,A
         JNE         TAD2
<
< TEST 2.
<
         LXI         '7E-'48-6
         LA          &AXTDBU
         CPI         NSPSTN+X123X
         JNE         TAD2
<
< TEST 3.
<
         LXI         '7F-'48-6
         LA          &AXTDBU
         SLRS        8
         CPI         1
         JG          TAD2
<
< C'EST PROBABLEMENT UN FICHIER: TENTER UN ASSIGN DELETE.
<
         LAD         TDDSAS          < DESASSIGNATION UL 4.
         SVC         0
         LAD         TDASD           < !ASSIGN DELETE.
         SVC         0
         JNE         TAD3            < DELETE REFUSE.
         JMP         TAD4            < DELETE ACCEPTE.
TAD2:    EQU         $
<
< C'EST UN ITEM, FAIRE UN DLN.
<
         LAD         TDDLN
         SVC         0
         JE          $+2
         ACTD
TAD4:    EQU         $
         LBI         0               < DELETE ACCEPTE.
         JMP         TADF2
TAD3:    EQU         $
         IC          NBEND           < NOMBRE D'ENTITES NON DELETABLES RECOIT
                                     < + 1.
TADF1:   EQU         $
         LBI         1               < DELETE NON DEMANDE OU IMPOSSIBLE.
TADF2:   EQU         $
         CPZR        B               < POUR TEST EN RETOUR.
<
         PLR         W
         PLR         A,B,X,Y
         RSR
XWOR%1:  VAL         0
FIN:     EQU         $               < FIN DU PROGRAMME
TOTO:    VAL         FIN-ZERO*2
PAG0:    EQU         ZERO+TOTO
PAG2:    EQU         ZERO+TOTO+2
         LST
         END



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