NMPROC:  VAL         "LP"            < NOM DU PROCESSEUR.
         IDP         "LP - RELEASE 16/02/1980"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEFINITION CMS5#
         IF          ORDI-"S",XWOR%,,XWOR%
NBTVIN:  VAL         TVIN=0
NBTVIN:  VAL         15-NBTVIN       < NUMERO DU BIT TVIN.
XWOR%:   VAL         0
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU PROCESSEUR.
         WORD        0
PIMAGE:  EQU         $
         LRP         L               < A NOTER : P='12 !!!
         BR          -2,L            < ENTRE DANS LE PROCESSEUR 'TN'.
         PAGE
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
         PAGE
         EOT         #SIP IMAGE 256#
NOM:     EQU         ZERO+PILE+5-LNOM-2  < NOM DE L'IMAGE VIDEO.
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO PROPREMENT DITE.
         IF          ORDI-"S",XWOR%,,XWOR%
ENTIM:   EQU         IMAG-LENTIM     < EN-TETE IMAGE (INTERPOLATION VIDEO SOLAR)
XWOR%:   VAL         0
RECORD:  EQU         IMAG+LIMAG      < IMAGE DYNAMIQUE (IMAGE 2).
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20:     VAL         1024/DY         < NBRE DE LIGNES/IMAGE.
X21:     VAL         CNMPL*16        < NBRE DE POINTS/LIGNE.
         IF          X20-X21,,X100,
         IF          ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100:    VAL         0
         PAGE
<
<
<        L O C A L  :
<
<
<
< MESSAGES :
<
M4:      BYTE        11;'6D
         ASCI        "#SEGMENTS="
M5:      BYTE        13;'6D
         ASCI        "#SEG GENERES"
M9:      BYTE        5;'6D
         ASCI        "NOM="
M10:     BYTE        6;'6D
         ASCI        "VISU? "
M11:     BYTE        7;'6D
         ASCI        "VIDEO?"
M12:     BYTE        10;'6D
         ASCI        "COMPTAGE? "
M13:     BYTE        11;'6D
         ASCI        "PAS A PAS?"
M15:     BYTE        11;'6D
         ASCI        "SEGMENT 1="
M16:     BYTE        11;'6D
         ASCI        "SEGMENT 2="
M17:     BYTE        20;'6D
         ASCI        "OAB INTERMEDIAIRES? "
M18:     BYTE        13;'6D
         ASCI        "POINT-POINT?"
<
< CARTES CONTROLES :
<
MBN:     ASCI        "!ASSIGN B=N,"
FB:      ASCI        "FB"
IDBN:    BYTE        0;'04
LNFIC:   VAL         19              < NBRE DE MOTS D'UN NOM.
MFIC:    ASCI        "!ASSIGN A="
MOFIC:   ASCI        "O,"
LMFIC:   VAL         $-MFIC          < LONGUEUR DU DEBUT DE !ASSIGN.
MNFIC:   DZS         LNFIC           < NOM DU FICHIER.
         BYTE        '04;0           < PAR PRUDENCE.
MBO:     ASCI        "!ASSIGN B=O,FB"
IDBO:    BYTE        0;'04
MAC:     ASCI        "!ASSIGN A="
         BYTE        "S";'04
MBCS:    ASCI        "!ASSIGN B="
         BYTE        "S";'04
MBC:     ASCI        "!ASSIGN B="
         BYTE        "R";'04
<
< BUFFERS SGF :
<
MAXBUF:  VAL         128-4/4*4
         LOCAL
LOC:     EQU         $
<
< SEGMENT GRAPHIQUE :
<
NOMSEG:  WORD        0               < VALIDATION EN ZDC.
SEG:     DZS         4
LONSEG:  VAL         $-NOMSEG*2
X:       VAL         1
Y:       VAL         0
CURSOR:  BYTE        "F";0
         DZS         2
<
< MESSAGES ET BUFFERS :
<
MINT:    BYTE        2;'6D
         ASCI        "> "
MDIS:    BYTE        5;"="
REP:     DZS         2
MERR:    BYTE        3;'6D
         ASCI        "??"
M1:      BYTE        11;'6D
         ASCI        "ENVOI ZDC?"
M2:      BYTE        7;'6D
         ASCI        "SEUIL="
M3:      BYTE        5;'6D
         ASCI        "SGF?"
AM4:     WORD        M4
AM5:     WORD        M5
M6:      BYTE        7;'6D
         ASCI        "VIDEO?"
M7:      BYTE        9;'6D
         ASCI        "CURSEUR?"
M8:      BYTE        5;'6D
         ASCI        "ZDC?"
AM9:     WORD        M9
AM10:    WORD        M10
AM11:    WORD        M11
AM12:    WORD        M12
AM13:    WORD        M13
M14:     BYTE        1;">"
AM15:    WORD        M15
AM16:    WORD        M16
AM17:    WORD        M17
AM18:    WORD        M18
<
< DEMANDES A CMS4 :
<
DEMMEM:  WORD        '0004           < DEMANDE D'ALOCATION 8K MOTS.
RELMEM:  WORD        '0004           < DEMANDE DE RETOUR A 4K MOTS.
         WORD        '6000           < ALLOCATION 12K MOTS.
         WORD        '2000
DEMCCI:  WORD        '0001           < APPEL DU CCI.
DEMSGN:  WORD        '0402           < DEMANDE D'ACCES AU SGN OVERLAY.
         WORD        BRANCH-ZERO*2   < @OCTET DE LA BRANCHE.
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMOUT:  WORD        '0202           < SORTIE D'UN MESSAGE.
         WORD        MINT-ZERO*2
         WORD        2
DEMH:    WORD        '0101           < ENTREE 4 CARACTERES.
         WORD        REP-ZERO*2
         WORD        4
DEMIN:   WORD        '0101           < ENTREE SUR LE TERMINAL.
         WORD        REP-ZERO*2
         WORD        1
DEMREP:  EQU         DEMIN
DEMNOM:  WORD        '0101           < ENTREE DU NOM D'UN FICHIER
         WORD        MNFIC-ZERO*2    < A LIRE POUR EMISSION.
         WORD        LNFIC*2
DEMSGF:  WORD        '0008           < RECUPEARTION DE BUFESC.
         WORD        BUFCO
         WORD        LBUFES*2
         WORD        0               < ZDC INVALIDE.
DEMCOP:  WORD        '0402           < DEMANDE DE STORE D'UN NOM EN
         WORD        BUFCON          < VUE DE FAIRE UN CHANGEMENT
         WORD        LBUFES-LMFIC*2  < DE NOM D'UN FICHIER.
         WORD        -1
DEMNO1:  WORD        '0101           < ENTREE DU NOM A DONNER
         WORD        BUFCON          < AU FICHIER TEMPORAIRE
         WORD        LNFIC*2         < FB.
OG:      WORD        '0103           < OPEN GRAPHIQUE.
CU:      WORD        '0106           < MISE EN FONCTION CURSEUR.
         WORD        0
LCU:     WORD        '0109           < LECTURE GRAPHIQUE.
         WORD        CURSOR-ZERO*2
         WORD        6
CG:      WORD        '0104           < CLOSE GRAPHIQUE.
WG:      WORD        '020A           < ECRITURE GRAPHIQUE.
         WORD        SEG-ZERO*2
         WORD        8
STOGS:   WORD        '000A           < ENVOI EN ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0
GETGS:   WORD        '0008           < LECTURE ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        SEG-NOMSEG*2
         WORD        'C000
DEMGS:   WORD        '0008           < LECTURE SEGMENT ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0
DELGS:   WORD        '000A           < ECRITURE VALIDATION ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        SEG-NOMSEG*2
         WORD        'C000
SGFW1:   WORD        '0B02           < ECRITURE SGF.
         WORD        BUF1O
         WORD        256
         WORD        0
SGFR1:   WORD        '0B09           < LECTURE DELETE SGF.
         WORD        BUF1O
         WORD        256
         WORD        0
SGFO1:   WORD        '0B04           < OPEN NEW=4, OLD=5.
         WORD        1               < CLEF 1.0
         WORD        0
SGFC1:   WORD        '0B07           < CLOSE SAVE=7, RELEASE=6.
SGFR2:   WORD        '0A08           < LECTURE SAVE.
         WORD        BUF2O
         WORD        128*2
SGFO2:   WORD        '0A05           < OPEN OLD 1.0.
         WORD        1
         WORD        0
SGFC2:   WORD        '0A07           < CLOSE SAVE 1.0.
DEMDB:   WORD        '0302           < DELETE NOM 'FB'.
         WORD        FB-ZERO*2
         WORD        4
         WORD        -1
CCII:    WORD        '0002           < ACCES CCI INTERPRETATIF.
         WORD        0
         WORD        80
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < DEMANDE DE STABILISATION ET / OU
                                     < TRACE VIDEO.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        0               < PAS DE COULEUR A PRIORI...
INIMAG:  WORD        '8A01           < DEMANDE ENTREE IMAGE.
         WORD        RECORD-ZERO*2
         WORD        LIMAG*2
         WORD        TVIN+TVPV
XWOR%:   VAL         0
<
< RELAIS DIVERS :
<
AIMAG1:  WORD        IMAG-1,X        < ACCES A L'IMAGE STATIQUE.
AIMAG2:  WORD        RECORD-1,X      < ACCES A L'IMAGE DYNAMIQUE.
AIMA1:   WORD        IMAG            < @IMAGE STATIQUE.
AIMA2:   WORD        RECORD          < @IMAGE DYNAMIQUE A PRIORI.
ANOM:    WORD        NOM             < ACCES AU 1ER MOT DU NOM DE
                                     < L'IMAGE STATIQUE (IMAGE 1).
AI2:     WORD        ITEM2-1,X       < ACCES A L'EN-TETE ITEM2.
AREP:    WORD        REP,X
ABDISP:  EQU         AREP
AMBN:    WORD        MBN
AIDBN:   WORD        IDBN
AMBCS:   WORD        MBCS
AMFIC:   WORD        MFIC
AMBO:    WORD        MBO
AIDBO:   WORD        IDBO
AMAC:    WORD        MAC
AMBC:    WORD        MBC
ASGF1:   WORD        BUFSGF+1,X      < ACCES 1ER BUFFER SGF.
ASGF2:   WORD        BUF2M+1,X       < ACCES 2EME BUFFER SGF.
ACCI:    WORD        CCI             < ACCES CCI INTERPRETATIF.
ADF:     WORD        DF              < DELETE FICHIERS 'FA' ET 'FB'.
ASTBU1:  WORD        STBUF1          < STORE DANS 1ER BUFFER SGF.
ALBU1:   WORD        LBUF1           < ACCES X,Y DANS BUFFER SGF 1.
ALBU2:   WORD        LBUF2           < ACCES X,Y DANS BUFFER SGF 2.
AOVL:    WORD        OVL             < ROUTINE DE CHARGEMENT OVERLAYS.
AGOGE:   WORD        GOGE            < RETOUR A 'GE'.
         IF          ORDI-"T",XWOR%,,XWOR%
ASP1:    WORD        SP1             < ROUTINE MAITRE ENREGISTREMENT TV.
ASP2:    WORD        SP2             < ROUTINE MAITRE DIFFUSION TV.
ASP3:    WORD        SP3             < STABILISATION IMAGE VIDEO.
AWAIT:   WORD        WAIT            < ATTENTE DE CHANGEMENT DE TRAME.
XWOR%:   VAL         0
ATRAME:  WORD        TRAME           < LECTURE D'UNE TRAME VIDEO.
AGRAVE:  WORD        GRAVE           < CALCUL CENTRE DE GRAVITE
                                     < D'UNE TRAME.
         IF          ORDI-"T",XWOR%,,XWOR%
ADICO:   WORD        DICO            < TRACE DICHOTOMIQUE.
XWOR%:   VAL         0
ATRACE:  WORD        TRACE           < TRACE SEGMENT VIDEO.
AGRVI:   WORD        GRVI            < TRACE VIDEO A PARTIR DE 'SEG'.
         IF          ORDI-"T",XWOR%,,XWOR%
ASET:    WORD        SET             < MISE DE (X,Y) A 1.
XWOR%:   VAL         0
APRINT:  WORD        PRINT           < EMISSION D'UN MESSAGE.
ADRAW:   WORD        DRAW            < AFFICHAGE UN SEGMENT GRAPHIQUE.
AINTER:  WORD        INTER           < ADRESSE D'INTERROGATION.
AINTEA:  WORD        INTERA
ASEND:   WORD        SEND            < ENVOI EN ZDC.
ASENDP:  WORD        SENDP           < ENVOI D'UN SEGMENT OU DE 2
                                     < COUPLES DE POINTS, ET DES OAB
                                     < INTERMEDIAIRES EVENTUEL...
ASENDT:  WORD        SENDT           < SEND+TEST DE FIN.
ASENDS:  WORD        SENDS           < ENVOI 1 SEGMENT AU SGF.
AINSGF:  WORD        INSGF           < INITIALISATION ACCES SGF.
AEDIT:   WORD        EDIT            < EMISSION DU BON NOMBRE DE
                                     < SEGMENTS.
AENTER:  WORD        ENTER           < ENTREE REPONSE O/N.
         IF          ORDI-"S",XWOR%,,XWOR%
AENTCL:  WORD        ENTCL           < ENTREE REPONSE O/N/1/2/3.
XWOR%:   VAL         0
AHEX:    WORD        HEX             < CONVERSION HEXA-->BINAIRE.
ADISP:   WORD        DISP            < EDITION HEXADECIMALE.
ALOC12:  WORD        LOC12           < PASSAGE 4K --> 12K.
AOAB:    WORD        ZOAB            < ENVOI EVENTUEL OAB INTERMEDAIRES.
ASOAB:   WORD        SOAB            < INTERROGATION 'FAUT-IL ENVOYER
                                     < LES 'OAB' INTERMEDIARES ???'.
ASPOIN:  WORD        SPOIN           < FAUT-IL ENVOYER UN SEGMENT OU
                                     < 2 POINTS DOUBLES ???
<
< CONSTANTES ET INDICATEURS :
<
NGE:     WORD        "GE"            < NOM DE L'OVERLAY 'GE'.
ACNSYS:  ASCI        ":SYS"          < ACN DU SYSTEME.
NMOTS:   WORD        2*LTNI          < LONGUEUR TOTALE DES 2 ITEMS.
ALIMAG:  WORD        LIMAG           < LONGUEUR MOTS DE L'IMAGE VIDEO.
KIN:     WORD        -1              < COMPTEUR DES ENTRIES DANS 'TN'.
         IF          ORDI-"T",XWOR%,,XWOR%
WAITR:   WORD        10000           < NBRE DE 'JDX $' A EFFECTUER POUR
                                     < TEMPORISER LE RECORD VIDEO.
XWOR%:   VAL         0
KPT:     WORD        0               < NOMBRE DE POINTS D'UNE TRAME.
XC:      DZS         2               < SIGMA(X).
YC:      DZS         2               < SIGMA(Y).
MOTC:    WORD        0               < MOT COURANT DE L'IMAGE.
XMOTC:   WORD        0               < X(MOT COURANT DE L'IMAGE).
NLIG:    WORD        1024/DY-1       < NBRE DE LIGNES IMAGE.
NPPL:    WORD        CNMPL*16-1      < NBRE DE POINTS/LIGNE-1.
NMPL:    WORD        CNMPL           < NBRE DE MOTS/LIGNE.
MASKI:   WORD        0               < VALEUR A DONNER A L'IMAGE
                                     < LORS DE LA COMMANDE 'Z'.
XG:      WORD        0               < CENTRE DE GRAVITE VIDEO.
YG:      WORD        0               < CENTRE DE GRAVITE VIDEO.
SEUIL:   WORD        5               < SEUIL AU DELA DUQUEL L'IMAGE
                                     < EST DECRETEE NON VIDE.
ITEST:   WORD        1               < 0 : TEST SUR LA VALEUR 0 DES POINTS,
                                     < 1 : TEST SUR VALEUR 1 DES POINTS.
IZDC:    WORD        1               < 0=EMETTRE EN ZDC, 1=NON.
IOAB:    WORD        0               < 0 : ENVOYER UN 'OAB' DERRIERE
                                     < CHAQUE SEGMENT EMIS...
IPOINT:  WORD        0               < 0 : ENVOYER 2 SEGMENTS EN ZDC
                                     <     (ORG,ORG) ET (EXT,EXT),
                                     < 1 : ENVOYER 1 SEUL SEGMENT EN ZDC
                                     <     (ORG,EXT).
ISGF:    WORD        1               < 0=ACCES AU SGF, 1=NON.
IVISU:   WORD        0               < 0='DRAW' ACTIF, 1=NON ACTIF.
IVIDEO:  WORD        1               < 0='GRVI' ACTIF, 1='GRVI' INHIBE.
IBUF1:   WORD        0               < INDEX COURANT 1ER BUFFER SGF.
KPT1:    WORD        0               < NBRE DE POINTS DANS 'FA'.
<
< CONSTANTES D'EMISSION DES SEGMENTS :
<
PASX:    WORD        0               < PAS DE DECOUPAGE D'UN
PASY:    WORD        0               < SEGMENT LORSQU'IL EN MANQUE...
MODE:    WORD        0               < 0 : NSEG=NSEG1,
                                     < <0 : NSEG>NSEG1 : IL MANQUE
                                     <      DES SEGMENTS,
                                     < >0 : NSEG<NSEG1 : IL Y A
                                     <      TROP DE SEGMENTS.
N1:      WORD        0               < MODE>0 : EN PRENDRE 1 TOUS
                                     < LES N1 SEGMENTS.
SN1:     WORD        0               < DECOMPTEUR DE N1.
N2:      WORD        0               < MODE<0 : ENVOYER N2 SEGMENTS
                                     < POUR 1.
SN2:     WORD        0               < SN2=N2 SI SN3<=0,
                                     < SN2=N2+1 SI SN3>0.
SSN2:    WORD        0               < DECOMPTEUR DE SN2.
N3:      WORD        0               < MODE<0 : RAJOUTER N3 SEGMENTS.
SN3:     WORD        0               < DECOMPTEUR DE N3.
NSEG:    WORD        0               < NBRE DE SEGMENTS DEMANDES.
SNSEG:   WORD        0               < DECOMPTEUR DE NSEG.
NSEG1:   WORD        0               < NBRE DE SEGMENTS OBTENUS PAR 'G'.
ISEG:    WORD        0               < 0=COMPTER LES SEGMENTS POUR 'R'.
NSEG2:   WORD        0               < COMPTEUR DES SEGMENTS SOUS 'R'.
NUS1:    WORD        0               < 1ER SEGMENT UTILISE POUR 'R'.
NUS2:    WORD        0               < 2EME SEGMENT UTILISE POUR 'R'.
IPAS:    WORD        0               < EXECUTION PAS A PAS DE 'R' ???
<
< CONSTANTES DICHOTOMIQUES :
<
DICOX:   WORD        0               < X DU POINT VIDEO COURANT M.
DICOY:   WORD        0               < Y DU POINT VIDEO COURANT M.
DICOX1:  WORD        0               < X DE L'ORIGINE VIDEO COURANTE M1.
DICOY1:  WORD        0               < Y DE L'ORIGINE VIDEO COURANTE M1.
DICOX2:  WORD        0               < X EXTREMITE VIDEO COURANTE M2.
DICOY2:  WORD        0               < Y EXTREMITE VIDEO COURANTE M2.
<
< PILES DE TRAVAIL :
<
APILE:   WORD        PILE-1          < PILE DE SMC (RETOUR A 'GE').
LSTACK:  VAL         60              < LONGUEUR DE LA PILE DE TRAVAIL.
ASTACK:  WORD        STACK-1
SAVS:    DZS         4               < ZONE DE SAUVEGARDE DE 'SEG'.
         PAGE
         PROG
         IF          ORDI-"T",XWOR%,,XWOR%
         EOT         #SIP SP1#
         EOT         #SIP SP3#
         EOT         #SIP SP2#
<
<
<        A T T E N T E   C H A N G E M E N T   T R A M E  :
<
<
WAIT:    EQU         $
         PSR         A,B,X,Y         < TRES PRUDENT CE MONSIEUR...
         LAI         NSPTV
         SBT         0               < ACCES PAR NSP.
         WORD        '1E15           < B=@DCT-TV.
         ADRI        2,B             < B=@X(DCT-TV).
         LR          B,A             < DEMANDE DE X(DCT-TV).
         WORD        '1E15           < B=X(DCT-TV).
         LR          B,Y             < SAVE Y=X(DCT-TV).
         LX          WAITR           < INITIALISATION D'UN DECTECTEUR
                                     < DE TIME-OUT SUR LA TV.
WIDEO:   EQU         $
         JDX         NTOUT
         JMP         TOUT            < CAS D'UN TIME-OUT, ON ARRETE.
NTOUT:   EQU         $
         WORD        '1E15           < B=X(DCT-TV).
         CPR         B,Y             < X(DCT-TV) A-T'IL CHANGE, ET
                                     < DONC A-T'ON CHANGE DE TRAME ???
         JE          WIDEO           < NON, ON ATTEND.
TOUT:    EQU         $
         PLR         A,B,X,Y
         RSR
<
<
<        E N T R E E   D ' U N E   T R A M E  :
<
<
TRAME:   EQU         $
         LA          ASP1
         WORD        '1EC5           < ENTREE D'UNE TRAME.
         BSR         AWAIT           < ATTENTE DE FIN DE TRAME.
         LA          ASP2
         WORD        '1EC5           < ARRET DE L'ENREGISTREMENT.
         LA          ASP3
         WORD        '1EC5           < DIFFUSION IMAGE STATIQUE.
         RSR
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        E N T R E E   D ' U N E   T R A M E :
<
<
TRAME:   EQU         $
         LAD         INIMAG          < ENTREE IMAGE.
         SVC         0
         LAD         STABIL          < VISUALISATION DE LA TRAME STATIQUE.
         SVC         0
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        P A S S A G E   A   1 2 K  :
<
<
LOC12:   EQU         $
         LAD         DEMMEM
         SVC         0               < PASSAGE 12K.
         RSR
         PAGE
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        T R A C E   V I D E O   D ' U N   S E G M E N T   E N   S O L A R.
<
<        (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
TRACE:   EQU         $
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
         PSR         A,B,X,W
<
         LR          K,B
         ADRI        1,B             < ZONE RECEPTRICE.
         LRM         A,X,W
         WORD        ENTIM           < ZONE EMETTRICE (A SAUVER DANS LA PILE).
         WORD        LENTIM          < LONGUEUR EN-TETE IMAGE.
         WORD        ENTIM           < POUR BASER L'EN-TETE.
         MOVE
         ADRI        LENTIM,K        < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
         LRM         A,B,X
         WORD        SEG             < ZONE EMETTRICE: COORDONNEES (Y1,X1),
                                     < (Y2,X2) SEGMENT COURANT. CE SONT DES
                                     < COORDONNEES GRAPHIQUES.
         WORD        ENTIM+DEPY1     < ZONE RECEPTRICE.
         WORD        4               < LONGUEUR.
         MOVE
         STZ         DEPMOD,W
         IC          DEPMOD,W        < MODE TRACE 'SBT'.
         LRM         A,X
         WORD        ENTIM-ZERO*2    < ADRESSE OCTET EN-TETE IMAGE.
         WORD        LENTIM+LIMAG*2  < LONGUEUR OCTETS EN-TETE + IMAGE.
         STA         STABIL+1
         STX         STABIL+2
         LAD         STABIL          < DEMANDE INTERPOLATION ET AFFICHAGE.
         PSR         X
         SVC         0
         PLR         X
         LRM         A,B
         WORD        IMAG-ZERO*2     < RESTAURATION ADRESSE ET
         WORD        LIMAG*2         < LONGUEUR IMAGE DANS LA DEMANDE.
         STA         STABIL+1
         STX         STABIL+2
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
         ADRI        -LENTIM,K       < RESTAURATION DE 'K'.
         LR          K,A
         ADRI        1,A             < ZONE EMETTRICE.
         LRM         B,X
         WORD        ENTIM           < ZONE RECEPTRICE (A RESTAURER).
         WORD        LENTIM          < LONGUEUR.
         MOVE
<
         PLR         A,B,X,W
         RSR
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         PAGE
<
<
<        T R A C E   D I C H O T O M I Q U E   D ' U N   S E G M E N T  :
<
<
DICO:    EQU         $
         LA          DICOX1          < A=X1.
         AD          DICOX2          < A=X1+X2.
         SLRS        1               < A=(X1+X2)/2.
         STA         DICOX           < X DU MILIEU DE M1M2.
         LA          DICOY1          < A=Y1.
         AD          DICOY2          < A=Y1+Y2.
         SLRS        1               < A=(Y1+Y2)/2.
         STA         DICOY           < Y DU MILIEU DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 :
<
         SB          DICOY1          < A=Y-Y1.
         JANE        DICO31          < M#M1.
         LA          DICOX           < A=X.
         SB          DICOX1          < A=X-X1.
         JAE         DICO32          < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31:  EQU         $
         LA          DICOY           < A=Y.
         SB          DICOY2          < A=Y-Y2.
         JANE        DICO30          < M#M2 ET M#M1.
         LA          DICOX           < A=X.
         SB          DICOX2          < A=X-X2.
         JANE        DICO30          < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32:  EQU         $
         LX          DICOX
         LY          DICOY
         BSR         ASET            < TRACE DU POINT M=(M1+M2)/2.
         RSR                         < ARRET PROVISOIRE DE LA DICHOTOMIE
                                     < DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30:  EQU         $
         LA          DICOX2          < A=X2.
         LB          DICOY2          < B=Y2.
         PSR         A,B             < SAVE LE POINT M2 COURANT.
         LA          DICOX           < A=X.
         STA         DICOX2          < X2<--X.
         LA          DICOY           < A=Y.
         STA         DICOY2          < Y2<--Y.
         BSR         ADICO           < DICHOTOMIE SUR LE SEGMENT M1M.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < TRACE DU POINT M2.
         STX         DICOX1          < X1<--X2.
         STY         DICOY1          < Y1<--Y2.
         PLR         A,B             < RESTAURATION DU POINT M2 APRES
                                     < LE CHANGEMENT DU POINT M1.
         STA         DICOX2          < RESTAURE X2.
         STB         DICOY2          < RESTUARE Y2.
         JMP         DICO            < VERS LA POURSUITE DE LA DICHOTOMIE.
<
<
<        T R A C E   D ' U N   S E G M E N T   V I D E O  :
<
<
TRACE:   EQU         $
         PSR         X,Y,C
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
         LX          DICOX1          < X=X1.
         LY          DICOY1          < Y=Y1.
         PSR         X,Y             < SAVE M1.
         BSR         ASET            < TRACE DU POINT M1.
         BSR         ADICO           < TRACE DU SEGMENT M1M2.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < TRACE DU POINT M2.
         PLR         X,Y
         STX         DICOX1          < RESTORE M1.
         STY         DICOY1          < RESTORE M1.
         PLR         X,Y,C
         RSR
XWOR%:   VAL         0
<
<
<        G R A P H I Q U E   -   V I D E O  :
<
<
<        ARGUMENT :
<                    SEG=SEGMENT GRAPHIQUE A TRACER EN VIDEO.
<
<
GRVI:    EQU         $
         CPZ         IVIDEO          < GRVI ACTIF ???
         JNE         GRVI1           < NON, RIEN A TRACER.
         PSR         X
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         WORD        '1EC5           < STABILISATION IMAGE STATIQUE.
<
< ORIGINE DU SEGMENT COURANT :
<
         LA          SEG+0+X
         SLRS        DEDX
         STA         DICOX1          < X(ORIGINE).
         LA          SEG+0+Y
         SLRS        DEDY
         NGR         A,A
         AD          NLIG
         STA         DICOY1          < Y(ORIGINE).
<
< EXTREMITE DU SEGMENT COURANT :
<
         LA          SEG+2+X
         SLRS        DEDX
         STA         DICOX2
         LA          SEG+2+Y
         SLRS        DEDY
         NGR         A,A
         AD          NLIG
         STA         DICOY2
<
< TRACE VIDEO :
<
XWOR%:   VAL         0
         BSR         ATRACE
         PLR         X
GRVI1:   EQU         $
         RSR
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        M I S E   D ' U N   B I T   A   1  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
SET:     EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL            < CONVERSION DE L'Y DU POINT EN
                                     < UN NUMERO DE MOT.
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < CALCUL DE X MODULO 16 ;
                                     < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         SBT         0,X             < POSITIONNEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        C E N T R E   D E   G R A V I T E   T R A M E  :
<
<
<        RESULTAT :
<                    A=0 : TRAME VIDE,
<                     =1 : TRAME NON VIDE, ET ALORS :
<                    X,Y=CENTRE DE GRAVITE GRAPHIQUE,
<                    XG,YG=CENTRE DE GRAVITE VIDEO.
<
<
GRAVE:   EQU         $
         STZ         KPT             < RAZ NBRE DE POINTS TRAME.
         STZ         XC              < RAZ SIGMA(X).
         STZ         XC+1
         STZ         YC              < RAZ SIGMA(Y).
         STZ         YC+1
<
< BALAYAGE DE L'IMAGE :
<
         LX          ALIMAG          < INDEX MOT DE L'IMAGE.
GRAV1:   EQU         $
         LA          &AIMAG2
         JAE         GRAV4           < MOT COURANT NUL, SANS INTERET.
         STA         MOTC            < SAVE SI #0.
         PSR         X               < SAVE L'INDEX COURANT.
         LR          X,A
         ADRI        -1,A            < INDEX PAR RAPPORT A 0.
         SLLS        4
         SLRD        8
         LR          A,Y             < Y=Y(TOUS LES POINTS DE MOTC).
         LAI         0
         SLLD        8
         STA         XMOTC           < XMOTC=X(1ER POINT DE MOTC).
GRAV3:   EQU         $
         LA          MOTC
         JAE         GRAV2           < MOTC=0, ON A FINI POUR LUI.
         IC          KPT             < COMPTAGE DES POINTS A 1.
         DBT                         < RECHERCHE DU 1ER A 1.
         RBT         0,X             < ET RAZ IMMEDIAT.
         STA         MOTC            < MAJ DE MOTC.
         LA          XMOTC
         ADR         A,X             < X(1ER MOT A 1 DE MOTC).
         LA          XC
         LB          XC+1
         ADR         X,B             < CUMUL SIGMA(X).
         ADCR        A
         STA         XC
         STB         XC+1
         LA          YC
         LB          YC+1
         ADR         Y,B             < CUMUL SIGMA(Y).
         ADCR        A
         STA         YC
         STB         YC+1
         JMP         GRAV3           < AU POINT SUIVANT.
GRAV2:   EQU         $
         PLR         X               < RESTAURE INDEX COURANT.
GRAV4:   EQU         $
         JDX         GRAV1           < MOT PRECEDENT.
<
< CALCUL DES COORDONNEES DU CENTRE DE GRAVITE :
<
         LA          KPT
         CP          SEUIL           < TRAME VIDE ???
         LAI         0               < OUI, A PRIORI.
         JL          GRAV5           < ET OUI, PRESQUE VIDE....
         LA          XC
         LB          XC+1
         DV          KPT
         STA         XG              < XG=SIGMA(X)/KPT.
         SLLS        DEDX            < CADRAGE GRAPHIQUE.
         LR          A,X             < X=CENTRE DE GRAVITE GRAPHIQUE.
         LA          YC
         LB          YC+1
         DV          KPT
         STA         YG              < YG=SIGMA(Y)/KPT.
         SB          NLIG
         NGR         A,A             < INVERSION AXE DES Y.
         SLLS        DEDY            < CADRAGE GRAPHIQUE.
         LR          A,Y             < Y=CENTRE DE GRAVITE GRAPHIQUE.
         LAI         1               < TRAME NON VIDE.
GRAV5:   EQU         $
         RSR
         PAGE
<
<
<        E M I S S I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE EN MOT.
<
<
PRINT:   EQU         $
         PSR         C,X
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A             < CONVERSION OCTET.
         ADRI        1,A             < ADRESSE OCTET DU MESSAGE.
         STA         DEMOUT+1        < MAJ AMDEM.
         LBY         0,C             < RECUPERATION LONGUER MESSAGE.
         STA         DEMOUT+2        < MAJ CODEM.
         LAD         CG              < RETOUR A PRIORI EN ALPHA,
         SVC         0               < A CAUSE DE 'DRAW'.
         LAD         DEMOUT
         SVC         0               < EMISSION DU MESSAGE.
         PLR         C,X
         RSR
<
<
<        T R A C E   S E G M E N T   G R A P H I Q U E  :
<
<
DRAW:    EQU         $
         CPZ         IVISU           < TRACE VALIDE ???
         JNE         NVISU           < NON, RIEN A FAIRE...
         PSR         X
         LAD         OG
         SVC         0               < OPEN GRAPHIQUE.
         LAD         WG
         SVC         0               < ECRITURE GRAPHIQUE DE 'SEG'.
         PLR         X
NVISU:   EQU         $
         RSR
<
<
<        I N T E R R O G A T I O N  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    B=0 : REPONSE=OUI,
<                      1 : REPONSE=NON,
<                    CARRY POSITIONNE PAR UN 'CPZR B'.
<
<
INTER1:  EQU         $
         LR          Y,A             < RESTAURE A=@MESSAGE.
ENTER:   EQU         $
         LR          A,Y             < SAVE Y=@MESSAGE.
         BSR         APRINT          < EMISSION DU MESSAGE (A).
         PSR         X
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         PLR         X
         LBI         0               < B=0 (OUI A PRIORI).
         LBY         REP             < A=CARACTERE REPONDU.
         CPI         "O"
         JE          INTER2          < OUI.
         LBI         1               < B=1 (NON A PRIORI).
         CPI         "N"
         JNE         INTER1          < INCOMPREHENSIBLE...
INTER2:  EQU         $
         CPZR        B               < POSITIONNEMENT CODES CONDITION.
         RSR
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        E N T R E E   R E P O N S E   O / N / 1 / 2 / 3 :
<
<
<        ARGUMENT :
<                    A=@ MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    B=0 : REPONSE OUI/1/2/3.
<                    B=1 : REPONSE NON.
<                    DEMANDE INIMAG POSITIONNEE.
<
<
ENTCL1:  EQU         $
         LR          Y,A             < RESTAURE A=@ MESSAGE.
ENTCL:   EQU         $
         LR          A,Y             < SAVE Y=@ MESSAGE.
         BSR         APRINT          < EMISSION DU MESSAGE (A).
         PSR         X
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         PLR         X
         LBY         REP             < A=CARACTERE REPONDU.
         LBI         0               < B=0 (NON A PRIORI).
         CPI         "N"
         JE          ENTCL2          < REPONSE NON.
         LBI         TVPV            < B=TVPV (OUI A PRIORI).
         CPI         "O"
         JE          ENTCL2          < REPONSE OUI.
         ADRI        -'30,A          < A=1/2/3 (REPONSE 1/2/3).
         JALE        ENTCL1          < NON - A REVOIR
         CPI         3
         JG          ENTCL1          < NON - A REVOIR.
         LR          A,B             < OK - B RECOIT A.
ENTCL2:  EQU         $
         SBT         16+NBTVIN       < ENTREE IMAGE A PRIORI.
         STB         INIMAG+3        < POSITIONNER LE NUMERO DE PROCESSEUR.
         LR          B,A             < POSITIONNER B.
         RBT         NBTVIN
         LBI         0
         JANE        ENTCL3
         LBI         1
ENTCL3:  EQU         $
         CPZR        B               < POSITIONNEMENT CODES CONDITION.
         RSR
XWOR%:   VAL         0
<
<
<        E N V O I   E N   Z D C  :
<
<
SEND:    EQU         $
         CPZ         IZDC            < EMISSION ZDC ???
         JNE         SEND2           < NON, RIEN A FAIRE...
         PSR         X
         LAD         GETGS
SEND1:   EQU         $
         SVC         0               < ACCES A LA VALIDATION COURANTE.
         CPZ         NOMSEG          < SEGMENT PRECEDENT ACQUITTE ???
         JNE         SEND1           < NON, ON ATTEND.
         DC          NOMSEG          < OUI, NOMSEG=-1.
         LAD         STOGS
         SVC         0               < ENVOI DU SEGMENT COURANT.
         PLR         X
SEND2:   EQU         $
         RSR                         < ET C'EST TOUT...
<
<
<        E N V O I   1   O U   2   S E G M E N T S  :
<
<
<        FONCTION :
<                      SUIVANT LA VALEUR DE IPOINT, CETTE
<                    ROUTINE EMET EN ZDC 1 OU 2 SEGMENTS :
<                    IPOINT=0 : (ORG,ORG)OAB(EXT,EXT)OAB,
<                    IPOINT=1 : (ORG,EXT)OAB,
<                    LES 'OAB' ETANT CONDITIONNES PAR
<                    LA VALEUR DE 'IOAB'.
<
<
SENDP:   EQU         $
         CPZ         IZDC            < ZDV VALIDEE ???
         JNE         SENDP2          < NON, DONC RIEN A FAIRE...
<
< SAUVEGARDE DU 'SEG' ARGUMENT A PRIORI :
<
         PSR         A,B,X
         LAD         SAVS
         LR          A,B
         LAD         SEG
         LXI         4
         MOVE                        < SEG --> SAVS.
<
< ENVOI EN ZDC :
<
         CPZ         IPOINT          < 1 OU 2 SEGMENTS ???
         JNE         SENDP1          < 1 SEUL (ORG,EXT).
         LA          SEG+2+X         < 2 (ORG,ORG) ET (EXT,EXT).
         LB          SEG+2+Y
         PSR         A,B             < SAVE L'EXTREMITE DE SEG.
         LA          SEG+0+X
         LB          SEG+0+Y
         STA         SEG+2+X         < EXT <-- ORG.
         STB         SEG+2+Y
         BSR         ASEND           < ENVOI EN ZDC...
         BSR         AOAB            < OAB INTERMEDIAIRES...
         PLR         A,B             < RESTAURE L'EXTREMITE DE SEG.
         STA         SEG+0+X         < ORG <-- EXT.
         STB         SEG+0+Y
         STA         SEG+2+X         < RESTAURE EXT.
         STB         SEG+2+Y
SENDP1:  EQU         $
         BSR         ASEND           < ENVOI EN ZDC...
         BSR         AOAB            < OAB INTERMEDIAIRES...
<
< RESTAURATION DU SEG ARGUMENT :
<
         LAD         SEG
         LR          A,B
         LAD         SAVS
         LXI         4
         MOVE                        < SAVS --> SEG.
         PLR         A,B,X
SENDP2:  EQU         $
         RSR
<
<
<        F A U T - I L   E N V O Y E R   D E S
<        O A B   I N T E R M E D I A I R E S  ? ?
<
<
SOAB:    EQU         $
         LBI         1               < B=1 : NON A PRIORI.
         CPZ         IZDC            < L'EMISSION ZDC EST-ELLE VALIDE ???
         JNE         SOAB1           < NON, DONC PAS D'OAB...
         LA          AM17
         BSR         AENTER          < INTERROGATION UTILISATEUR...
SOAB1:   EQU         $
         STB         IOAB            < SAVE LA REPONSE...
         RSR
<
<
<        F A U T - I L   E N V O Y E R
<        1   O U   2   S E G M E N T S  ??
<
<
SPOIN:   EQU         $
         LBI         1               < B=1 : NON A PRIORI...
         CPZ         IZDC            < L'EMISSION ZDC EST-ELLE VALIDE ???
         JNE         SPOIN1          < NON..
         LA          AM18            < OUI.
         BSR         AENTER          < INTERROGATION UTILISATEUR...
SPOIN1:  EQU         $
         STB         IPOINT          < SAVE LA REPONSE.
         RSR
<
<
<        E N V O I   O A B   I N T E R M E D I A I R E S  :
<
<
<        FONCTION :
<                      SI L'INDICATEUR IOAB EST VALIDE (0),
<                    ON ENVOIE DERRIERE CHAQUE SEGMENT EMIS
<                    EN ZDC UN 'OAB'. L'APPLICATION EST LA
<                    SUIVANTE (IDEM A 'VT') :
<                      1- ON CREE UNE BIBLIOTHEQUE GRAPHIQUE
<                    CONTENANT :
<                    >PROG(:A:B D I                D :A:B <TRACE
<                    GRAPHIQUE QUELCONQUE>
<                      2- CETTE BIBLIOTHEQUE EST APPELEE
<                    DANS UNE ITERATION SOUS 'GV' :
<                    %X(   $BIBLI; ?PROG; ),
<                    AINSI A CHAQUE APPEL DE 'PROG' ON
<                    INTRODUIT UN SEGMENT DONT L'EXTREMITE
<                    EST MATERIALISEE PAR <TRACE GRAPHIQUE
<                    QUELCONQUE>.
<
<
ZOAB:    EQU         $
         CPZ         IOAB            < FAUT-IL EMETTRE LES OAB ???
         JNE         OAB1            < NON,
         STZ         SEG+0+X         < OUI.
         STZ         SEG+0+Y
         STZ         SEG+2+X
         STZ         SEG+2+Y
         BSR         ASEND
OAB1:    EQU         $
         RSR
         PAGE
<
<
<        E N V O I   D ' U N   B O N   N O M B R E
<                    D E   S E G M E N T S  :
<
<
EDIT:    EQU         $
         CPZ         ISGF            < ACCES SGF ???
         JE          NSGF2           < OUI.
NFIN2:   EQU         $
         RSR                         < NON...
NSGF2:   EQU         $
         CPZ         KPT1            < Y-AT'IL EU DES SEGMENTS GENERES ???
         JE          NFIN2           < NON, RIEN A FAIRE...
         LXI         -1
         LYI         -1
         BSR         ASTBU1          < MARQUAGE DE FIN DE LISTE...
         CPZ         IBUF1           < LE BUFFER SGF EST-IL NON VIDE ???
         JE          CLOS1           < NON, IL EST VIDE.
         STZ         IBUF1           < REINITIALISATION INDEX BUFFER.
         LAD         SGFW1           < OUI, IL CONTIENT QUELQUE CHOSE,
         SVC         0               < ON LE VIDE...
CLOS1:   EQU         $
         LA          SGFC1
         SBT         15
         STA         SGFC1           < MISE DE SGFC1 EN SAVE.
         LAD         SGFC1
         SVC         0               < CLOSE SAVE DE 1.0.
<
< NOMBRE DE SEGMENTS GENERES :
<
         LA          AM5
         BSR         APRINT
         LA          KPT1            < NBRE DE POINTS.
         SLRD        16+1
         STB         NSEG1           < NOMBRE DE SEGMENTS.
         BSR         ADISP           < CONVERSION HEXADECIMALE DE (B).
         LAD         MDIS
         BSR         APRINT          < EDITION DE NSEG1.
<
< ENTREE DU NBRE DE SEGMENTS DEMANDES :
<
NP1:     EQU         $
         LA          AM4
         BSR         APRINT
         LAD         DEMH
         SVC         0               < ENTREE DU NOMBRE.
         LYI         4
         BSR         AHEX            < DECODAGE DE 4 CARACTERES.
         JNE         NP1             < ERREUR DE SYNATXE.
         JALE        NP1             < REFUS DES NOMBRE <=0.
         STA         NSEG            < SAVE LE NOMBRE DE SEGMENTS
                                     < REELLEMENT DEMANDES.
         STA         SNSEG           < DECOMPTEUR DE NSEG.
<
< ET MAINTENANT DOIT-ON EMETTRE EN ZDC ???
<
         LAD         M1
         BSR         AENTER
         STB         IZDC            < SAVE LA REPONSE...
         BSR         ASPOIN          < ENVOI 1 OU 2 SEGMENTS ???
         BSR         ASOAB           < OAB INTERMEDAIRES ???
         LA          NSEG1
         SB          NSEG
         STA         MODE            < MODE MEMORISE LA POSITION
                                     < DE NSEG PAR RAPPORT A NSEG1.
<
< VALEUR DE MODE :
<                    MODE=0 : NSEG=NSEG1, JUSTE LE NON NOMBRE,
<                    MODE<0 : NSEG1<NSEG, IL EN MANQUE,
<                    MODE>0 : NSEG1>NSEG, IL Y EN A TROP.
<
         JAE         NP4             < OK, LE BON NOMBRE.
         JAL         NP5             < IL N'Y EN A PAS ASSEZ.
<
< PREPARATION 'TROP DE SEGMENTS' :
<
         LA          NSEG1
         SARD        16
         DV          NSEG            < DIVISION PAR EXCES NSEG1/NSEG.
         STA         N1              < EN PRENDRE 1 SUR N1.
         STZ         SN1
         IC          SN1             < SN1=1, AFIN DE PRENDRE LE
                                     < 1ER SEGMENT.
         JMP         NP4
<
< PREPARATION 'PAS ASSEZ DE SEGMENTS' :
<
NP5:     EQU         $
         LAI         0
         LB          NSEG
         DV          NSEG1           < DIVISION PAR DEFAUT NSEG/NSEG1.
         STA         N2              < ENVOYER N2 SEGMENTS POUR 1,
         STB         N3              < EN AJOUTER N3 AU DEBUT.
         STB         SN3             < DECOMPTEUR DE N3.
<
< INITIALISATIONS :
<
NP4:     EQU         $
         LAI         MAXBUF
         STA         IBUF1           < AFIN DE FORCER LA 1ERE LECTURE.
         LA          SGFO1
         SBT         15
         STA         SGFO1           < MISE EN OLD DE SGFO1.
         LAD         SGFO1
         SVC         0
NP2:     EQU         $
<
< BOUCLE D'EMISSION DES SEGMENTS :
<
         LA          IBUF1
         CPI         MAXBUF          < VALIDATION INDEX BUFFER.
         JL          NP3             < OK, BUFFER NON VIDE...
         LAD         SGFR1
         SVC         0               < LECTURE SI BUFFER VIDE.
         LAI         0               < REINITIALISATION DE IBUF1.
NP3:     EQU         $
         LR          A,X             < X=INDEX COURANT BUFFER SGF.
         CPZ         MODE
         JG          NP6             < CAS 'TROP DE SEGMENTS'.
         JL          NP7             < CAS 'PAS ASSEZ DE SEGMENTS'.
<
< CAS 'JUSTE ASSEZ DE SEGMENTS' :
<
NP9:     EQU         $
         BSR         ALBU1           < A,B=COORDONNEES ORIGINE SEGMENTS.
         STA         SEG+0+X
         STB         SEG+0+Y
         BSR         ALBU1           < A,B=COORDONNEES EXTREMITE SEGMENT.
         STA         SEG+2+X
         STB         SEG+2+Y
         BSR         ASENDT          < SEND+TEST DE FIN (NSEG=0).
<
< FIN D'UNE ITERATION :
<
NP10:    EQU         $
         STX         IBUF1           < SAVE INDEX COURANT BUFFER.
         JMP         NP2             < VERS LE TOUR SUIVANT...
<
< CAS 'TROP DE SEGMENTS' :
<
NP6:     EQU         $
         DC          SN1             < EST-CE LE MOMENT D'EMETTRE ???
         JG          NP8             < NON.
         LA          N1
         STA         SN1             < REINITIALISATION DE SN1, LORSQU'ON
                                     < EMET UN SEGMENT.
         JMP         NP9             < VERS L'EMISSION...
NP8:     EQU         $               < PAS D'EMISSION.
         ADRI        4,X             < ON SAUTE LE SEGMENT COURANT.
         JMP         NP10
<
< CAS 'PAS ASSEZ DE SEGMENTS' :
<
NP7:     EQU         $
         BSR         ALBU1           < A,B=ORIGINE SEGMENT COURANT.
         STA         DICOX1
         STB         DICOY1
         BSR         ALBU1           < A,B=EXTREMITE SEGMENT COURANT.
         STA         DICOX2
         STB         DICOY2
         STA         DICOX           < SAVE L'EXTREMITE REELLE
         STB         DICOY           < DU SEGMENT COURANT.
         LA          N2
         DC          SN3             < DECOMPTE DES SEGMENTS A RAJOUTER AU DEBUT
         JL          NP20            < C'EST FINI POUR EUX...
         ADRI        1,A             < SI SN3>0, ON ENVERRA UN SEGMENT
                                     < DE PLUS.
NP20:    EQU         $
         STA         SN2             < SN2=N2 (+1 SI SN3>0).
         STA         SSN2            < POUR LE DECOMPTE DES ITERATIONS.
         LA          DICOX2
         SB          DICOX1
         SARD        16
         DV          SN2
         STA         PASX            < PASX=(DICO2-DICOX1)/SN2.
         LA          DICOY2
         SB          DICOY1
         SARD        16
         DV          SN2
         STA         PASY            < PASY=(DICOY2-DICOY1)/SN2.
NP21:    EQU         $               < ENVOI DES SEGMENTS.
         DC          SSN2            < DECOMPTE DES ITERATIONS.
         JE          NP30            < C'EST FINI...
         LA          DICOX1
         STA         SEG+0+X         < ORIGINE.
         AD          PASX
         STA         SEG+2+X         < EXTREMITE.
         LA          DICOY1
         STA         SEG+0+Y         < ORIGINE.
         AD          PASY
         STA         SEG+2+Y         < EXTREMITE.
         BSR         ASENDT          < SEND+TEST DE FIN (NSEG=0).
         LA          SEG+2+X
         STA         DICOX1          < CHANGEMENT ORIGINE,
         LA          SEG+2+Y
         STA         DICOY1          < CHANGEMENT ORIGINE.
         JMP         NP21            < ITERATION SUIVANTE...
<
< CAS 'PAS ASSEZ DE SEGMENTS', TRAITEMENT DU DERNIER SOUS-SEGMENT :
<
NP30:    EQU         $
         LA          DICOX1
         STA         SEG+0+X
         LA          DICOY1
         STA         SEG+0+Y
         LA          DICOX           < POUR LUI, ON PREND L'EXTREMITE
         STA         SEG+2+X         < REELLE DU SEGMENT.
         LA          DICOY
         STA         SEG+2+Y
         BSR         ASENDT          < SEND+TEST DE FIN (NSEG=0).
         JMP         NP10            < C'EST FINI POUR CE SEGMENT.
<
< FIN DES OPERATIONS :
<
NFIN:    EQU         $
         LA          SGFC1
         RBT         15              < MISE DE SGFC1 EN DELETE.
         STA         SGFC1
         LAD         SGFC1
         SVC         0               < DELETE DE 1.0.
         RSR
<
<
<        S E N D   E T   T E S T   D E   F I N  :
<
<
SENDT:   EQU         $
         BSR         ASENDP          < EMISSION EN ZDC.
         DC          SNSEG
         JE          SENDT1          < C'EST FINI.
         RSR                         < CE N'EST PAS FINI.
SENDT1:  EQU         $
         ADRI        -1,K            < ANNULATION DU BSR D'APPEL.
         JMP         NFIN            < ON ARRETE ICI L'EMISSION.
         PAGE
<
<
<        S T O R E   S G F 1  :
<
<
<        ARGUMENT :
<                    X,Y=COORDONNEES D'UN POINT EN GRAPHIQUE.
<
<
STBUF1:  EQU         $
         CPZ         ISGF            < ACCES SGF ???
         JNE         NSTBU1          < NON.
         PSR         A,X
         LR          X,A
         LX          IBUF1           < X=INDEX COURANT BUFFER 1.
         STA         &ASGF1          < SAVE COORDONNEE X.
         ADRI        1,X             < PROGRESSION INDEX.
         STY         &ASGF1          < SAVE COORDONNEE Y.
         ADRI        1,X             < PROGRESSION INDEX.
         LR          X,A
         CPI         MAXBUF          < VALIDATION INDEX.
         JL          STBUF2          < OK, BUFFER NON PLEIN.
         LAD         SGFW1
         SVC         0               < ECRITURE D'UN BUFFER PLEIN...
         LAI         0               < ET RAZ INDEX COURANT.
STBUF2:  EQU         $
         STA         IBUF1           < SAVE INDEX COURANT BUFFER 1.
         PLR         A,X
NSTBU1:  EQU         $
         RSR
<
<
<        I N I T I A L I S A T I O N   A C C E S   S G F  :
<
<
INSGF:   EQU         $
         STZ         KPT1            < RAZ DU NBRE DE POINTS.
         CPZ         ISGF            < ACCES SGF ???
         JNE         NSGF10          < NON.
         STZ         IBUF1           < REINITIALISATION INDEX BUFFER.
         LA          SGFO1
         RBT         15              < MISE DE SGFO1 EN NEW.
         STA         SGFO1
         LAD         SGFO1
         SVC         0               < OPEN NEW 1.0.
NSGF10:  EQU         $
         RSR
<
<
<        E N V O I   1   S E G M E N T   A U   S G F  :
<        E T   T R A C E   D U   S E G M E N T  :
<
<
<        ARGUMENT :
<                    SEG=LE SEGMENT A ENVOYER.
<
<
SENDS:   EQU         $
         CPZ         ISGF            < SGF ACTIF ???
         JNE         NSGF3           < NON, RIEN A FAIRE.
         LAI         -1              < OUI, ON INHIBE LES
         WORD        '1EB5           < ALT-MODES SOLITAIRES.
         LX          SEG+0+X
         LY          SEG+0+Y
         BSR         ASTBU1          < ENVOI ORIGINE.
         IC          KPT1            < COMPTAGE ORIGINE.
         LX          SEG+2+X
         LY          SEG+2+Y
         BSR         ASTBU1          < ENVOI EXTREMITE.
         IC          KPT1            < COMPTAGE EXTREMITE.
         LAI         PIMAGE-ZERO
         WORD        '1EB5           < REAUTORISATION ALT-MODES.
NSGF3:   EQU         $
         BSR         ADRAW           < TRACE SEGMENT SI VALIDE.
         RSR
<
<
<        A C C E S   S G F 1  :
<
<
<        RESULTAT :
<                    A,B=X,Y D'UN POINT.
<
<
LBUF1:   EQU         $
         LA          &ASGF1          < COORDONNEE X.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         LB          &ASGF1          < COORDONNEE Y.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         RSR
<
<
<        A C C E S   S G F 2  :
<
<
<        RESULTAT :
<                    A,B=X,Y D'UN POINT.
<
<
LBUF2:   EQU         $
         LA          &ASGF2          < COORDONNEE X.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         LB          &ASGF2          < COORDONNEE Y.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         RSR
<
<
<        A C C E S   C C I   I N T E R P R E T A T I F  :
<
<
<        ARGUMENT :
<                    A=@CARTE A EMETTRE.
<
<
CCI:     EQU         $
         SLLS        1               < A=@OCTET CARTE,
         STA         CCII+1          < MAJ DEMANDE.
         LAD         CCII
         SVC         0               < ACCES CCI INTERPRETATIF.
         RSR
<
<
<        T E N T A T I V E   D E L E T E   F I C H I E R S
<                    F A   &   F B  :
<
<
DF:      EQU         $
         LA          AMAC
         BSR         ACCI            < CLOSE SAVE DE '0A.
         LA          AMBCS
         BSR         ACCI            < CLOSE SAVE DE '0B.
         LA          AMBO
         BSR         ACCI
         LA          AMBC
         BSR         ACCI
         LAD         DEMDB
         SVC         0
         RSR
         PAGE
<
<
<        C O N V E R S I O N   B I N A I R E   A S C I  :
<
<
<        ARGUMENT :
<                    B=VALEUR A CONVERTIR.
<
<
DISP:    EQU         $
         PSR         X
         LXI         0               < INDEX BUFFER.
         LYI         4               < MAX(X).
DISP1:   EQU         $
         LAI         0               < CLEAR A.
         SLLD        4               < DECONCATENATION B.
         CPI         9               < EST-CE UN CHIFFRE DECIMAL ???
         JLE         DISP2           < OUI...
         ADRI        "A"-"9"-1,A     < CONVERSION LETTRE.
DISP2:   EQU         $
         ADRI        '30,A           < CONVERSION ASCI.
         STBY        &ABDISP         < MISE EN BUFFER.
         ADRI        1,X             < SUIVANT.
         CPR         X,Y             < EST-CE FINI ???
         JNE         DISP1           < NON...
         PLR         X
         RSR                         < OUI...
<
<
<        C O N V E R S I O N   A S C I   -->   B I N A I R E  :
<
<
<        RESULTAT :
<                    A=VALEUR CONVERTIE S'IL N'Y A PAS
<                    D'ERREUR, LES CODES DE CONDITION
<                    L'INDIQUANT.
<
<
HEX:     EQU         $
         PSR         B,X
         LXI         0               < X=INDEX DE 'REP'.
         LBI         0               < B=CUMUL COURANT.
HEX1:    EQU         $
         LBY         &AREP           < A=CARACTERE COURANT DE 'REP'.
         CPI         '04             < EST-CE 'EOT' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         CPI         '0D             < EST-CE 'R/C' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         ADRI        -'30,A          < CONVERSION BIANIRE.
         JAL         HEX2            < ERREUR.
         CPI         9               < EST-CE UN CHIFFRE DECIMAL ???
         JLE         HEX3            < OUI.
         ADRI        -"A"+"9"+1,A    < NON.
         CPI         'A              < VALIDATION HEXDECIMALE ???
         JL          HEX2            < ERREUR.
         CPI         'F              < VALIDATION HEXADECIMALE ???
         JG          HEX2            < ERREUR.
HEX3:    EQU         $
         SCRS        4               < CUMUL PARTIEL DE LA
         SCLD        4               < VALEUR A CONVERTIR.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         CPR         X,Y             < EST-CE FINI ???
         JNE         HEX1            < NON.
HEX5:    EQU         $
         LR          B,A             < OUI, A=RESULTAT.
         LBI         0               < B=0 : OK.
HEX4:    EQU         $
         CPZR        B               < POSITIONNEMENT DES CODES
                                     < DE CONDITION SUR ERREUR.
         PLR         B,X
         RSR
HEX2:    EQU         $               < CAS DES ERREURS.
         LBI         1               < B=1#0 : ERREUR.
         JMP         HEX4            < VERS LA SORTIE...
         PAGE
<
<
<        R E T O U R   A   ' G E '  :
<
<
GOGE:    EQU         $
<
<
<        A L T - M O D E S  :
<
<
ALTMOD:  EQU         $
<
< RAZ DES ITEMS 1 ET 2 :
<
         LX          NMOTS           < X=NBRE DE MOTS A RAZER.
GOGE1:   EQU         $
         STZ         &AI2
         JDX         GOGE1
         STZ         &ANOM           < INVALIDATION DU NOM DE
                                     < L'2MAGE 1 A CAUSE DE 'TV'/'TI'
                                     < QUI POURRAIT VOULOIR L'UTILISER
                                     < ENSUITE !!!
<
< PREPARATION DE L'3VERLAY :
<
         LAI         '06
         STBY        DEMSGN          < DEMSGN EST MISE EN MODE 'LOAD
                                     < SOUS :SYS '.
         LA          NGE
         STA         0,W             < LE NOM DE 'GE' EST MIS EN TETE DE
                                     < LA BRANCHE D'OVERLAY.
         LA          APILE
         LR          A,K             < REINITIALISATION DE K SUR LA
                                     < PILE DE SMC.
         BSR         ADF             < DELETE DES FICHIERS....
<
< TENTATIVE(S) DE CHARGEMENT DE 'GE' :
<
GOGE2:   EQU         $
         LAD         DEMSGN          < A=@DEMSGN , W=@BRANCH.
         BSR         AOVL            < TENTATIVE DE LOAD 'GE'.
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI SI ERREUR ,
         JMP         GOGE2           < ET NOUVELLE TENTATIVE SI !GO.
<
<
<        R E T O U R   A U   C C I  :
<
<
GOCCI:   EQU         $
         LAD         DEMCCI
         SVC         0               < RETOUR CCI,
         JMP         INTER           < ET RETOUR 'TN' SI !GO.
         PAGE
<
<
<        R A Z   I M A G E   S T A T I Q U E  :
<
<
RAZ:     EQU         $
         BSR         ALOC12          < PASSAGE A 12K.
         LX          ALIMAG          < X=NBRE DE MOTS A TRAITER.
         LA          MASKI           < A=VALEUR INITIALE.
RAZ1:    EQU         $
         STA         &AIMAG1         < INITIALISATION IMAGE STATIQUE.
         JDX         RAZ1
DSPI1:   EQU         $
         LB          STABIL+2
         LRM         A
         WORD        LIMAG*2
         STA         STABIL+2
         LAD         STABIL
         SVC         0               < VISUALISATION...
         STB         STABIL+2
         JMP         INTERA          < VERS LE RETOUR A 4K...
<
<
<        D I S P L A Y   T R A M E   C O U R A N T E  :
<
<
DSPI:    EQU         $
         BSR         ALOC12          < PASSAGE A 12K...
         JMP         DSPI1
<
<
<        I N I T I A L I S A T I O N   I M A G E   S T A T I Q U E  :
<
<
GETI:    EQU         $
         BSR         ALOC12          < PASSAGE A 12K...
         LA          STABIL+3
         LY          STABIL+2
         LR          A,B
         SBT         NBTVIN
         STA         STABIL+3
         LRM         A
         WORD        LIMAG*2
         STA         STABIL+2
         LAD         STABIL
         SVC         0               < ENTREE D'UNE TRAME.
         STB         STABIL+3
         STY         STABIL+2
         JMP         INTERA          < VERS LE RETOUR A 4K...
<
<
<        C H A M G E M E N T   D U   N O M
<        D U   F I C H I E R   ' F B '  :
<
<
NOFIC:   EQU         $
         CPZ         ISGF            < SGF VALIDE ???
         JNE         ERROR           < NON, ERREUR...
         LAI         PIMAGE-ZERO
         WORD        '1EB5           < RESATAURE 'PRESC' A PRIORI.
         LAI         '7D
         WORD        '1EA5           < RESTAURE ALT-MODE A PRIORI.
         LA          AM9
         BSR         APRINT          < ENVOI MESSAGE 'NOM='.
         LAD         DEMNO1
         SVC         0               < ENTREE DU NOM DEMANDE.
         LAI         '1B             < CTRL-SHIFT-K.
         WORD        '1EA5           < CHANGEMENT CARACTERE D'ABORT.
         LAI         -1
         WORD        '1EB5           < INHIBITION DU PRESC.
         LAD         DEMCOP
         SVC         0               < COPIE DU NOM INTERNE DU
                                     < FICHIER SUR LE NOM DEMANDE.
         JNE         NOFIC           < ERREUR, ON REDEMANDE NOM.
         LAD         DEMDB
         SVC         0               < OK, ON DELETE LE NOM 'FB'.
         LXI         -1
         LYI         -1
         BSR         ASTBU1          < INDICATEUR DE FIN DE LISTE.
         CPZ         IBUF1           < BUF1 EST-IL NON VIDE ???
         JE          NOFIC1          < NON...
         LAD         SGFW1
         SVC         0               < OUI, ON LE VIDE.
NOFIC1:  EQU         $
         LA          AMBCS
         BSR         ACCI            < ET CLOSE SAVE '0B.
         LAI         PIMAGE-ZERO
         WORD        '1EB5           < RESTAURE LE 'PRESC'.
         LAI         '7D
         WORD        '1EA5           < RESTAURE LE ALT-MODE.
         JMP         INTERC          < ON VA REINITIALISER LES
                                     < ASSIGNATIONS.
<
<
<        I N V E R S I O N   E T A T   T R A C E  :
<
<
VISU:    EQU         $
         LA          AM10
         BSR         AENTER          < GRAPHIQUE VISU ???
         STB         IVISU
         LA          AM11
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         AENTER          < SORTIE VIDEO ???
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         AENTCL          < SORTIE VIDEO ???
         LA          INIMAG+3        < POSITIONNER LE PROCESSEUR DE SORTIE.
         RBT         NBTVIN
         STA         STABIL+3
XWOR%:   VAL         0
         STB         IVIDEO
         BR          AINTER          < VERS L'INTERROGATION.
         PAGE
<
<
<        S I M U L A T I O N   D ' U N   C U R S E U R
<        G R A P H I Q U E   D E   V I S U  :
<
<
<        FONCTION :
<                      CE PROCESSEUR PERMET L'ENTREE
<                    DE SEGMENTS :
<                    1- A PARTIR DE LA ZDC,
<                    2- A PARTIR DU CURSEUR DE LA VISU,
<                    3- A PARTIR DE LA CAMERA EN UTILISANT LE
<                       LE CENTRE DE GRAVITE DE L'IMAGE COMME
<                       SIMULATEUR DE CURSEUR VISU.
<                    A PARTIR DE LA IL CREE DES FICHIERS QUI
<                    PEUVENT ETRE RENDUS PERMANENTS ('N'),
<                    ET RELUS AFIN D'ETRE EMIS PAR LA ZDC,
<                    ET RECUPERES PAR UN AUTRE PROCESSEUR, ET
<                    EN PARTICULIER LUI-MEME AFIN DE FAIRE DES
<                    COPIES, DES INSERTIONS, DES SUPPRES-
<                    SIONS,... DANS DES FICHIERS.
<
<
         WORD        IMAG
         WORD        LOC+'80
         WORD        BRANCH
IMAGE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATIONS DES 3 BASES.
         LA          ASTACK
         LR          A,K             < INITIALISATION DE K SUR LA PILE
                                     < DE TRAVAIL DE 'TN'.
         IC          KIN             < DECOMPTE DES ENTRIES.
<
<        T R A I T E M E N T   D E S   A L T - M O D E S  :
<
         JG          INTERA          < ALT-MODES : REALLOCATION MEMOIRE...
<
<
<        1 E R E    E N T R Y
<
<
TABLO:   EQU         $
<
< VALIDATION DU DEMANDEUR :
<
         WORD        '1E25           < (A,B)=<ACN> DU DEMANDEUR.
         CP          ACNSYS          < EST-CE :SYS ???
         JNE         GOGE            < NON , RETOUR ...
         LR          B,A
         CP          ACNSYS+1        < EST-CE :SYS ???
         JNE         GOGE            < NON , RETOUR ....
<
< ACCES AU SGF ???
<
         LAD         M3
         BSR         AENTER          < INTERROGATION ???
         STB         ISGF            < SAVE REPONSE.
         JNE         NSGF1           < NON, RIEN A FAIRE...
         WORD        '1E45           < OUI, A=IDESC.
         ADRI        '30,A           < CONVERSION ASCI DE L'IDESC.
         STBY        &AIDBN          < CALCUL DU NOM DE FICHIER
         STBY        &AIDBO          < EN FONCTION DE L'IDESC.
         BSR         ADF             < TENTATIVE DE DELETE INITIAL...
INTERC:  EQU         $
         LA          AMBN
         BSR         ACCI            < OPEN '0B.
         JNE         GOGE            < ABORT SI IMPOSSIBLE (ASSIGNATION ???)
         LAD         DEMSGF          < SAVE LA CORRESPONDANCE
         SVC         0               < 'FB' --> NOM DIRECT DU FICHIER.
                                     < EN VUE DE LA COMMANDE 'N').
         BSR         AINSGF          < INITIALISATION ACCES SGF1.
NSGF1:   EQU         $
         BSR         AINSGF          < INITIALISATION ACCES SGF.
INTERA:  EQU         $               < ENTRY ALT-MODES.
         LAD         RELMEM
         SVC         0               < PASSAGE A 4K A PRIORI.
<
< INTERROGATION DE L'UTILISATEUR :
<
INTER:   EQU         $
         LAD         MINT
         BSR         APRINT          < ENVOI DE L'INVITATION.
         LAD         DEMIN
         SVC         0               < LECTURE DE LA REPONSE.
         LBY         REP             < A=CARACTERE REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    F : RETOUR A 'GE' ,
<                    G : ENTREE D'UN CONTOUR,
<                    W : RETOUR AU CCI.
<                    Z : RAZ DE L'IMAGE STATIQUE.
<                    D : DSPILAY LA TRAME COURANTE.
<                    I : RECUPERATION D'UNE TRAME EN MEMOIRE 'TV',
<                    O : ENVOI D'UN 'OAB' EN ZDC.
<                    V : INVERSION DE L'ETAT D'ECRITURE GRAPHIQUE SU VISU.
<                    R : LECTURE D'UN FICHIER EXISTANT.
<                    N : MISE EN PERMANENT DU FICHIER 'FB'.
<                    S : EDIT.
<
         CPI         "W"
         JE          GOCCI           < RETOUR TEMPORAIRE AU CCI.
         CPI         "G"
         JE          CONT            < ENTREE CONTOUR.
         CPI         "Z"
         JE          RAZ             < INITAILISATION IMAGE STATIQUE.
         CPI         "I"
         JE          GETI            < RECUPERATION D'UNE TRAME EN 'MEMTV'...
         CPI         "D"
         JE          DSPI            < DSPILAY LA TRAME COURANTE.
         CPI         "V"
         JE          VISU            < INVERSION ETAT SORTIE VISU.
         CPI         "R"
         JE          RFIC            < LECTURE D'UN FICHIER.
         CPI         "N"
         JE          NOFIC           < CHANGEMENT DE NOM DE 'FB'.
         CPI         "O"
         JE          OAB             < VERS L'ENVOI D'UN 'OAB' EN ZDC.
         CPI         "S"
         JE          SEDIT           < EDITION DE LA LISTE COURANTE.
         CPI         "F"
         JNE         ERROR           < ????!?!??!
         BR          AGOGE           < RETOUR A "GE".
ERROR:   EQU         $
         LAD         MERR
         BSR         APRINT          < ENVOI MESSAGE D'EREUR...
         JMP         INTER           < RIEN COMPRIS, INTERROGATION...
<
<
<        E N V O I   ' O A B '  :
<
<
OAB:     EQU         $
         CPZ         IZDC            < ACCES ZDC VALIDE ???
         JNE         ERROR           < NON, 'O' NON RECONNUE...
         STZ         SEG+0+X
         STZ         SEG+0+Y
         STZ         SEG+2+X
         STZ         SEG+2+Y
         BSR         ASEND           < ENVOI EN ZDC...
         BR          AINTER          < ET C'EST TOUT...
         PAGE
<
<
<        E N T R E E   C O N T O U R  :
<
<
CONT:    EQU         $
         LAD         M8
         BSR         AENTER          < ENTREE PAR ZDC ???
         JE          ACZDC           < OUI.
         LAD         M6
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         AENTER          < ENTREE VIDEO ???
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         AENTCL          < ENTREE VIDEO ???
XWOR%:   VAL         0
         JE          ACVIDE          < OUI.
         LAD         M7
         BSR         AENTER
         JE          ACCUR           < VERS L'ENTREE CURSEUR...
         JMP         INTER           < VERS L'INTERROGATION....
<
<        E N T R E E   V I D E O  :
<
ACVIDE:  EQU         $
         BSR         ALOC12          < PASSAGE A 12K.
<
< ENTREE DU SEUIL IMAGE VIDE :
<
SE1:     EQU         $
         LAD         M2
         BSR         APRINT          < ENVOI MESSAGE.
         LAD         DEMH
         SVC         0               < ENTREE SEUIL PRESUME.
         LYI         4               < Y=4 CARACTERES A DECODER.
         BSR         AHEX            < DECODAGE BINAIRE.
         JNE         SE1             < ERREUR DE SYNTAXE.
         JALE        SE1             < REFUS DE SEUIL<=0.
         STA         SEUIL           < OK, BON SEUIL.
<
< ENTREE DES TRAMES SUCCESSIVES :
<
CONT1:   EQU         $
         BSR         ATRAME          < ENTREE UNE TRAME.
         BSR         AGRAVE          < CALCUL DE SON CENTRE DE GRAVITE.
         JAE         CONT1           < ELLE EST VIDE, ON ATTEND...
CONT4:   EQU         $
         STX         SEG+0+X
         STY         SEG+0+Y         < ORIGINE SEGMENT COURANT.
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          XG
         STA         DICOX1          < PREPARATION DICHOTOMIE.
         LA          YG
         STA         DICOY1
XWOR%:   VAL         0
CONT2:   EQU         $
         BSR         ATRAME          < ENTREE UNE TRAME.
         BSR         AGRAVE          < CLCUL DE SON CENTRE DE GRAVITE.
         JAE         CONT2           < ELLE EST VIDE, ON ATTEND....
         STX         SEG+2+X
         STY         SEG+2+Y         < EXTREMITE SEGMENT COURANT.
<
< STORE SGF EVENTUEL :
<
         BSR         ASENDS
<
< TRACE VIDEO STATIQUE :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          XG
         STA         DICOX2
         LA          YG
         STA         DICOY2
XWOR%:   VAL         0
         BSR         ATRACE
         LX          SEG+2+X         < L'EXTREMITE COURANTE VA DEVENIR
         LY          SEG+2+Y         < L'ORIGINE DU SEGMENT SUIVANT.
         JMP         CONT4           < ET ON BOUCLE JUSQU'A
                                     < RECEVOIR UN ALT-MODE...
<
<        E N T R E E   Z D C  :
<
ACZDC:   EQU         $
         CPZ         IVIDEO
         JNE         ACZDC1          < PAS DE TRACE VIDEO.
         BSR         ALOC12          < OUI, IL FAUT DONC 12K...
ACZDC1:  EQU         $
         LAD         DEMGS
         SVC         0               < ACCES SEGMENT COURANT ZDC.
         CPZ         NOMSEG          < TEST DE LA VALIDATION ???
         JE          ACZDC1          < INVALIDE.
         STZ         NOMSEG
         LAD         DELGS
         SVC         0               < OK, ACQUITTEMENT.
         LA          SEG+0+X
         OR          SEG+0+Y
         OR          SEG+2+X
         OR          SEG+2+Y         < EST-CE LA FIN DE LISTE ZDC ???
         JAE         INTERA          < OUI, ON ARRETE ICI L'ENTREE...
         BSR         ASENDS          < NON, ON ENVOI AU SGF...
         BSR         AGRVI           < TRACE VIDEO EVENTUEL.
         JMP         ACZDC1          < VRS LE SEGMENT ZDC SUIVANT.
<
<        E N T R E E   C U R S E U R  :
<
ACCUR:   EQU         $
         CPZ         IVIDEO
         JNE         ACCUR1          < PAS DE TRACE VIDEO.
         BSR         ALOC12          < OUI, IL FAUT DONC 12K.
ACCUR1:  EQU         $
         LAD         OG
         SVC         0               < OPEN GRAPHIQUE.
         LAD         CU
         SVC         0               < MISE EN FONCTION CURSEUR.
         LAD         LCU
         SVC         0               < LECTURE GRAPHIQUE.
         LBY         CURSOR          < A=CARACTERE DE DEBLOCAGE.
<
<        COMMANDES RECONNUES :
<                    A : ORIGINE SEGMENT,
<                    B : EXTREMITE CHAINEE,
<                    S : EXTREMITE ETOILEE,
<                    F : FIN DE CURSEUR.
<
         CPI         "A"
         JE          RUNA
         CPI         "B"
         JE          RUNB
         CPI         "S"
         JE          RUNS
         CPI         "F"
         JNE         ACCUR1          < RIEN COMPRIS...
         JMP         INTERA          < COMMANDE 'F', RETOUR 4K.
<
< A : ORIGINE SEGMENT :
<
RUNA:    EQU         $
         LX          CURSOR+1+X
         LY          CURSOR+1+Y
         STX         SEG+0+X
         STY         SEG+0+Y
         JMP         ACCUR1
<
< B : EXTREMITE CHAINEE SEGMENT,
< S : EXTREMITE ETOILEE SEGMENT :
<
RUNB:    EQU         $
RUNS:    EQU         $
         LX          CURSOR+1+X
         LY          CURSOR+1+Y
         STX         SEG+2+X
         STY         SEG+2+Y
         BSR         ASENDS          < ENVOI AU SGF EVENTUEL...
         BSR         AGRVI           < TRAVE VIDEO EVENTUEL.
         LBY         CURSOR          < A=CARACTERE DE DEBLOCAGE.
         CPI         "B"
         JE          RUNA            < B : IL FAUT CHAINER.
         JMP         ACCUR1          < S : IL NE FAUT PAS CHAINER.
<
<
<        E D I T I O N   L I S T E   C O U R A N T E  :
<
<
SEDIT:   EQU         $
         BSR         AEDIT
         BSR         AINSGF          < REINITIALISATION SGF...
         BR          AINTER          < VERS L'INTERROGATION.
         PAGE
<
<
<        L E C T U R E   D ' U N   F I C H I E R  :
<
<
<        FONCTION :
<                      CE MODULE RELIT UN FICHIER
<                    DE NOM DONNE ET L'EMET EN ZDC; ON
<                    PEUT AINSI COPIER DES FICHIERS...
<
<
RFIC:    EQU         $
         LA          AM9
         BSR         APRINT          < ENVOI MESSAGE 'NOM='.
         LAD         DEMNOM
         SVC         0               < ENTREE DU NOM DU FICHIER.
         LA          AMAC
         BSR         ACCI            < DESASSIGNATION EN SAVE DE '0A.
         LA          AMFIC
         BSR         ACCI            < ESSAI D'OUVERTURE 'OLD' SUR '0A.
         JNE         RFIC4           < ERREUR, VERS L'INTERROGATION.
         LAD         SGFO2
         SVC         0               < OUVERTURE DE 1.0 EN OLD.
         JE          RFIC1           < OK, REUSSIT...
         LA          AMAC            < SINON, ON REFERME
         BSR         ACCI            < EN SAVE...
RFIC4:   EQU         $
         BR          AINTER          < REINTERROGATION....
<
< INITIALISATIONS DE LA LECTURE DU FICHIER :
<
RFIC1:   EQU         $
         CPZ         IVIDEO
         JNE         RFIC8           < PAS DE SORTIE VIDEO.
         BSR         ALOC12          < SORTIE VIDEO : PASSAGE A 12K.
RFIC8:   EQU         $
         LA          AM15
         BSR         APRINT
         LAD         DEMH
         SVC         0               < ENTREE #1ER SEGMENT.
         LYI         4
         BSR         AHEX            < DECODAGE BINAIRE.
         JNE         RFIC8           < ERREUR DE SYNTAXE.
         JALE        RFIC8           < NUMERO NON RECONNU.
         STA         NUS1            < OK.
RFIC9:   EQU         $
         LA          AM16
         BSR         APRINT
         LAD         DEMH
         SVC         0               < ENTREE #2EME SEGMENT.
         LYI         4
         BSR         AHEX            < DECODAGE BINAIRE.
         JNE         RFIC9           < ERREUR DE SYNTAXE.
         JALE        RFIC9           < NUMERO NON RECONNU.
         CP          NUS1            < VALIDATION 2EME/ AU 1ER...
         JL          RFIC8           < 2EME<1ER : ERREUR...
         STA         NUS2            < OK.
         STZ         NSEG2           < RAZ DU COMPTEUR DE SEGMENTS.
         LB          IVISU
         CPZR        B               < Y-A-T'IL TRACE VISU ???
         JNE         RFIC6           < NON, DONC PAS DE COMPTAGE...
         LA          AM12
         BSR         AENTER          < FAUT-IL COMPTER ???
RFIC6:   EQU         $
         STB         ISEG            < SAVE LA REPONSE.
         LAD         M1
         BSR         AENTER          < EMISSION ZDC ???
         STB         IZDC            < SAVE LA REPONSE...
         BSR         ASPOIN          < ENVOI 1 OU 2 SEGMENT ???
         BSR         ASOAB           < OAB INTERMEDIARES ???
         LA          AM13
         BSR         AENTER          < PAS A PAS ???
         STB         IPAS            < SAVE LA REPONSE.
         LXI         MAXBUF          < X=INDEX BUFFER 2.
<
< TRAITEMENT DES SEGMENTS :
<
RFIC2:   EQU         $
         LR          X,A             < VALIDATIION INDEX BUFFER.
         CPI         MAXBUF
         JL          RFIC3           < OK.
         LAD         SGFR2           < ON, LE BUFFER EST TOUT
         SVC         0               < EXPLORE, AU SUIVANT...
         JNE         NRFIC           < FIN DE FICHIER, STOP !!!
         LAI         0               < OK, REINITIALISATION DE L'INDEX.
RFIC3:   EQU         $
         LR          A,X             < X=INDEX BUFFER 2.
         BSR         ALBU2
         STA         SEG+0+X         < ORIGINE
         STB         SEG+0+Y         <         SEGMENT COURANT.
         ANDR        B,A             < FIN DE LISTE ???
         CPI         -1
         JE          NRFIC           < OUI, ON ABANDONNE.
         BSR         ALBU2
         STA         SEG+2+X         < EXTREMITE
         STB         SEG+2+Y         <           SEGMENT COURANT.
         IC          NSEG2           < COMPTAGE SEGMENT.
         LA          NSEG2           < OU EN EST-ON ???
         CP          NUS2            < A-T'ON DEPASSE NUS2 ???
         JG          NRFIC           < OUI, ON ARRETE ICI.
         CP          NUS1            < A-T'ON ATTEINT NUS1 ???
         JL          RFIC2           < NON, ON ATTEND D'Y ARRIVER...
         BSR         ADRAW           < TRACE EVENTUEL...
         BSR         AGRVI           < AFFICHAGE VIDEO EVENTUEL.
         CPZ         ISEG            < FAUT-IL COMPTER ???
         JNE         RFIC5           < NON...
         LB          NSEG2           < OUI, B=NUMERO COURANT.
         BSR         ADISP           < CONVERSION ASCI DE (B).
         LAD         MDIS
         BSR         APRINT          < EDITION DE (NSEG2) AU BOUT DU SEGMENT
                                     < COURANT.
RFIC5:   EQU         $
         CPZ         IPAS            < PAS A PAS ???
         JNE         RFIC7           < NON...
         LAD         M14             < OUI,
         BSR         AENTER          < ALORS FAUT-IL PRENDRE EN
                                     < COMPTE LE SEGMENT COURANT ???
         JNE         RFIC2           < NON, AU SUIVANT...
RFIC7:   EQU         $
         BSR         ASENDP          < ENVOI EN ZDC...
         JMP         RFIC2           < AU SEGMENT SUIVANT.
<
< FIN DE FICHIER :
<
NRFIC:   EQU         $
         LAD         SGFC2
         SVC         0               < CLOSE SAVE 1.0.
         LA          AMAC
         BSR         ACCI            < DESASSIGNATION EN SAVE DE '0A.
         BR          AINTEA          < VERS L'INTERROGATION ET 4K.
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI MAUVAISE
                                     < IMPLANTATION !!!
         DZS         X10+1           < HYGIENE ...
         PAGE
<
<
<        B U F F E R   S G F   2  :
<
<
BUF1M:   EQU         $
BUFSGF:  EQU         BUF1M
XBUF:    VAL         BUF1M-ZERO*2
BUF1O:   EQU         ZERO+XBUF       < @OCTET DE BUF1M.
<
<
<        B U F F E R   S G F   2  :
<
<
BUF2M:   EQU         BUF1M+128
XBUF:    VAL         BUF2M-ZERO*2
BUF2O:   EQU         ZERO+XBUF       < @OCTET DE BUF2M.
<
<
<        P I L E   D E   T R A V A I L  :
<
<
STACK:   EQU         BUF2M+128
<
<
<        B U F F E R   D E   C H A N G E M E N T   N O M  :
<
<
BUFCM:   EQU         STACK+LSTACK
XBUF:    VAL         BUFCM-ZERO*2    < @OCTET DE BUFCM.
BUFCO:   EQU         ZERO+XBUF
XBUF:    VAL         BUFCM-ZERO+LMFIC*2
BUFCON:  EQU         ZERO+XBUF       < @OCTET DE BUFCON.
<
<
<        2 E M E   V A L I D A T I O N  :
<
<
X10:     VAL         BUFCM-ZERO+LBUFES+2
X10:     VAL         PILE-X10
ZEROW:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI
                                     < RECOUVREMENT DE LA PILE
                                     < DE SMC...
         DZS         X10+1
         EOT         #SIP GEN PROCESSEUR#



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