DF'SIOC CARTE'
ED'SIOC CARTE'
IN0
         PAGE
         IDP         "SIOC CARTE"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S  :
<
<
<        FONCTION :
<                      CE MODULE LIT 4*256 CARTE (4 CARTE
<                    CORRESPONDANT A UNE LIGNE D'IMAGE) ;
<                    CHAQUE COLONNE DONNE UN NIVEAU DE GRIS
<                    CODE DE 0 A 7 ; ON GENERE UNE IMAGE
<                    RESIDENTE QUI EST SIMULTANEMENT
<                    VISUALISEE A PARTIR DE CES DONNEES.
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DU BUFFER CARTE...
CBUF:    DZS         LCBUF/NOCMO     < BUFFER CARTE...
ACBUF:   WORD        CBUF,X          < RELAI VERS LE BUFFER.
L64::    VAL         64              < NOMBRE DE CARACTERES PAR CARTE...
DEMCR:   BYTE        '0A;'00         < LECTURE ASCI SANS ECHO SUR CR1.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         LA          XR
         ANDI        L64-1           < CALCUL DE 'XR' MODULO 64,
         LR          A,X             < POUR INDEXER LE BUFFER CARTE...
         JANE        SPU1            < OK, LE BUFFER EST BON,
         PSR         X               < X=0, IL FAUT LIRE UNE NOUVELLE CARTE,
SPU3:    EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE ASCI SANS ECHO D'UNE CARTE...
         JE          SPU2            < OK...
         QUIT        1               < ??? MANQUE L'ASSIGN ???
         JMP         SPU3            < ET ON RETENTE...
SPU2:    EQU         $
         PLR         X
SPU1:    EQU         $
         LBY         &ACBUF          < ACCES AU CARACTERE (X),
         ADRI        -"0",A          < ET DECODAGE,
         BSR         ASPRPR          < CE QUI DONNE UN NIVEAU QUE L'ON FORCE
                                     < AU POINT RESIDENT (XR,YR)...
         FLD         F0              < U=0...
         RSR
<
<
<        C O M P O S A N T E   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOC CARTE'
DF'SIOC CARTE RASTER 1'
ED'SIOC CARTE RASTER 1'
IN0
         PAGE
         IDP         "SIOC CARTE RASTER 1"
<
<
<        E N T R E E   C A R T E S   R A S T E R   1  :
<
<
<        FONCTION :
<                      CE MODULE LIT SUR L'UNITE
<                    '0B DES NIVEAUX DE GRIS, ET
<                    LES AFFICHE SEQUENTIELLEMENT
<                    SUR L'ECRAN...
<
<
<        ARGUMENT :
A0::     VAL         0               < TRANSLATION PRELIMINAIRE, ET
A1::     VAL         A0+1            < FACTEUR DE REDUCTION DES NIVEAUX DE GRIS.
A2::     VAL         A1+1            < ADRESSE DU PREMIER BLOC SUR LA BANDE ;
                                     < SI CETTE ADRESSE EST FOURNIE NEGATIVE,
                                     < ALORS, ON RECUPERE L'ADRESSE COURANTE
                                     < DANS LA 'BOX'...
A10::    VAL         '10             < DEFINITION DU NIVEAU MAX ASSOCIE A 0,
A11::    VAL         A10+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 1,
A12::    VAL         A11+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 2,
A13::    VAL         A12+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 3,
A14::    VAL         A13+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 4,
A15::    VAL         A14+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 5,
A16::    VAL         A15+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 6,
A17::    VAL         A16+1           < DEFINITION DU NIVEAU MAX ASSOCIE A 7,
                                     < 'NIVEAU MAX' S'ENTENDANT DANS (0,255),
                                     < ET LES 'A10',...,'A17' ETANT SUPPOSE
                                     < FOURNIS DANS L'ORDRE CROISSANT...
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
<
< INDICATEUR DE PREMIER PASSAGE :
<
IPREM:   WORD        -1
<
< DEFINITION ET ACCES AU BUFFER :
<
LCBUF::  VAL         '800            < LONGUEUR EN OCTETS DU BUFFER,
CBUF:    EQU         IMAGE           < IL EST EN RECOUVREMENT AVEC 'IMAGE'...
NVPMT::  VAL         '0B             < 'NVP' D'ACCES A LA BANDE MAGNETIQUE...
DEMADC:  BYTE        NVPMT;'05       < MISE DE L'ADRESSE COURANTE DANS LA 'BOX'.
DEMMT:   BYTE        NVPMT;'08       < LECTURE EN ACCES DIRECT DE LA BANDE :
         WORD        CBUF-ZERO*2
         WORD        LCBUF
ADMT:    WORD        0               < ADRESSE COURANTE DE BLOC ('A2').
AXBUF:   WORD        CBUF,X          < RELAI D'ACCES AU BUFFER,
XBUF:    WORD        LCBUF           < INDEX COURANT DU BUFFER,
MAXBUF:  WORD        LCBUF           < VALEUR COURANTE DE 'XBUF'.
<
< CONSTANTES :
<
C10:     WORD        10              < CONVERSION DECIMALE.
XA0:     WORD        0               < COEFFICIENT 'A0'.
XA1:     WORD        0               < COEFFICIENT 'A1'.
FINITE:  FLOAT       1000000
<
< LISTE D'ASSOCIATION DES NIVEAUX :
<
ALNIV:   WORD        NIV0,X          < RELAI D'ACCES A LA LISTE :
NIV0:    WORD        0
NIV1:    WORD        0
NIV2:    WORD        0
NIV3:    WORD        0
NIV4:    WORD        0
NIV5:    WORD        0
NIV6:    WORD        0
NIV7:    WORD        0
<
< RELAIS :
<
ASP1:    WORD        SP1             < CONVERSION DECIMALE PAR CARACTERE,
ASP2:    WORD        SP2             < ACCES A UN CARACTERE.
         PROG
<
<
<        C O M P O S A N T E   E N   ' U ':
<
<
SPU:     EQU         $
<
< ENTREE DES PARAMETRES :
<
         CPZ         IPREM           < EST-CE NECESSAIRE ???
         JGE         SPU1            < NON...
         IC          IPREM           < OUI...
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         XA0
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         XA1
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         STA         ADMT            < ADRESSE COURANTE SUR LA BANDE :
         JAGE        SPU3            < OK, ELLE EST POSITIVE OU NULLE...
SPU4:    EQU         $
         LAD         DEMADC          < SI ELLE EST NEGATIVE,
         SVC         0               < ON RECUPERE L'ADRESSE COURANTE SUR LE
                                     < BANDE.
         JE          SPU5            < OK...
         QUIT        1               < "!ASSIGN B=MT1" MANQUE SUREMENT...
         JMP         SPU4            < TRY AGAIN...
SPU5:    EQU         $
         ACTD        3               < RECUPERATION DE 'BOX' :
         STB         ADMT            < CE QUI DONNE L'ADRESSE COURANTE SUR LA
                                     < BANDE...
SPU3:    EQU         $
         LXI         A10
         BSR         ASPCT
         BSR         AROND
         STA         NIV0
         LXI         A11
         BSR         ASPCT
         BSR         AROND
         STA         NIV1
         LXI         A12
         BSR         ASPCT
         BSR         AROND
         STA         NIV2
         LXI         A13
         BSR         ASPCT
         BSR         AROND
         STA         NIV3
         LXI         A14
         BSR         ASPCT
         BSR         AROND
         STA         NIV4
         LXI         A15
         BSR         ASPCT
         BSR         AROND
         STA         NIV5
         LXI         A16
         BSR         ASPCT
         BSR         AROND
         STA         NIV6
         LXI         A17
         BSR         ASPCT
         BSR         AROND
         STA         NIV7
SPU1:    EQU         $
<
< COMPOSANTE :
<
         FLD         FINITE          < POUR FORCER UN OVERSCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N  ' V '  :
<
<
SPV:     EQU         $
<
< COMPOSANTE :
<
         FLD         FINITE          < POUR FORCER UN OVERS-SCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
<
< ACCES AU NIVEAU DE GRIS COURANT :
<
         LBI         0               < INITIALISATION DU CUMUL,
         BSR         ASP1            < DECODAGE DU PREMIER CHIFFRE,
         BSR         ASP1            < DU DEUXIEME,
         BSR         ASP1            < DU TROISIEME,
         BSR         ASP1            < ET DU QUATRIEME...
         LA          XA0
         ADR         A,B             < TRANSLATION PRELIMINAIRE,
         LAI         0
         DV          XA1             < ET REDUCTION...
                                     < (A)=NIVEAU DE GRIS...
         LXI         0               < (X)=PREMIER NIVEAU (0-7) ESSAYE :
SPW1:    EQU         $
         CP          &ALNIV          < (A) EST-IL AVANT OU APRES ???
         JLE         SPW2            < JUSTE AVANT, ON S'ARRETE...
         ADRI        1,X             < APRES, AU SUIVANT...
         XR          A,X
         CPI         NIVMAX          < S'IL EXISTE ???
         XR          A,X
         JLE         SPW1            < OUI...
         ADRI        -1,X            < NON, RETOUR EN ARRIERE...
SPW2:    EQU         $
         LR          X,A             < (A)=NIVEAU (0-7) A MARQUER...
<
< MARQUAGE DU POINT COURANT :
<
         LX          XR
         STX         XS
         LY          YR
         STY         YS
         BSR         ASPRPS          < MARQUAGE DU POINT (XS,YS)=(XR,YR)
                                     < AVEC LE NIVEAU (A)...
<
< COMPOSANTE :
<
         FLD         F0
         RSR
<
<
<        A C C E S   A U   C A R A C T E R E   C O U R A N T  :
<
<
SP2:     EQU         $
         PSR         B,X
SP24:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER,
         CP          MAXBUF          < EST-ON AU BOUT DU BUFFER (EN PARTICULIER
                                     < CAS DE LA PREMIERE LECTURE...) ???
         JL          SP21            < NON...
         STZ         XBUF            < OUI, ON SE RAMENE EN TETE DU BUFFER...
SP23:    EQU         $
         LAD         DEMMT
         SVC         0               < ON LIT LE BLOC COURANT...
         JE          SP22            < OK...
         LR          X,A
         CPI         '45             < EST-CE UN 'TAPE-MARK' ???
         JNE         SP29            < NON, AUTRE ERREUR...
         LAD         DEMMT           < OUI, ON TENTE DE RELIRE...
         SVC         0               < LECTURE DU BLOC COURANT...
         JE          SP22            < OK, ON A SAUTE LE 'TAPE-MARK'...
SP29:    EQU         $
         QUIT        1               < ERREUR D'ASSIGNATION PROBABLEMENT...
         JMP         SP23
SP22:    EQU         $
         IC          ADMT            < PASSAGE AU BLOC SUIVANT...
         ACTD        3               < RECUPERATION DE LA 'BOX'...
         LR          B,A             < (A)=BOX...
         CP          MAXBUF          < ET VALIDATION...
         JLE         SP28            < OK...
         QUIT        1               < !?!???!?!
SP28:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER...
SP21:    EQU         $
         IC          XBUF            < ET PASSAGE AU CARACTERE SUIVANT...
         LR          A,X
         LBY         &AXBUF          < (A)=CARACTERE COURANT DU BUFFER :
         CPI         " "             < ET TEST...
         JL          SP24            < ON IGNORE TOUS LES CONTROLES...
         JG          SP25            < OK, CHIFFRE (PEUT-ETRE...).
         LAI         "0"             < LE BLANC EST TRANSFORME EN "0"...
SP25:    EQU         $
         CPI         "0"             < ET VALIDATION...
         JL          SP26            < ERREUR...
         CPI         "9"             < VALIDATION...
         JG          SP26            < ERREUR...
         ADRI        -"0",A          < DECODAGE BINAIRE...
SP27:    EQU         $
         PLR         B,X
         RSR                         < ET SORTIE...
SP26:    EQU         $
         QUIT        1               < ?!????!??!
         LAI         0               < ET ON FORCE 0...
         JMP         SP27            < ET ON SORT...
<
<
<        C O N V E R S I O N   B I N A I R E  :
<
<
SP1:     EQU         $
         LR          B,A             < (A)=CUMUL COURANT,
         MP          C10             < QUE L'ON MULTIPLIE PAR 10...
         BSR         ASP2            < ACCES AU CARACTERE COURANT...
         ADR         A,B             < ET CUMUL...
         RSR
:F
:F
< <<'SIOC CARTE RASTER 1'
DF'SIOC CARTE RHO 1'
ED'SIOC CARTE RHO 1'
IN0
         PAGE
         IDP         "SIOC CARTE RHO 1"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   R H O   1  :
<                    ( L I S T E   ( R H O ) )
<
<
<        FORMAT :
<                      ON TROUVE DANS L'ORDRE :
<                    1 - UN PREMIER PAQUET DE 'XX3' CARTE
<                    INUTILES...
<                    2 - UN DEUXIEME PAQUET CONTENANT 'XX1'
<                    VALEURS DE 'RHO' CODEES SUR 'XX2'
<                    CHIFFRES DECIMAUX.
<
<
<        ARGUMENT :
<                    A0=CONSTANTE MULTIPLICATIVE DE 'RHO'.
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    DZS         LCBUF/NOCMO     < BUFFER DES CARTE,
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0A;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         91              < LONGUEUR DES LISTES DES 'RHO',
XX2:     VAL         5               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUN DES 'RHO'.
XX3::    VAL         2               < NOMBRE DE CARTE INUTILES EN TETE...
A0::     VAL         0               < ARGUMENT...
C10:     WORD        10              < CONSTANTE DE CONVERSION DECIMALE.
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
C4000:   FLOAT       4000
C180:    FLOAT       180
FRHO:    FLOAT       0
FTETA:   FLOAT       0
PAS:     FLOAT       2               < PAS DE TETA EN TETA... (PI/90)
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         LA          YR
         OR          XR
         JANE        SPU1            < AUTRES FOIS...
<
< LECTURE DES CARTE DE TETE :
<
         LXI         XX3
SPU30:   EQU         $
         PSR         X
SPU51:   EQU         $
         LAD         DEMCR
         SVC         0
         JE          SPU52           < OK...
         QUIT        1               < MANQUE LE !ASSIGN ???
         JMP         SPU51           < TRY AGAIN...
SPU52:   EQU         $
         PLR         X
         JDX         SPU30
<
< CAS DE LA PREMIERE FOIS :
<
         LYI         0               < INDEX DES 'RHOS' :
SPU12:   EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE D'UNE CARTE 'Y'...
         JE          SPU50           < OK...
         QUIT        1               < MANQUE LE !ASSIGN ???
         JMP         SPU12           < TRY AGAIN...
SPU50:   EQU         $
         LXI         0               < X=INDEX DES CARACTERES DE LA CARTE.
SPU15:   EQU         $
         BSR         ASP1            < DECODAGE DECIMAL...
         FLT
         FCAM        C4000
         JL          SPU20
         FLD         C4000           < ON MAJORE...
SPU20:   EQU         $
         FDV         C4000
         FSB         F1
         FNEG                        < EN FAIT : RHO=1-(RHO/4000).
         FST         FRHO
         PSR         X
         LXI         A0
         BSR         ASPCT
         PLR         X
         FMP         FRHO            < ET MISE A L'ECHELLE...
         FST         FRHO
         LR          Y,A             < Y='TETA' A UNE CONSTANTE PRES...
         FLT
         FMP         PAS
         FMP         PI3141
         FDV         C180
         FST         FTETA           < CE QUI DONNE 'TETA' EN RADIANS...
         BSR         ACOS
         FMP         FRHO
         BSR         AROND
         AD          TRY
         STA         XS              < D'OU : XS=RHO*COS(TETA).
         FLD         FTETA
         BSR         ASIN
         FMP         FRHO
         BSR         AROND
         AD          TRX
         STA         YS              < ET : YS=RHO*SIN(TETA).
         LAI         NIVMAX
         BSR         ASPRPS          < FORCAGE DU POINT (XS,YS).
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU16           < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL CHANGER DE CARTE ???
         JL          SPU15           < NON...
         JMP         SPU12           < OUI...
SPU16:   EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
<
< CAS DES AUTRES FOIS :
<
SPU1:    EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU QUATRIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU CINQUIEME CARACTERE.
         AD          FWORK
         RSR
SP2:     EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
<
<
<        C O M P O S A N T E   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOC CARTE RHO 1'
DF'SIOC CARTE XY 1'
ED'SIOC CARTE XY 1'
IN0
         PAGE
         IDP         "SIOC CARTE XY 1"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   1  :
<                    ( L I S T E   ( X , Y ) )
<
<
<        FORMAT :
<                      ON TROUVE DANS L'ORDRE :
<                    1 - UN PREMIER PAQUET CONTENANT 'XX1'
<                    COORDONNEES 'X' EN ENTIER SUR 'XX2' CHIFFRES.
<                    2 - UN DEUXIEME PAQUET CONTENANT 'XX1'
<                    COORDONNEES 'Y' EN ENTIER SUR 'XX2' CHIFFRES.
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    DZS         LCBUF/NOCMO     < BUFFER DES CARTE,
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0A;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         101             < LONGUEUR DES LISTES DE COORDONNEES,
XX2:     VAL         3               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
ALXY:    WORD        TV2             < ADRESSE DE 'LXY' DANS 'CDAI'...
LXY:     WORD        0               < MOT COURANT DE 'LXY'.
BLXY:    WORD        LXY
C10:     WORD        10              < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
ASPWXY:  WORD        SPWXY           < ECRITURE DANS 'LXY',
ASPRXY:  WORD        SPRXY           < LECTURE DANS 'LXY'.
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         LA          YR
         OR          XR
         JANE        SPU1            < AUTRES FOIS...
<
< CAS DE LA PREMIERE FOIS :
<
         LYI         0               < INDEX DE 'LXY'.
SPU2:    EQU         $
SPU4:    EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE DE LA CARTE :
         JE          SPU3            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SPU4
SPU3:    EQU         $
         LXI         0               < INDEX DES CARACTERES CARTE.
SPU5:    EQU         $
         BSR         ASP1            < DECODAGE DECIMAL,
         STA         LXY
         BSR         ASPWXY          < ET STOCKAGE DE 'X'...
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU6            < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL LIRE UNE AUTRE CARTE ???
         JL          SPU5            < NON...
         JMP         SPU2            < OUI...
SPU6:    EQU         $
         LYI         0               < INDEX DE 'LXY' :
SPU12:   EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE D'UNE CARTE 'Y'...
         LXI         0               < X=INDEX DES CARACTERES DE LA CARTE.
SPU15:   EQU         $
         BSR         ASP1            < DECODAGE DECIMAL...
         AD          ALIGM1
         NGR         A,A
         STA         YS
         BSR         ASPRXY          < RECUPERATION DE 'X',
         LA          LXY
         STA         XS
         LAI         NIVMAX
         BSR         ASPRPS          < FORCAGE DU POINT (XS,YS).
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU16           < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL CHANGER DE CARTE ???
         JL          SPU15           < NON...
         JMP         SPU12           < OUI...
SPU16:   EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
<
< CAS DES AUTRES FOIS :
<
SPU1:    EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         IF          NLIGM1-NPOLM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         CPI         NLIGM1?NPOLM1
         JLE         SP11            < OK...
         QUIT        1
SP11:    EQU         $
         RSR
SP2:     EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
<
<
<        A C C E S   A   ' L X Y '  :
<
<
SPRXY:   EQU         $
         PSR         A,X
         LA          ALXY
         ADR         Y,A             < Y=INDEX D'ACCES.
         LB          BLXY
         LXI         1
         RCDA
         PLR         A,X
         RSR
SPWXY:   EQU         $
         PSR         A,X
         LA          ALXY
         ADR         Y,A             < Y=INDEX D'ACCES.
         LB          BLXY
         LXI         1
         WCDA
         PLR         A,X
         RSR
<
<
<        C O M P O S A N T E   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOC CARTE XY 1'
DF'SIOC CARTE XY 2'
ED'SIOC CARTE XY 2'
IN0
         PAGE
         IDP         "SIOC CARTE XY 2"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   2  :
<                    ( L I S T E   ( X , Y ) )
<
<
<        FORMAT :
<                      ON TROUVE DANS L'ORDRE :
<                    1 - UN PREMIER PAQUET CONTENANT 'XX1'
<                    COORDONNEES 'X' EN ENTIER SUR 'XX2' CHIFFRES.
<                    2 - UN DEUXIEME PAQUET CONTENANT 'XX1'
<                    COORDONNEES 'Y' EN ENTIER SUR 'XX2' CHIFFRES.
<
<
<        FONCTION :
<                      TRACE LA COURBE DONNEE SOUS LA
<                    FORME DE 2 LISTE (X(I)) ET (Y(I)),
<                    SACHANT QUE CHAQUE POINT EST REPRESENTE
<                    PAR UN PAVE (SPIRALE) DE SURFACE
<                    PROPORTIONNELLE AU RAYON DE COURBURE.
<
<
<        ARGUMENT :
<                    A0000=CONSTANTE DE PROPORTIONNALITE POUR
<                          CALCULER LE RAYON DE COURBURE.
A0::     VAL         0
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         BUFIN           < BUFFER DES CARTE,
         IF          STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR%
         IF          ATTENTION : ERREUR DE RECOUVREMENT !!!
XWOR%:   VAL         0
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0A;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         101             < LONGUEUR DES LISTES DE COORDONNEES,
XX2::    VAL         3               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         4               < PARAMETRE DE CALCUL DES DERIVEES
                                     < SECONDES (PAS D'APPROXIMATION).
ALXY:    EQU         CTCDA           < ADRESSE DE 'LXY' DANS 'CDAI'...
LXY:     EQU         DXDU+0          < MOT COURANT DE 'LXY'.
C10:     WORD        BASE10          < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
XSM:     EQU         DXDU+1          < X(I-1),
YSM:     EQU         DXDV+0          < Y(I-1),
XSP:     EQU         DXDV+1          < X(I+1),
YSP:     EQU         DYDU+0          < Y(I+1).
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
ASP3:    WORD        SP3             < RECUPERATION DE X ET Y DANS LXY...
ASPWXY:  WORD        SPWXY           < ECRITURE DANS 'LXY',
ASPRXY:  WORD        SPRXY           < LECTURE DANS 'LXY'.
<
< DONNEES DE TRACE DES SPIRALES :
<
LB0:     EQU         DYDU+1          < LONGUEUR DU BRAS COURANT DE LA SPIRALE.
LB:      EQU         DYDV+0          < NOMBRE DE POINTS ENCORE A TRAITER
                                     < SUR LE BRAS COURANT DE LA SPIRALE.
NP:      EQU         DYDV+1          < NOMBRE DE POINTS DEJA TRAITES,
NPM:     EQU         DZDU+0          < NOMBRE DE POINTS A TRAITER.
DELTAX:  EQU         DZDU+1          < PAS D'INCREMENTATION DE X,
DELTAY:  EQU         DZDV+0          < PAS D'INCREMENTATION DE Y.
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
<
< NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0...
<
         LYI         0               < INDEX DE 'LXY'.
SPU2:    EQU         $
SPU4:    EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE DE LA CARTE :
         JE          SPU3            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SPU4
SPU3:    EQU         $
<
< NOTA : (X)=0 APRES LE SVC !!!
<
SPU5:    EQU         $
         BSR         ASP1            < DECODAGE DECIMAL,
         BSR         ASPWXY          < ET STOCKAGE DE 'X'...
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU6            < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL LIRE UNE AUTRE CARTE ???
         JL          SPU5            < NON...
         JMP         SPU2            < OUI...
SPU6:    EQU         $
         LYI         0               < INDEX DE 'LXY' :
SPU12:   EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE D'UNE CARTE 'Y'...
<
< NOTA : (X)=0 APRES LE SVC !!!
<
SPU15:   EQU         $
         BSR         ASP1            < DECODAGE DECIMAL...
         AD          ALIGM1
         NGR         A,A
         SWBR        A,A
         BSR         ASPRXY          < RECUPERATION DE 'X',
         OR          LXY
         BSR         ASPWXY          < RANGEMENT DE (Y,X).
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU16           < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL CHANGER DE CARTE ???
         JL          SPU15           < NON...
         JMP         SPU12           < OUI...
SPU16:   EQU         $
<
< EXPLOITATION DE LA LISTE LXY :
<
         LYI         0               < Y=INDEX DE 'LXY'...
SPU20:   EQU         $
MKX::    VAL         '00FF           < MASQUE DES X DANS LXY,
MKY::    VAL         'FF00           < ET CELUI DES Y...
         BSR         ASP3
         STA         XS              < GENERATION DU POINT COURANT
         STB         YS              < (XS,YS)=(X(I),Y(I)).
         ADRI        -XX3,Y
         CPZR        Y               < EST-CE LE PREMIER POINT ???
         JL          SPU21           < OUI, ON GARDE (XS,YS)...
         BSR         ASP3            < NON, ON PREND LE PRECEDENT...
SPU21:   EQU         $
         STA         XSM             < GENERATION DU POINT PRECEDENT
         STB         YSM             < (X(I-1),(Y(I-1)).
         ADRI        2*XX3,Y
         LR          Y,A
         CPI         XX1             < EST-CE LE DERNIER POINT ???
         LA          XS
         LB          YS
         JGE         SPU22           < OUI, ON GARDE (XS,YS)...
         BSR         ASP3            < NON, ON PREND LE SUIVANT...
SPU22:   EQU         $
         STA         XSP             < GENERATION DU POINT SUIVANT
         STB         YSP             < (X(I+1),(Y(I+1)).
         ADRI        -XX3+1,Y        < POUR LE PASSAGE AU POINT SUIVANT.
         AD          XSM
         SB          XS
         SB          XS              < D2X/DS=XSP-2*XS+XSM.
         STA         FWORK1
         MP          FWORK1
         STB         FWORK1          < ON A ICI LE CARRE DE LA DERIVEE
                                     < SECONDE DE 'X' EN (XS,YS).
         LA          YSP
         AD          YSM
         SB          YS
         SB          YS              < D2Y/DS=YSP-2*YS+YSM.
         STA         FWORK2
         MP          FWORK2
         LR          B,A             < ON A ICI LE CARRE DE LA DERIVEE
                                     < SECONDE DE 'Y' EN (XS,YS).
         AD          FWORK1
         ADRI        1,A             < POUR QU'IL NE SOIT PAS NUL...
         FLT
         BSR         ARAC            < CE QUI DONNE L'INVERSE DU
                                     < RAYON DE COURBURE...
         FST         FWORK
         LXI         A0
         BSR         ASPCT           < ACCES A LA CONSTANTE 'A0000',
         FDV         FWORK           < CE QUI DONNE LE RAYON DE COURBURE
                                     < A UNE CONSTANTE MULTIPLICATIVE PRES...
         BSR         AROND
         STA         NPM             < D'OU LA TAILLE DES SPIRALES...
<
< TRACE D'UNE SPIRALE :
<
SPMOY:   EQU         $
         PSR         A,B,X,Y
         STZ         NP              < NP=NOMBRE DE POINTS TRAITES.
         LAI         1
         STA         DELTAX          < DELTAX <-- +1,
         STZ         DELTAY          < DELTAY <-- 0.
         STA         LB0             < INITIALISATION DE LA LONGUEUR DU
                                     < PREMIER BRAS DE LA SPIRALE.
<
< PARCOURS D'UN BRAS :
<
SPMOY1:  EQU         $
         LA          LB0
         STA         LB              < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2:  EQU         $
         IC          NP              < COMPTAGE DES POINTS TRAITES :
         LA          NP
         CP          NPM             < FINI ???
         JG          SPMOY3          < OUI...
         LA          XS              < NON :
         JAL         SPMOY4          < LE POINT EST HORS-ECRAN...
         CPI         NPOLM1
         JG          SPMOY4          < HORS-ECRAN...
         LA          YS
         JAL         SPMOY4          < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPMOY4          < HORS-ECRAN...
         LAI         NIVMAX
         BSR         ASPRPS          < TRACE DU POINT (XS,YS) COURANT...
SPMOY4:  EQU         $
         LA          XS
         AD          DELTAX          < CHANGEMENT DE
         STA         XS
         LA          YS
         AD          DELTAY          < POINT COURANT (XS,YS).
         STA         YS
         DC          LB              < DECOMPTAGE DES POINTS SUR LA BRANCHE :
         JG          SPMOY2          < OK, IL EN RESTE...
         CPZ         DELTAX          < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
                                     < LA LONGUEUR COURANTE DES BRANCHES ???
         JNE         SPMOY5          < NON (DX#0) ...
         IC          LB0             < OUI (DX=0) ...
SPMOY5:  EQU         $
         LA          DELTAY          < ON FAIT SUBIR AU NOMBRE COMPLEXE
         NGR         A,A             < (DX,DY) UNE ROTATION DE PI/2, SOIT
         LB          DELTAX          < UNE MULTIPLICATION PAR LA MATRICE
                                     < (0,-1,1,0)...
         STA         DELTAX          < DELTAX=-DELTAY,
         STB         DELTAY          < DELTAY=DELTAX.
         JMP         SPMOY1          < VERS LA BRANCHE SUIVANTE
<
< SORTIE DU MODULE DE TRACE :
<
SPMOY3:  EQU         $
         PLR         A,B,X,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JL          SPU20           < NON...
<
< OUI, FIN DE L'IMAGE COURANTE...
<
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
SPU1:    EQU         $
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         IF          NLIGM1-NPOLM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         CPI         NLIGM1?NPOLM1
         JG          SP22            < ERREUR !!!
         RSR
SP2:     EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
<
<
<        A C C E S   A   ' L X Y '  :
<
<
SPRXY:   EQU         $
         PSR         A,B,X
         LA          ALXY
         ADR         Y,A             < Y=INDEX D'ACCES.
         LBI         LXY-ZERO
         LXI         1
         RCDA
SPXY1:   EQU         $
         PLR         A,B,X
         RSR
SPWXY:   EQU         $
         STA         LXY             < A=ARGUMENT D'APPEL...
         PSR         A,B,X
         LA          ALXY
         ADR         Y,A             < Y=INDEX D'ACCES.
         LBI         LXY-ZERO
         LXI         1
         WCDA
         ADRI        1,Y
         JMP         SPXY1
<
<
<        R E C U P E R A T I O N   D E S   C O O R D O N N E E S  :
<
<
SP3:     EQU         $
         BSR         ASPRXY
         LA          LXY             < LXY=(Y,X),
         LBI         0
         SCLD        MKY=0           < B=COORDONNEE 'Y',
         SLRS        MKY=0           < A=COORDONNEE 'X'.
         RSR
:F
:F
< <<'SIOC CARTE XY 2'
DF'SIOC CARTE XY 3'
ED'SIOC CARTE XY 3'
IN0
         PAGE
         IDP         "SIOC CARTE XY 3"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   3  :
<                    ( L I S T E   ( X , Y , C ) )
<
<
<        FORMAT :
<                      ON TROUVE UN PAQUET CONTENANT 'XX1'
<                    TRIPLET (X(I),Y(I),C(I)) CHAQUE NOMBRE
<                    ETANT CODE SUR 'XX2' CHIFFRES (EN ENTIER).
<
<        FONCTION :
<                      TRACE LA COURBE DONNEE SOUS LA
<                    FORME DE 2 LISTE (X(I)) ET (Y(I)),
<                    SACHANT QUE CHAQUE POINT EST REPRESENTE
<                    PAR UN PAVE (SPIRALE) DE SURFACE
<                    PROPORTIONNELLE AU RAYON DE COURBURE.
<
<
<        ARGUMENT :
<                    A0000=CONSTANTE DE PROPORTIONNALITE POUR
<                          CALCULER LE RAYON DE COURBURE.
A0::     VAL         0
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         BUFIN           < BUFFER DES CARTE,
         IF          STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR%
         IF          ATTENTION : ERREUR DE RECOUVREMENT !!!
XWOR%:   VAL         0
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0A;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         101             < LONGUEUR DES LISTES DE COORDONNEES,
XX2::    VAL         3               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         3               < NOMBRE DE VALEURS PAR TRIPLET.
XX4::    VAL         XX2*XX3         < NOMBRE DE CHIFFRES PAR TRIPLET.
LXY:     EQU         DXDU+0          < MOT COURANT DE 'LXY'.
C10:     WORD        BASE10          < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
<
< DONNEES DE TRACE DES SPIRALES :
<
LB0:     EQU         DYDU+1          < LONGUEUR DU BRAS COURANT DE LA SPIRALE.
LB:      EQU         DYDV+0          < NOMBRE DE POINTS ENCORE A TRAITER
                                     < SUR LE BRAS COURANT DE LA SPIRALE.
NP:      EQU         DYDV+1          < NOMBRE DE POINTS DEJA TRAITES,
NPM:     EQU         DZDU+0          < NOMBRE DE POINTS A TRAITER.
DELTAX:  EQU         DZDU+1          < PAS D'INCREMENTATION DE X,
DELTAY:  EQU         DZDV+0          < PAS D'INCREMENTATION DE Y.
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
<
< NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0...
<
         LYI         0               < INDEX DE 'LXY'.
         LXI         LCBUF/XX2*XX2
<
< ITERATION SUR LES POINTS :
<
SPU5:    EQU         $
         BSR         ASP1            < DECODAGE DECIMAL,
         STA         XS              < COORDONNEE X(I),
         BSR         ASP1
         AD          ALIGM1
         NGR         A,A
         STA         YS              < COORDONNEE Y(I),
         BSR         ASP1
         FLT                         < COURBURE(I).
         FST         FWORK
         PSR         X
         LXI         A0
         BSR         ASPCT           < ACCES A LA CONSTANTE 'A0000',
         PLR         X
         FDV         FWORK           < CE QUI DONNE LE RAYON DE COURBURE
                                     < A UNE CONSTANTE MULTIPLICATIVE PRES...
         BSR         AROND
         STA         NPM             < D'OU LA TAILLE DES SPIRALES...
<
< TRACE D'UNE SPIRALE :
<
SPMOY:   EQU         $
         PSR         A,B,X,Y
         STZ         NP              < NP=NOMBRE DE POINTS TRAITES.
         LAI         1
         STA         DELTAX          < DELTAX <-- +1,
         STZ         DELTAY          < DELTAY <-- 0.
         STA         LB0             < INITIALISATION DE LA LONGUEUR DU
                                     < PREMIER BRAS DE LA SPIRALE.
<
< PARCOURS D'UN BRAS :
<
SPMOY1:  EQU         $
         LA          LB0
         STA         LB              < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2:  EQU         $
         IC          NP              < COMPTAGE DES POINTS TRAITES :
         LA          NP
         CP          NPM             < FINI ???
         JG          SPMOY3          < OUI...
         LA          XS              < NON :
         JAL         SPMOY4          < LE POINT EST HORS-ECRAN...
         CPI         NPOLM1
         JG          SPMOY4          < HORS-ECRAN...
         LA          YS
         JAL         SPMOY4          < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPMOY4          < HORS-ECRAN...
         LAI         NIVMAX
         BSR         ASPRPS          < TRACE DU POINT (XS,YS) COURANT...
SPMOY4:  EQU         $
         LA          XS
         AD          DELTAX          < CHANGEMENT DE
         STA         XS
         LA          YS
         AD          DELTAY          < POINT COURANT (XS,YS).
         STA         YS
         DC          LB              < DECOMPTAGE DES POINTS SUR LA BRANCHE :
         JG          SPMOY2          < OK, IL EN RESTE...
         CPZ         DELTAX          < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
                                     < LA LONGUEUR COURANTE DES BRANCHES ???
         JNE         SPMOY5          < NON (DX#0) ...
         IC          LB0             < OUI (DX=0) ...
SPMOY5:  EQU         $
         LA          DELTAY          < ON FAIT SUBIR AU NOMBRE COMPLEXE
         NGR         A,A             < (DX,DY) UNE ROTATION DE PI/2, SOIT
         LB          DELTAX          < UNE MULTIPLICATION PAR LA MATRICE
                                     < (0,-1,1,0)...
         STA         DELTAX          < DELTAX=-DELTAY,
         STB         DELTAY          < DELTAY=DELTAX.
         JMP         SPMOY1          < VERS LA BRANCHE SUIVANTE
<
< SORTIE DU MODULE DE TRACE :
<
SPMOY3:  EQU         $
         PLR         A,B,X,Y
         ADRI        1,Y             < AU TRIPLET SUIVANT...
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JNE         SPU5            < NON, ON ITERE...
<
< OUI, FIN DE L'IMAGE COURANTE...
<
SPU30:   EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
SPU1:    EQU         $
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         IF          NLIGM1-NPOLM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         CPI         NLIGM1?NPOLM1
         JG          SP22            < ERREUR !!!
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
SP2:     EQU         $
         LR          X,A
         CPI         LCBUF/XX2*XX2   < FAUT-IL LIRE UNE CARTE ???
         JL          SP24            < NON...
SP25:    EQU         $
         LAD         DEMCR           < OUI :
         SVC         0               < LECTURE D'UNE CARTE...
         JE          SP24            < OK... A NOTER : (X)=0 !!!
         QUIT        1               < !ASSIGN ???
         JMP         SP25            < ET ON RETENTE...
SP24:    EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
:F
:F
< <<'SIOC CARTE XY 3'
DF'SIOC CARTE XY 4'
ED'SIOC CARTE XY 4'
IN0
         PAGE
         IDP         "SIOC CARTE XY 4"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   4  :
<                    ( L I S T E   ( X , Y , C ) )
<
<
<        FORMAT :
<                      ON TROUVE UN PAQUET DE CARTE CONTENANT
<                    UN NOMBRE VARIABLE DE TRIPLETS (X(I),Y(I),P(I))
<                    X(I) ET Y(I) ETANT DES COORDONNEES DANS LE
<                    SEGMENT (0,255), ET P(I) UN ORDRE DE TRACE :
<                                    P(I)=0 : ARRET D'UNE CHAINE DE SEGMENTS,
<                                         1 : DEBUT D'UNE NOUVELLE CHAINE,
<                                         2 : FIN DE L'IMAGE COURANTE,
<                                         3 : FIN DE LA SUITE D'IMAGE.
<                      X(I) ET Y(I) SONT CODES SUR XX2 CHIFFRES,
<                    P(I) SUR XX3 CHIFFRES, ET IL Y A XX4 TRIPLETS
<                    PAR CARTE.
<
<        FONCTION :
<                      TRACE LE MAILLAGE DONNE PAR UNE
<                    SUITE DE TRIPLETS DEFINISSANT UNE
<                    SUITE DE CHAINES DE SEGMENTS.
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         BUFIN           < BUFFER DES CARTE,
         IF          STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR%
         IF          ATTENTION : ERREUR DE RECOUVREMENT !!!
XWOR%:   VAL         0
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0A;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX2::    VAL         3               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         2               < NOMBRE DE CHIFFRES DEFINISSANT LE CODE
                                     < P(I) DE LA "PLUME", DONT LES VALEURS
                                     < POSSIBLES SONT :
YY0::    VAL         0               < ARRET D'UNE CHAINE,
YY1::    VAL         1               < DEBUT D'UNE CHAINE,
YY2::    VAL         2               < FIN D'UNE IMAGE,
YY3::    VAL         3               < FIN D'UNE SUITE D'IMAGES.
XX4::    VAL         10              < NOMBRE DE TRIPLETS PAR CARTE.
XX5::    VAL         XX2+XX2+XX3*XX4 < NOMBRE DE CARACTERES PAR CARTE.
         IF          LCBUF-XX5,,XWOR%,XWOR%
         IF          'XX5' EST MAUVAIS !!!
XWOR%:   VAL         0
C10:     WORD        BASE10          < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
PREM:    WORD        0               < 0 : ON N'A PAS RENCONTRE LE PREMIER
                                     <     TRIPLET,
                                     < 1 : DEJA RENCONTRE...
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
<
< DONNEES DE L'INTERPOLATION :
<
ENTFLO:  WORD        0               < MOT INUTILISE,
ENTMOD:  WORD        '0188           < MODE DE TRACE 'SBT' ANTI-ALIASING,
ENTYV1:  WORD        0               < SEGMENT VIDEO,
ENTXV1:  WORD        0
ENTYV2:  WORD        0
ENTXV2:  WORD        0
ENTYG1:  WORD        0               < SEGMENT GRAPHIQUE.
ENTXG1:  WORD        0
ENTYG2:  WORD        0
ENTXG2:  WORD        0
LENT::   VAL         $-ENTFLO        < LONGUEUR DE L'EN-TETE.
DEMINT:  WORD        TVDKU           < DEMANDE D'INTERPOLATION ANTI-ALIASING.
         WORD        ENTFLO-ZERO*NOCMO
         WORD        LENT*NOCMO
         WORD        0
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
<
< NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0...
<
         LXI         XX5             < INDEX COURANT DES CARTE...
         STZ         PREM            < PAS ENCORE DE PREMIER TRIPLET...
<
< BOUCLE DE RECUPERATION D'UN TRIPLET :
<
SPU10:   EQU         $
         LYI         0               < MODE "LECTURE X OU Y"...
         BSR         ASP1
         STA         XS              < RECUPERATION DE X(I),
         BSR         ASP1
         STA         YS              < RECUPERATION DE Y(I),
         LYI         1               < MODE "LECTURE P"...
         BSR         ASP1
<
< AIGUILLAGE :
<
         CPZ         PREM            < LE PREMIER TRIPLET A-T'IL ETE RENCONTRE ?
         JNE         SPU14           < OUI...
         IC          PREM            < NON, C'EST DONC LUI...
         JMP         SPU13           < ON FAIT COMME SI ON AVAIT RECU P(I)=YY0,
                                     < SANS LE VERIFIER...
SPU14:   EQU         $
         CPI         YY2
         JE          SPU30           < C'EST FINI...
         CPI         YY3
         JE          SPU30           < C'EST FINI...
         CPI         YY1
         JE          SPU12           < CAS D'UN CHAINAGE DE SEGMENT...
         CPI         YY0
         JE          SPU13           < CAS D'UN DEBUT DE CHAINE...
         QUIT        1               < ?!??!??!
<
< CAS DU DEBUT DE CHAINE :
<
SPU13:   EQU         $
         LA          XS              < INITIALISATION DE LA CHAINE...
         STA         ENTXG1
         LA          YS
         STA         ENTYG1
         JMP         SPU10           < VERS LE TRIPLET SUIVANT...
<
< CAS D'UN SEGMENT DANS UNE CHAINE :
<
SPU12:   EQU         $
         LA          XS
         STA         ENTXG2
         LA          YS
         STA         ENTYG2
         PSR         X
         LAD         DEMINT
         SVC         0               < TRACE ANTI-ALIASING DU SEGMENT COURANT...
         PLR         X
         LA          ENTXG2          < ET CHAINAGE...
         STA         ENTXG1
         LA          ENTYG2
         STA         ENTYG1
         JMP         SPU10           < VERS LE TRIPLET SUIVANT...
<
< OUI, FIN DE L'IMAGE COURANTE...
<
SPU30:   EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
SPU1:    EQU         $
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         CPZR        Y               < QUEL EST LE MODE ???
         JNE         SP11            < MODE "LECTURE P"...
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         SLLS        DEDX?DEDY       < CONVERSION AU FORMAT VISU...
SP11:    EQU         $
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
SP2:     EQU         $
         LR          X,A
         CPI         XX5             < FAUT-IL LIRE UNE CARTE ???
         JL          SP24            < NON...
SP25:    EQU         $
         LAD         DEMCR           < OUI :
         SVC         0               < LECTURE D'UNE CARTE...
         JE          SP24            < OK... A NOTER : (X)=0 !!!
         QUIT        1               < !ASSIGN ???
         JMP         SP25            < ET ON RETENTE...
SP24:    EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
:F
:F
< <<'SIOC CARTE XY 4'
DF'SIOC CARTE XY 5'
ED'SIOC CARTE XY 5'
IN0
         PAGE
         IDP         "SIOC CARTE XY 5"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   5  :
<                    ( L I S T E   ( X , Y , C ) )
<
<
<        FORMAT :
<                      ON TROUVE UN PAQUET DE CARTE CONTENANT
<                    UN NOMBRE VARIABLE DE TRIPLETS (X(I),Y(I),P(I))
<                    X(I) ET Y(I) ETANT DES COORDONNEES DANS LE
<                    SEGMENT (0,255), ET P(I) UN ORDRE DE TRACE :
<                                    P(I)=0 : ARRET D'UNE CHAINE DE SEGMENTS,
<                                         1 : DEBUT D'UNE NOUVELLE CHAINE,
<                                         2 : FIN DE L'IMAGE COURANTE,
<                                         3 : FIN DE LA SUITE D'IMAGE.
<                      X(I) ET Y(I) SONT CODES SUR XX2 CHIFFRES,
<                    P(I) SUR XX3 CHIFFRES, ET IL Y A XX4 TRIPLETS
<                    PAR CARTE.
<
<
<        BLOCAGE DES ENREGISTREMENTS :
<                      ON BLOQUE 'XX6' CARTE PAR ENRE-
<                    GISTREMENT SUR LA BANDE MAGNETIQUE.
<
<        FONCTION :
<                      TRACE LE MAILLAGE DONNE PAR UNE
<                    SUITE DE TRIPLETS DEFINISSANT UNE
<                    SUITE DE CHAINES DE SEGMENTS.
<
<
<        ASSIGNATIONS :
<                    !ASSIGN A=DKU,
<                    !ASSIGN B=MT1.
<
<
<        ARGUMENT :
<                    A0000=CONSTANTE DE TRANSLATION DES COORDONNEES Y.
A0::     VAL         0
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         IMAGE           < BUFFER DES CARTE,
KCARTE:  WORD        0               < DECOMPTEUR DE DEBLOCAGE DES CARTE
                                     < DANS LE BUFFER BANDE MAGNETIQUE.
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
ACBUF0:  WORD        CBUF,X          < ET POUR LE REINITIALISER...
XX2::    VAL         3               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         2               < NOMBRE DE CHIFFRES DEFINISSANT LE CODE
                                     < P(I) DE LA "PLUME", DONT LES VALEURS
                                     < POSSIBLES SONT :
YY0::    VAL         0               < ARRET D'UNE CHAINE,
YY1::    VAL         1               < DEBUT D'UNE CHAINE,
YY2::    VAL         2               < FIN D'UNE IMAGE,
YY3::    VAL         3               < FIN D'UNE SUITE D'IMAGES.
XX4::    VAL         10              < NOMBRE DE TRIPLETS PAR CARTE.
XX5::    VAL         XX2+XX2+XX3*XX4 < NOMBRE DE CARACTERES PAR CARTE.
         IF          LCBUF-XX5,,XWOR%,XWOR%
         IF          'XX5' EST MAUVAIS !!!
XWOR%:   VAL         0
XX6::    VAL         45              < FACTEUR DE BLOCAGE DES CARTE DANS LE
                                     < BUFFER DE LA BANDE MAGNETIQUE...
DEMCR:   BYTE        '0B;'00         < LECTURE DES ENREGISTREMENTS.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF*XX6
         WORD        0
C10:     WORD        BASE10          < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
PREM:    WORD        0               < 0 : ON N'A PAS RENCONTRE LE PREMIER
                                     <     TRIPLET,
                                     < 1 : DEJA RENCONTRE...
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
<
< DONNEES DE L'INTERPOLATION :
<
ENTFLO:  WORD        0               < MOT INUTILISE,
ENTMOD:  WORD        '0188           < MODE DE TRACE 'SBT' ANTI-ALIASING,
ENTYV1:  WORD        0               < SEGMENT VIDEO,
ENTXV1:  WORD        0
ENTYV2:  WORD        0
ENTXV2:  WORD        0
ENTYG1:  WORD        0               < SEGMENT GRAPHIQUE.
ENTXG1:  WORD        0
ENTYG2:  WORD        0
ENTXG2:  WORD        0
LENT::   VAL         $-ENTFLO        < LONGUEUR DE L'EN-TETE.
DEMINT:  WORD        TVDKU           < DEMANDE D'INTERPOLATION ANTI-ALIASING.
         WORD        ENTFLO-ZERO*NOCMO
         WORD        LENT*NOCMO
         WORD        0
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
<
< CLEAR DE L'IMAGE "CDAI" :
<
         STZ         XS
SPU40:   EQU         $
         STZ         YS
SPU41:   EQU         $
         LAI         0
         BSR         ASPRPS          < NIVEAU(XS,YS) <-- 0.
         IC          YS
         LAI         NPOLM1
         CP          YS
         JGE         SPU41           < BALAYAGE D'UNE COLONNE,
         IC          XS
         LAI         NLIGM1
         CP          XS
         JGE         SPU40           < CHANGEMENT DE COLONNE...
<
< NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0...
<
         LXI         XX5             < INDEX COURANT DES CARTE...
         STZ         PREM            < PAS ENCORE DE PREMIER TRIPLET...
<
< BOUCLE DE RECUPERATION D'UN TRIPLET :
<
SPU10:   EQU         $
         LYI         0               < MODE "LECTURE X OU Y"...
         BSR         ASP1
         STA         XS              < RECUPERATION DE X(I),
         BSR         ASP1
         STA         YS              < RECUPERATION DE Y(I),
         PSR         X
         LXI         A0
         BSR         ASPCT           < RECUPERATION DE 'A0000',
         BSR         AROND           < ET CONVERSION ENTIERE,
         AD          YS              < PUIS TRANSLATION
         STA         YS              < DE 'YS'...
         PLR         X
         LYI         1               < MODE "LECTURE P"...
         BSR         ASP1
<
< AIGUILLAGE :
<
         CPZ         PREM            < LE PREMIER TRIPLET A-T'IL ETE RENCONTRE ?
         JNE         SPU14           < OUI...
         IC          PREM            < NON, C'EST DONC LUI...
         JMP         SPU13           < ON FAIT COMME SI ON AVAIT RECU P(I)=YY0,
                                     < SANS LE VERIFIER...
SPU14:   EQU         $
         CPI         YY2
         JE          SPU30           < C'EST FINI...
         CPI         YY3
         JE          SPU30           < C'EST FINI...
         CPI         YY1
         JE          SPU12           < CAS D'UN CHAINAGE DE SEGMENT...
         CPI         YY0
         JE          SPU13           < CAS D'UN DEBUT DE CHAINE...
         QUIT        1               < ?!??!??!
<
< CAS DU DEBUT DE CHAINE :
<
SPU13:   EQU         $
         LA          XS              < INITIALISATION DE LA CHAINE...
         STA         ENTXG1
         LA          YS
         STA         ENTYG1
         JMP         SPU10           < VERS LE TRIPLET SUIVANT...
<
< CAS D'UN SEGMENT DANS UNE CHAINE :
<
SPU12:   EQU         $
         LA          XS
         STA         ENTXG2
         LA          YS
         STA         ENTYG2
         PSR         X
         LAD         DEMINT
         SVC         0               < TRACE ANTI-ALIASING DU SEGMENT COURANT...
         PLR         X
         LA          ENTXG2          < ET CHAINAGE...
         STA         ENTXG1
         LA          ENTYG2
         STA         ENTYG1
         JMP         SPU10           < VERS LE TRIPLET SUIVANT...
<
< OUI, FIN DE L'IMAGE COURANTE...
<
SPU30:   EQU         $
         STZ         KCARTE          < LA FIN DU BLOC COURANT EST IGNOREE...
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
SPU1:    EQU         $
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         CPZR        Y               < QUEL EST LE MODE ???
         JNE         SP11            < MODE "LECTURE P"...
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         SLLS        DEDX?DEDY       < CONVERSION AU FORMAT VISU...
SP11:    EQU         $
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
SP2:     EQU         $
         LR          X,A
         CPI         XX5             < FAUT-IL LIRE UNE CARTE ???
         JL          SP24            < NON...
SP25:    EQU         $
         LA          ACBUF
         ADRI        LCBUF/NOCMO,A
         STA         ACBUF           < PROGRESSION DU BUFFER CARTE DANS LE
                                     < BUFFER BANDE MAGNETIQUE...
         DC          KCARTE          < ALORS, FAUT-IL LIRE UN NOUVEL
                                     < ENREGISTREMENT ???
         JGE         SP28            < NON...
         LAI         XX6-1           < OUI, (-1 A CAUSE DU 'DC' QUI MANQUE)
         STA         KCARTE          < REINITIALISATION DU FACTEUR DE DEBLOCAGE,
         LA          ACBUF0
         STA         ACBUF           < ET DU RELAI DU BUFFER CARTE...
SP27:    EQU         $
         LAD         DEMCR           < OUI :
         SVC         0               < LECTURE D'UNE CARTE...
         JE          SP28            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SP27            < ET ON RETENTE...
SP28:    EQU         $
         LXI         0               < REINITIALISATION DE L'INDEX CARACTERE.
SP24:    EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ANDI        '0F             < DECODAGE 'ASCI' OU 'EBCDIC', EN TENANT
                                     < COMPTE DE L'EQUIVALENCE ENTRE "SPACE"
                                     < ET LE CHIFFRE "0".
         CPI         BASE10
         JL          SP23
         QUIT        1
SP23:    EQU         $
         RSR
:F
:F
< <<'SIOC CARTE XY 5'
DF'SIOC CARTE XY 6'
ED'SIOC CARTE XY 6'
IN0
         PAGE
         IDP         "SIOC CARTE XY 6"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   6  :
<                    ( L I S T E   ( X , Y ) )
<
<
<        FORMAT :
<                      ON TROUVE DANS L'ORDRE :
<                    1 - UN PREMIER PAQUET CONTENANT 'XX1'
<                    COORDONNEES 'X' EN ENTIER SUR 'XX2' CHIFFRES.
<                    2 - UN DEUXIEME PAQUET CONTENANT 'XX1'
<                    COORDONNEES 'Y' EN ENTIER SUR 'XX2' CHIFFRES.
<
<
<        FONCTION :
<                      FAIT UN TRACE ANTI-ALIASING
<                    DE LA CHAINES DE SEGMENTS ARGU-
<                    MENT...
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    DZS         LCBUF/NOCMO     < BUFFER DES CARTE,
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0B;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         101             < LONGUEUR DES LISTES DE COORDONNEES,
XX2:     VAL         3               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
ALXY:    WORD        TV2             < ADRESSE DE 'LXY' DANS 'CDAI'...
LXY:     WORD        0               < MOT COURANT DE 'LXY'.
BLXY:    WORD        LXY
C10:     WORD        10              < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
ASPWXY:  WORD        SPWXY           < ECRITURE DANS 'LXY',
ASPRXY:  WORD        SPRXY           < LECTURE DANS 'LXY'.
<
< DONNEES DE L'INTERPOLATION :
<
PREM:    WORD        0               < 0 : CAS DU PREMIER POINT...
ENTFLO:  WORD        0               < MOT INUTILISE,
ENTMOD:  WORD        '0188           < MODE DE TRACE 'SBT' ANTI-ALIASING,
ENTYV1:  WORD        0               < SEGMENT VIDEO,
ENTXV1:  WORD        0
ENTYV2:  WORD        0
ENTXV2:  WORD        0
ENTYG1:  WORD        0               < SEGMENT GRAPHIQUE.
ENTXG1:  WORD        0
ENTYG2:  WORD        0
ENTXG2:  WORD        0
LENT::   VAL         $-ENTFLO        < LONGUEUR DE L'EN-TETE.
DEMINT:  WORD        TVDKU           < DEMANDE D'INTERPOLATION ANTI-ALIASING.
         WORD        ENTFLO-ZERO*NOCMO
         WORD        LENT*NOCMO
         WORD        0
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         LA          YR
         OR          XR
         JANE        SPU1            < AUTRES FOIS...
<
< CAS DE LA PREMIERE FOIS :
<
         LYI         0               < INDEX DE 'LXY'.
SPU2:    EQU         $
SPU4:    EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE DE LA CARTE :
         JE          SPU3            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SPU4
SPU3:    EQU         $
         LXI         0               < INDEX DES CARACTERES CARTE.
SPU5:    EQU         $
         BSR         ASP1            < DECODAGE DECIMAL,
         STA         LXY
         BSR         ASPWXY          < ET STOCKAGE DE 'X'...
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU6            < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL LIRE UNE AUTRE CARTE ???
         JL          SPU5            < NON...
         JMP         SPU2            < OUI...
SPU6:    EQU         $
         LYI         0               < INDEX DE 'LXY' :
SPU12:   EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE D'UNE CARTE 'Y'...
         LXI         0               < X=INDEX DES CARACTERES DE LA CARTE.
SPU15:   EQU         $
         BSR         ASP1            < DECODAGE DECIMAL...
         STA         YS
         BSR         ASPRXY          < RECUPERATION DE 'X',
         LA          LXY
         STA         XS
         LB          YS
         CPZ         PREM            < EST-CE LE PREMIER POINT ???
         JNE         SPU24           < NON, ON VA TRACER UN SEGMENT...
         IC          PREM            < OUI, ON MEMORISE QU'AU COUP SUIVANT,
                                     < C'EST UN SEGMENT QUE L'ON TRACERA...
         STA         ENTXG1          < MEMORISATION DU
         STB         ENTYG1          < PREMIER POINT...
         JMP         SPU20           < VERS LE POINT SUIVANT...
SPU24:   EQU         $
         STA         ENTXG2          < MEMORISATION DU POINT COURANT, ET
         STB         ENTYG2          < CHAINAGE AU POINT PRECEDENT...
         PSR         A,X
         LAD         DEMINT
         SVC         0               < TRACE ANTI-ALIASING...
         PLR         A,X
         STA         ENTXG1          < FUTUR PREMIER POINT
         STB         ENTYG1          < D'UN SEGMENT...
SPU20:   EQU         $
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU16           < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL CHANGER DE CARTE ???
         JL          SPU15           < NON...
         JMP         SPU12           < OUI...
SPU16:   EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
<
< CAS DES AUTRES FOIS :
<
SPU1:    EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         IF          NLIGM1-NPOLM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         CPI         NLIGM1?NPOLM1
         JLE         SP11            < OK...
         QUIT        1
SP11:    EQU         $
         SLLS        DEDX?DEDY       < MISE AU FORMAT VISU...
         RSR
SP2:     EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
<
<
<        A C C E S   A   ' L X Y '  :
<
<
SPRXY:   EQU         $
         PSR         A,X
         LA          ALXY
         ADR         Y,A             < Y=INDEX D'ACCES.
         LB          BLXY
         LXI         1
         RCDA
         PLR         A,X
         RSR
SPWXY:   EQU         $
         PSR         A,X
         LA          ALXY
         ADR         Y,A             < Y=INDEX D'ACCES.
         LB          BLXY
         LXI         1
         WCDA
         PLR         A,X
         RSR
<
<
<        C O M P O S A N T E   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOC CARTE XY 6'
DF'SIOC CARTE XY 7'
ED'SIOC CARTE XY 7'
IN0
         PAGE
         IDP         "SIOC CARTE XY 7"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   7  :
<
<
<        FONCTION :
<                      CE MODULE PERMET L'ENTREE DE
<                    CHAMPS VECTORIELS DONT ON SE
<                    DONNE POUR CHAQUE POINT LES
<                    3 COMPOSANTES.
<
<
<        FORMAT :
<                      ON TROUVE SUR CHAQUE CARTE UNE LISTE DE
<                    'XX1' COORDONEES Y CODEES SUR 'XX2' CHIFFRES.
<
<
<        ARGUMENT :
<                    A0000=FACTEUR D'ECHELLE DES VECTEURS.
A0::     VAL         0
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         BUFIN           < BUFFER DES CARTE,
         IF          STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR%
         IF          ATTENTION : ERREUR DE RECOUVREMENT !!!
XWOR%:   VAL         0
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0B;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         16              < LONGUEUR DES LISTES DE COORDONNEES,
XX2::    VAL         5               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX4::    VAL         0               < INDEX DU PREMIER OCTET DU PREMIER
                                     < NOMBRE...
C10:     WORD        10              < CONSTANTE DE CONVERSION DECIMALE.
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
SIGNE:   WORD        0               < 0 : SIGNE "+",
                                     < 1 : SIGNE "-".
CUMUL:   WORD        0               < CUMUL DES NOMBRES DECIMAUX.
WORK:    WORD        0               < ZONE DE TRAVAIL.
COMPRE:  FLOAT       0               < CONSTANTE DE PROPORTION...
INDEX:   WORD        0               < INDEX COURANT DU BUFFER.
KIN7:    WORD        -1              < COMPTAGE DES ENTREES...
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         IC          KIN7
         JG          SPU1            < CAS DES AUTRES FOIS...
<
< CAS DE LA PREMIERE FOIS :
<
         LXI         A0
         BSR         ASPCT
         FST         COMPRE          < FACTEUR D'ECHELLE,
         LXI         XX1*XX2
         STX         INDEX           < ET INDEX D'EXTRACTION DES CARTE...
<
< CAS DES AUTRES ENTREES :
<
SPU1:    EQU         $
         BSR         ASP1            < ENTREE DE LA COORDONNEE SUR 'OX',
         FMP         COMPRE          < MISE A L'ECHELLE...
         RSR
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         BSR         ASP1            < ENTREE DE LA COORDONNEE SUR 'OY',
         FMP         COMPRE          < MISE A L'ECHELLE..
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         BSR         ASP1            < ENTREE DE LA COORDONNEE SUR 'OZ',
         FMP         COMPRE          < MISE A L'ECHELLE...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         LA          INDEX
         CPI         XX1*XX2         < EST-ON AU BOUT DU BUFFER ???
         JL          SP13            < NON...
SP15:    EQU         $
         LAD         DEMCR           < OUI,
         SVC         0               < ON LIT UN ENREGISTREMENT...
         JE          SP14            < OK...
         QUIT        1               < ERREUR : SUREMENT "!ASSIGN"...
         JMP         SP15            < ET ON ITERE...
SP14:    EQU         $
         LAI         XX4             < ET ON REINITIALISE L'INDEX...
SP13:    EQU         $
         LR          A,X             < (X)=INDEX DU BUFFER.
         STZ         SIGNE           < "+" A PRIORI...
         STZ         CUMUL
         PSR         Y
         LYI         XX2             < Y=NOMBRE DE CHIFFRES A DECODER,
         XR          X,Y
SP11:    EQU         $
         XR          X,Y
         BSR         ASP2            < ACCES A UN CHIFFRE ET CUMUL...
         XR          X,Y
         JDX         SP11            < AU SUIVANT...
         XR          X,Y
         PLR         Y
         LA          CUMUL
         CPZ         SIGNE           < ALORS POSITIF OU NEGATIF ???
         JE          SP12            < POSITIF...
         NGR         A,A             < NEGATIF...
SP12:    EQU         $
         FLT                         < CONVERSION FLOTTANTE,
         STX         INDEX           < ET MEMORISATION DE L'INDEX...
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
SP2:     EQU         $
         LBY         &ACBUF          < A=UN CARACTERE,
         RBT         8               < EFFACEMENT DE LA PARITE...
         ADRI        1,X             < ET PASSAGE AU SUIVANT...
         CPI         " "             < EST-CE LE 'SPACE' ???
         JNE         SP22            < NON...
         LAI         "0"             < OUI, IL VAUT "0"...
SP22:    EQU         $
         CPI         "0"             < EST-CE UN CHIFFRE ???
         JL          SP21            < NON...
         CPI         "9"             < EST-UNE CHIFFRE ???
         JG          SP21            < NON...
<
< CAS DES CHIFFRES :
<
         ADRI        -"0",A          < TRANSLATION,
         STA         WORK
         LA          CUMUL
         MP          C10
         LR          B,A
         AD          WORK
         STA         CUMUL           < ET CUMUL...
SP23:    EQU         $
         RSR
<
< CAS DES AUTRES CARACTERES :
<
SP21:    EQU         $
         STZ         SIGNE           < "+" A PRIORI...
         CPI         "+"
         JE          SP23            < CAS DE "+" : SIGNE=0.
         IC          SIGNE           < "-" A PRIORI...
         CPI         "-"
         JE          SP23            < CAS DE "-" : SIGNE=1.
         QUIT        1               < ???!?!?!
         JMP         SP23
:F
:F
< <<'SIOC CARTE XY 7'
DF'SIOC CARTE XY 8'
ED'SIOC CARTE XY 8'
IN0
         PAGE
         IDP         "SIOC CARTE XY 8"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   8  :
<                    ( L I S T E   ( X , Y , N ) )
<
<
<        FORMAT :
<                      ON TROUVE UN PAQUET DE CARTE CONTENANT
<                    UN NOMBRE VARIABLE DE TRIPLETS (X(I),Y(I),N(I))
<                    X(I) ET Y(I) ETANT DES COORDONNEES DANS LE
<                    SEGMENT (0,255), ET N(I) UN NIVEAU DE GRIS.
<                      X(I) ET Y(I) SONT CODES SUR XX2 CHIFFRES,
<                    N(I) SUR XX3 CHIFFRES, ET IL Y A XX4 TRIPLETS
<                    PAR CARTE.
<
<
<        BLOCAGE DES ENREGISTREMENTS :
<                      ON BLOQUE 'XX6' CARTE PAR ENRE-
<                    GISTREMENT SUR LA BANDE MAGNETIQUE,
<                    CE QUI FAIT 'NOCT' OCTETS INFERIEUR
<                    OU EGAL A LCBUF*XX6...
<
<        FONCTION :
<                      TRACE LE NUAGE DE POINTS DEFINI
<                    PAR LES TRIPLETS (X,Y,N) ; LA COORDONNEE
<                    X=-999 INDIQUE LA FIN D'UNE IMAGE,
<                    ET LES NIVEAUX SUPERIEURS A 7
<                    IGNORES...
<
<
<        ASSIGNATIONS :
<                    !ASSIGN A=DKU,
<                    !ASSIGN B=MT1.
<
<
<        ARGUMENTS :
A0::     VAL         0               < INDICATEUR DE PREMIERE FOIS :
                                     < =0 : PREMIERE FOIS,
                                     < #0 : FOIS SUIVANTES.
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         IMAGE           < BUFFER DES CARTE,
NOCT::   VAL         1000            < 1000 OCTETS PAR ENREGISTREMENT.
KCAR:    WORD        0               < POUR DETECTER LA DERNIERE CARTE INCOM-
                                     < PLETE...
KCARTE:  WORD        0               < DECOMPTEUR DE DEBLOCAGE DES CARTE
                                     < DANS LE BUFFER BANDE MAGNETIQUE.
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
ACBUF0:  WORD        CBUF,X          < ET POUR LE REINITIALISER...
XX2::    VAL         4               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         2               < NOMBRE DE CHIFFRES DEFINISSANT LE NIVEAU.
XX4::    VAL         8               < NOMBRE DE TRIPLETS PAR CARTE.
XX5::    VAL         XX2+XX2+XX3*XX4 < NOMBRE DE CARACTERES PAR CARTE.
         IF          LCBUF-XX5,,XWOR%,XWOR%
         IF          'XX5' EST MAUVAIS !!!
XWOR%:   VAL         0
XX6::    VAL         13              < FACTEUR DE BLOCAGE DES CARTE DANS LE
                                     < BUFFER DE LA BANDE MAGNETIQUE...
DEMCR:   BYTE        '0B;'00         < LECTURE DES ENREGISTREMENTS.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF*XX6
         WORD        0
C10:     WORD        BASE10          < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
SXX5:    WORD        XX5             < SAUVEGARDE DU REGISTRE 'X' D'UNE FOIS
                                     < A L'AUTRE...
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
FIN:     WORD        -999            < ABSCISSE DE FIN D'IMAGE...
SIGNE:   WORD        0               < 0 : SIGNE "+",
                                     < 1 : SIGNE "-".
<
< DONNEES DE PASSAGE DES ARGUMENTS
< DE DEBLOCAGE D'UNE FOIS A L'AUTRE :
<
NVPDK::  VAL         '0C             < ACCES A LA ZONE SCRATCH,
LBUFDK:: VAL         128             < LONGUEUR DE LA ZONE DE SAUVEGARDE,
SECTDK:: VAL         0               < NUMERO DU SECTEUR DE SAUVEGARDE.
DEMWDK:  BYTE        NVPDK;'02       < SAUVEGARDE DES DONNEES.
         WORD        FLOC-ZERO*NOCMO
         WORD        LBUFDK*NOCMO
         WORD        SECTDK
DEMRDK:  BYTE        NVPDK;'00       < RESTAURATION DES DONNEES.
         WORD        FLOC-ZERO*NOCMO
         WORD        LBUFDK*NOCMO
         WORD        SECTDK
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
<
< NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0...
<
         LXI         A0
         BSR         ASPCT
         FCAZ                        < EST-CE LA PREMIERE FOIS ???
         JE          SPU40           < OUI, RIEN A RESTAURER...
         LAD         DEMRDK          < NON,
         SVC         0               < ON RESTAURE LES DONNEES DE DEBLOCAGE...
SPU40:   EQU         $
         LX          SXX5            < X=INDEX COURANT DES CARTE...
<
< BOUCLE DE RECUPERATION D'UN TRIPLET :
<
SPU10:   EQU         $
         LYI         0               < MODE "LECTURE X OU Y"...
         BSR         ASP1
         STA         XS              < RECUPERATION DE X(I),
         BSR         ASP1
         STA         YS              < RECUPERATION DE Y(I),
         LYI         1               < MODE "LECTURE P"...
         BSR         ASP1
<
< RECUPERATION DU NIVEAU :
<
         LR          A,B             < A=B=NIVEAU,
<
< TEST DE FIN D'IMAGE :
<
         LA          XS              < ABSCISSE :
         CP          FIN             < FIN ???
         JE          SPU30           < OUI, FINI...
         LR          B,A             < A=NIVEAU :
         CPI         NIVMAX          < FAUT-IL L'IGNORER ???
         JG          SPU10           < OUI...
<
< NON, TRACE DU POINT :
<
         BSR         ASPRPS          < TRACE DE (XS,YS) AVEC LE NIVEAU (A).
         JMP         SPU10           < AU TRIPLET SUIVANT...
<
< OUI, FIN DE L'IMAGE COURANTE...
<
SPU30:   EQU         $
         STX         SXX5            < SAUVEGARDE DE L'INDEX CARTE...
         LAD         DEMWDK
         SVC         0               < SAUVEGARDE DES DONNEES DE DEBLOCAGE...
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
SPU1:    EQU         $
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         STZ         SIGNE           < "+" A PIORI,
         CPZR        Y               < COORDONNEE OU NIVEAU ???
         JNE         SP13            < NIVEAU, PAS DE SIGNE...
         BSR         ASP2            < COORDONNE : ENTREE DU SIGNE...
SP13:    EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         CPZR        Y               < QUEL EST LE MODE ???
         JNE         SP11            < MODE "LECTURE P"...
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU TROISIEME CARACTERE.
         AD          FWORK
         CPZ         SIGNE           < POSITIF OU NEGATIF ???
         JE          SP12            < POSITIF...
         NGR         A,A             < NEGATIF...
SP12:    EQU         $
SP11:    EQU         $
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
SP2:     EQU         $
         DC          KCAR
         JGE         SP22
         LRM         A               < CAS DE LA DERNIERE CARTE INCOMPLETE :
         WORD        NOCT-1
         STA         KCAR
         JMP         SP25
SP22:    EQU         $
         LR          X,A
         CPI         XX5             < FAUT-IL LIRE UNE CARTE ???
         JL          SP24            < NON...
SP25:    EQU         $
         LA          ACBUF
         ADRI        LCBUF/NOCMO,A
         STA         ACBUF           < PROGRESSION DU BUFFER CARTE DANS LE
                                     < BUFFER BANDE MAGNETIQUE...
         DC          KCARTE          < ALORS, FAUT-IL LIRE UN NOUVEL
                                     < ENREGISTREMENT ???
         JGE         SP28            < NON...
         LAI         XX6-1           < OUI, (-1 A CAUSE DU 'DC' QUI MANQUE)
         STA         KCARTE          < REINITIALISATION DU FACTEUR DE DEBLOCAGE,
         LA          ACBUF0
         STA         ACBUF           < ET DU RELAI DU BUFFER CARTE...
SP27:    EQU         $
         LAD         DEMCR           < OUI :
         SVC         0               < LECTURE D'UNE CARTE...
         JE          SP28            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SP27            < ET ON RETENTE...
SP28:    EQU         $
         LXI         0               < REINITIALISATION DE L'INDEX CARACTERE.
SP24:    EQU         $
         LBY         &ACBUF
BITPAR:: VAL         8
         RBT         BITPAR          < ELIMINATION PARITE...
         CPI         " "             < ESPACE OU "+" ???
         JE          SP21            < OUI...
         CPI         "+"
         JE          SP21
         CPI         "-"             < "-" ???
         JNE         SP29            < NON, DONC CHIFFRE...
         IC          SIGNE           < CAS DU SIGNE "-"...
         JMP         SP21
SP29:    EQU         $
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ANDI        '0F             < DECODAGE 'ASCI' OU 'EBCDIC', EN TENANT
                                     < COMPTE DE L'EQUIVALENCE ENTRE "SPACE"
                                     < ET LE CHIFFRE "0".
         CPI         BASE10
         JL          SP23
         QUIT        1
SP23:    EQU         $
         RSR
SP21:    EQU         $
         LAI         0               < ON RENVOIE LE NUL...
         JMP         SP29            < VERS L'INCREMENTATION DE L'INDEX...
:F
:F
< <<'SIOC CARTE XY 8'
DF'SIOC CARTE Y 1'
ED'SIOC CARTE Y 1'
IN0
         PAGE
         IDP         "SIOC CARTE Y 1"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   Y   1  :
<                    ( L I S T E   ( Y ) )
<
<
<        FONCTION :
<                      CE MODULE PERMET EN PARTICULIER
<                    DE FAIRE LES VASES COMMUNICANTS...
<
<
<        FORMAT :
<                      ON TROUVE SUR CHAQUE CARTE UNE LISTE DE
<                    'XX1' COORDONEES Y CODEES SUR 'XX2' CHIFFRES.
<
<
<        ARGUMENT :
<                    A0000=FACTEUR DE COMPRESSION VERTICAL (ENVIRON 8...).
A0::     VAL         0
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    EQU         BUFIN           < BUFFER DES CARTE,
         IF          STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR%
         IF          ATTENTION : ERREUR DE RECOUVREMENT !!!
XWOR%:   VAL         0
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0B;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         6               < LONGUEUR DES LISTES DE COORDONNEES,
XX2::    VAL         5               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         2               < COULEUR CHOISIE POUR LA REPRESENTATION
                                     < DES NIVEAUX HORIZONTAUX.
XX5::    VAL         1               < COULEUR DE REMPLISSAGE.
XX6::    VAL         4               < COULEUR DES BORDS.
XX7::    VAL         6               < COULEUR DU FOND (PERMET D'AIDER A LA
                                     < DETECTION DES CONTOURS...).
XX4::    VAL         4               < INDEX DU PREMIER OCTET DU PREMIER
                                     < NOMBRE...
C10:     WORD        10              < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
SIGNE:   WORD        0               < 0 : SIGNE "+",
                                     < 1 : SIGNE "-".
CUMUL:   WORD        0               < CUMUL DES NOMBRES DECIMAUX.
WORK:    WORD        0               < ZONE DE TRAVAIL.
COMPRE:  WORD        0               < CONSTANTE DE PROPORTION...
MILIEU:  WORD        NLIG/2          < MILIEU DE L'ECRAN.
MAXXS:   WORD        -1              < MAXIMUM DE 'XS' LORS DU BALAYAGE D'UNE
                                     < COLONNE.
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         LA          YR
         OR          XR
         JANE        SPU1            < AUTRES FOIS...
<
< CAS DE LA PREMIERE FOIS :
<
         LYI         0               < INDEX DES NOMBRE DECIMAUX.
SPU2:    EQU         $
SPU4:    EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE DE LA CARTE :
         JE          SPU3            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SPU4
SPU3:    EQU         $
         LXI         A0
         BSR         ASPCT
         FIX
         STA         COMPRE          < CONSTANTE DE PROPORTION...
         STZ         XS              < ON COMMENCE A GAUCHE...
         LXI         XX4             < INDEX DES CARACTERES CARTE...
SPU5:    EQU         $
         STZ         MAXXS
         DC          MAXXS           < REINITIALISATION DE 'MAXXS'...
         BSR         ASP1            < RECUPERATION DE YS.
<
< RECHERCHE D'UN BORD GAUCHE :
<
SPU8:    EQU         $
         BSR         ASPGPS          < ACCES AU POINT (XS,YS) :
         IC          XS              < ET PASSAGE AU SUIVANT...
         JAE         SPU8            < ON BOUCLE TANT QUE C'EST NOIR...
SPU70:   EQU         $
         BSR         ASPGPS          < ACCES AU POINT (XS,YS) :
         IC          XS              < ET PASSAGE AU SUIVANT...
         CPI         XX7             < EST-ON SUR LE FOND ???
         JE          SPU70           < OUI, ON BOUCLE JUSQU'A TROUVER LE BORD
                                     < GAUCHE SUIVANT...
         CPI         XX6             < NON, CE DOIT ETRE UN BORD...
         JE          SPU71           < OUI...
         QUIT        1               < ??!??!?!
SPU71:   EQU         $
<
< BALAYAGE DES COLONNES JUSQU'AU BORD DROIT :
<
SPU6:    EQU         $
         BSR         ASPGPS          < TEST DU POINT (XS,YS) :
         IC          XS
         JANE        SPU7            < ON S'ARRETE AU PREMIER NON NOIR,
         DC          XS              < RETOUR SUR LE POINT NOIR...
         LAI         XX3
         BSR         ASPRPS          < PAR CONTRE, ON COLORIE LES POINTS NOIRS.
         LA          YS
         PSR         A
<
< COLORIAGE D'UNE COLONNE :
<
SPU20:   EQU         $
         IC          YS
         BSR         ASPGPS          < ON VA REMPLIR LES POINTS EN-DESSOUS DU
                                     < BORD SUPERIEUR...
         CPI         XX6             < EST-ON AU BORD (MAIS EN BAS) ???
         JE          SPU30           < C'EST FINI...
         JANE        SPU20           < DEJA REMPLI, DESCENDONS EN COLONNE...
         LAI         XX5
         BSR         ASPRPS          < COLORIAGE DES POINTS PAR COLONNE EN 'XS'.
<
< COLORIAGE D'UNE LIGNE EN UN POINT
< DE LA COLONNE COURANTE :
<
         LA          XS
         PSR         A               < SAVE 'XS'...
SPU40:   EQU         $
         DC          XS              < ON VA VERS LE BORD GAUCHE :
         BSR         ASPGPS
         CPI         XX6             < EST-ON AU BORD ???
         JE          SPU41           < (XS,YS) EST SUR LE BORD GAUCHE...
         LAI         XX5             < NON, IL EST NOIR,
         BSR         ASPRPS          < ON LE COLORIE...
         JMP         SPU40           < AU SUIVANT...
SPU41:   EQU         $
         PLR         A
         STA         XS              < RETOUR A LA COLONNE SUIVANTE...
         PSR         A
SPU42:   EQU         $
         IC          XS              < ON VA VERS LE BORD DROIT...
         BSR         ASPGPS
         CPI         XX6             < EST-ON AU BORD ???
         JE          SPU43           < (XS,YS) EST SUR LE BORD DROIT...
         LAI         XX5             < NON, IL EST NOIR,
         BSR         ASPRPS          < ON LE COLORIE...
         JMP         SPU42           < AU SUIVANT...
SPU43:   EQU         $
         LA          XS
         CP          MAXXS
         JL          SPU60
         STA         MAXXS           < RECHERCHE DE MAX(XS).
SPU60:   EQU         $
         PLR         A
         STA         XS              < RETOUR A LA COLONNE COURANTE...
         JMP         SPU20           < A LA COLONNE SUIVANTE...
SPU30:   EQU         $
         PLR         A
         STA         YS
         IC          XS
         JMP         SPU6            < AU POINT SUIVANT...
SPU7:    EQU         $
         LA          MAXXS
         ADRI        1,A
         STA         XS              < ON REPART SUR LE MAX(XS)+1, AFIN DE NE
                                     < PAS AVOIR DE PROBLEME DE BALAYAGE...
SPU61:   EQU         $
         BSR         ASPGPS
         IC          XS
         CPI         XX6             < EST-CE UN BORD ???
         JE          SPU61           < ELIMINATION DES POINTS DOUBLES (EN
                                     < EPAISSEUR) DU CONTOUR...
         DC          XS
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < ENCORE ???
         JL          SPU5            < ET OUI...
SPU16:   EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
<
< CAS DES AUTRES FOIS :
<
SPU1:    EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         STZ         SIGNE           < "+" A PRIORI...
         STZ         CUMUL
         PSR         Y
         LYI         XX2             < Y=NOMBRE DE CHIFFRES A DECODER,
         XR          X,Y
SP11:    EQU         $
         XR          X,Y
         BSR         ASP2            < ACCES A UN CHIFFRE ET CUMUL...
         XR          X,Y
         JDX         SP11            < AU SUIVANT...
         XR          X,Y
         PLR         Y
         LA          CUMUL
         CPZ         SIGNE           < ALORS POSITIF OU NEGATIF ???
         JE          SP12            < POSITIF...
         NGR         A,A             < NEGATIF...
SP12:    EQU         $
         SARD        NBITMO
         DV          COMPRE          < COMPRESSION,
         AD          MILIEU          < TRANSLATION,
         AD          ALIGM1
         NGR         A,A             < INVERSION,
         STA         YS              < CE QUI DONNE 'YS'...
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
SP2:     EQU         $
         LBY         &ACBUF          < A=UN CARACTERE,
         ADRI        1,X             < ET PASSAGE AU SUIVANT...
         CPI         " "             < EST-CE LE 'SPACE' ???
         JNE         SP22            < NON...
         LAI         "0"             < OUI, IL VAUT "0"...
SP22:    EQU         $
         CPI         "0"             < EST-CE UN CHIFFRE ???
         JL          SP21            < NON...
         CPI         "9"             < EST-UNE CHIFFRE ???
         JG          SP21            < NON...
<
< CAS DES CHIFFRES :
<
         ADRI        -"0",A          < TRANSLATION,
         STA         WORK
         LA          CUMUL
         MP          C10
         LR          B,A
         AD          WORK
         STA         CUMUL           < ET CUMUL...
SP23:    EQU         $
         RSR
<
< CAS DES AUTRES CARACTERES :
<
SP21:    EQU         $
         STZ         SIGNE           < "+" A PRIORI...
         CPI         "+"
         JE          SP23            < CAS DE "+" : SIGNE=0.
         IC          SIGNE           < "-" A PRIORI...
         CPI         "-"
         JE          SP23            < CAS DE "-" : SIGNE=1.
         QUIT        1               < ???!?!?!
         JMP         SP23
<
<
<        C O M P O S A N T E   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOC CARTE Y 1'
DF'SIOC CARTE Y 2'
ED'SIOC CARTE Y 2'
IN0
         PAGE
         IDP         "SIOC CARTE Y 2"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   Y   2  :
<                    ( L I S T E   ( Y ) )
<
<
<        FORMAT :
<                      ON TROUVE 'XX1' COORDONNEES 'Y'
<                    CODEES EN ENTIER SUR 'XX2' CHIFFRES,
<                    ET SEPARES PAR 'XX3' 'ESPACE'...
<                    ON PEUT PAR EXEMPLE AINSI TRAITER
<                    LES BANDES D'ADAM...
<
<
<        ARGUMENTS :
A0000::  VAL         0               < FACTEUR D'ECHELLE 'Y',
A0001::  VAL         1               < X MINIMUM,
A0002::  VAL         2               < X MAXIMUM.
A0003::  VAL         3               < TRANSLATION SUR 'Y'.
A0004::  VAL         4               < ON TRACE UNE IMAGE SUR 'A0004'...
<
<
         LOCAL
FLOC:    EQU         $
LCBUF::  VAL         80              < LONGUEUR DES CARTE.
CBUF:    DZS         LCBUF/NOCMO     < BUFFER DES CARTE,
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
DEMCR:   BYTE        '0B;'00         < LECTURE DES CARTE.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF
XX1::    VAL         200             < LONGUEUR DES LISTES DE COORDONNEES,
XX2:     VAL         2               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX3::    VAL         1               < NOMBRE D'ESPACES DERRIERE CHAQUE
                                     < COORDONNEE 'Y'.
C10:     WORD        10              < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
XA0000:  FLOAT       0               < FACTEUR D'ECHELLE SUR 'Y'.
XA0001:  WORD        0               < X MIMIMUM.
XA0002:  FLOAT       0               < FACTEUR D'ECHELLE SUR 'X'.
COORXS:  WORD        0               < COORDONNEE 'X' IMPLICITE COURANTE.
TRANSY:  WORD        0               < TRANSLATION SUR 'Y'.
UNSURN:  WORD        0               < ON TRACE UNE IMAGE SUR 'A0004'.
PREM:    WORD        0               < PREM=0 : PREMIERE IMAGE D'UNE SERIE...
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
         LA          YR
         OR          XR
         JANE        SPU1            < AUTRES FOIS...
<
< CAS DE LA PREMIERE FOIS :
<
         STZ         COORXS          < INITIALISATION DES COORDONNEES 'X'
                                     < IMPLICITES.
         DC          COORXS          < (AFIN DE COMMENCER A 0)
         LXI         A0000
         BSR         ASPCT
         FST         XA0000          < FACTEUR D'ECHELLE SUR 'Y'.
         LXI         A0001
         BSR         ASPCT
         FST         XA0002          < TEMPORAIRE... (X MIN)
         BSR         AROND
         STA         XA0001          < VALEUR DU 'X' MIMIMUM.
         LXI         A0002
         BSR         ASPCT
         FSB         XA0002          < AMPLITUDE SUR 'X',
         FST         XA0002          < TEMPORAIRE...
         LAI         NPOLM1
         ADRI        1,A
         FLT
         FDV         XA0002
         FST         XA0002          < FACTEUR D'ECHELLE SUR 'X'.
         LXI         A0003
         BSR         ASPCT
         BSR         AROND
         STA         TRANSY          < TRANSLATION SUR 'Y'.
         LXI         A0004
         BSR         ASPCT
         BSR         AROND
         STA         UNSURN          < ON TRACE UNE IMAGE SUR 'A0004'...
<
< TRACE D'UNE SERIE D'IMAGE :
<
SPU40:   EQU         $
         LYI         0               < INDEX GENERAL DES COORDONNEES.
SPU12:   EQU         $
         LAD         DEMCR
         SVC         0               < LECTURE D'UNE CARTE 'Y'...
         JE          SPU30           < OK...
         QUIT        1               < MANQUE !ASSIGN ???
         JMP         SPU12           < ON RETENTE...
SPU30:   EQU         $
         LXI         0               < X=INDEX DES CARACTERES DE LA CARTE.
SPU15:   EQU         $
         IC          COORXS          < PROGRESSION DES COORDONNEES IMPLICITES.
         BSR         ASP1            < DECODAGE DECIMAL...
         CPZ         PREM            < EST-CE LA PREMIERE IMAGE ???
         JNE         SPU41           < NON, ON LA SAUTE...
<
< CAS DE LA PREMIERE IMAGE (ON LA TRACE) :
<
         FLT
         FMP         XA0000          < FACTEUR D'ECHELLE SUR 'Y',
         BSR         AROND
         AD          TRANSY          < ON TRANSLATE 'Y'...
         AD          ALIGM1
         NGR         A,A
         STA         YS              < COORDONNEE 'YS' :
         JAL         SPU6            < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPU6            < HORS-ECRAN...
         LA          COORXS          < RECUPERATION DES 'X' IMPLICITES :
         SB          XA0001          < REMISE A L'ORIGINE,
         FLT
         FMP         XA0002          < FACTEUR D'ECHELLE SUR 'X' :
         BSR         AROND
         STA         XS              < COORDONNEE 'XS' :
         JAL         SPU6            < HORS-ECRAN...
         CPI         NPOLM1
         JG          SPU6            < HORS-ECRAN...
         LAI         NIVMAX
         BSR         ASPRPS          < FORCAGE DU POINT (XS,YS).
SPU6:    EQU         $
SPU41:   EQU         $
         ADRI        1,Y
         LR          Y,A
         CPI         XX1             < EST-CE FINI ???
         JE          SPU16           < OUI...
         LR          X,A             < NON,
         CPI         LCBUF/XX2*XX2   < FAUT-IL CHANGER DE CARTE ???
         JL          SPU15           < NON...
         JMP         SPU12           < OUI...
SPU16:   EQU         $
         IC          PREM            < CE N'EST PLUS LA PREMIERE IMAGE...
         DC          UNSURN          < EST-CE FINI ???
         JG          SPU40           < NON, MAIS ON NE TRACE PLUS RIEN...
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
<
< CAS DES AUTRES FOIS :
<
SPU1:    EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         BSR         ASP2            < ACCES AU PREMIER CARACTERE.
         MP          C10
         STB         FWORK
         BSR         ASP2            < ACCES AU DEUXIEME CARACTERE.
         AD          FWORK
         ADRI        XX3,X           < POUR LES 'SPACES'...
SP11:    EQU         $
         RSR
SP2:     EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ADRI        -"0",A          < CONVERSION...
         CPI         " "-"0"
         JNE         SP21
         LAI         0               < " "="0"...
SP21:    EQU         $
         JAL         SP22
         CPI         BASE10
         JL          SP23
SP22:    EQU         $
         QUIT        1
SP23:    EQU         $
         RSR
<
<
<        C O M P O S A N T E   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOC CARTE Y 2'
DF'SIOC CARTE RASTER 2'
ED'SIOC CARTE RASTER 2'
IN0
         PAGE
         IDP         "SIOC CARTE RASTER 2"
<
<
<        E N T R E E   C A R T E S   R A S T E R   2  :
<
<
<        FONCTION :
<                      CE MODULE LIT SUR L'UNITE '0B
<                    DES NIVEAUX DE GRIS, LES STOCKE
<                    DANS LE Z-BUFFER, ET EN FAIT LA
<                    COORDONNEE 'W' :
<                                    U <-- (VARU),
<                                    V <-- (VARV),
<                                    W <-- (Z-BUFFER).
<
<
<        ARGUMENT :
A0::     VAL         0               < TRANSLATION PRELIMINAIRE, ET
A1::     VAL         A0+1            < FACTEUR DE REDUCTION DES NIVEAUX DE GRIS.
A2::     VAL         A1+1            < MODULATION FINALE DE 'W'.
A3::     VAL         A2+1            < TRANSLATION SUR 'U',
A4::     VAL         A3+1            < TRANSLATION SUR 'V',
A5::     VAL         A4+1            < TRANSLATION SUR 'W'.
A6::     VAL         A5+1            < ADRESSE DU PREMIER BLOC SUR LA BANDE ;
                                     < SI CETTE ADRESSE EST FOURNIE NEGATIVE,
                                     < ALORS ON RECUPERE L'ADRESSE COURANTE
                                     < DANS LA 'BOX'...
<
<
<        L O C A L  :
         LOCAL
FLOC:    EQU         $
<
< INDICATEUR DE PREMIER PASSAGE :
<
IPREM:   WORD        -1
<
< DEFINITION ET ACCES AU BUFFER :
<
LCBUF::  VAL         '800            < LONGUEUR EN OCTETS DU BUFFER,
CBUF:    EQU         IMAGE           < IL EST EN RECOUVREMENT AVEC 'IMAGE'...
NVPMT::  VAL         '0B             < 'NVP' D'ACCES A 'MT1'...
DEMADC:  BYTE        NVPMT;'05       < DEMANDE D'ACCES A L'ADRESSE COURANTE
                                     < DANS LA 'BOX'...
DEMMT:   BYTE        NVPMT;'08       < LECTURE EN ACCES DIRECT DE LA BANDE :
         WORD        CBUF-ZERO*2
         WORD        LCBUF
ADMT:    WORD        0               < ADRESSE COURANTE DE BLOC ('A6').
AXBUF:   WORD        CBUF,X          < RELAI D'ACCES AU BUFFER,
XBUF:    WORD        LCBUF           < INDEX COURANT DU BUFFER,
MAXBUF:  WORD        LCBUF           < VALEUR COURANTE DE 'XBUF'.
<
< CONSTANTES :
<
C10:     WORD        10              < CONVERSION DECIMALE.
XA0:     WORD        0               < COEFFICIENT 'A0'.
XA1:     WORD        0               < COEFFICIENT 'A1'.
XFA2:    FLOAT       0               < MODULATION DE 'W'.
XFA3:    FLOAT       0               < TRANSLATION SUR 'U',
XFA4:    FLOAT       0               < TRANSLATION SUR 'V',
XFA5:    FLOAT       0               < TRANSLATION SUR 'W'.
GNIV1:   FLOAT       0               < POUR
GNIV2:   FLOAT       0               <      INTERPOLER
GNIV3:   FLOAT       0               <                 DANS LA
GNIV4:   FLOAT       0               <                         MAILLE DE BASE...
GXS:     FLOAT       0               < COORDONNEES
GYS:     FLOAT       0               <             FLOTTANTES DU POINT (XS,YS).
GINCU:   FLOAT       0               < DISTANCE FLOTTANTE-
GINCV:   FLOAT       0               <                    ENTIERE...
<
< RELAIS :
<
ASP1:    WORD        SP1             < CONVERSION DECIMALE PAR CARACTERE,
ASP2:    WORD        SP2             < ACCES A UN CARACTERE.
ASPIR:   WORD        SPIR            < POUR ACCES AU Z-BUFFER...
         PROG
<
<
<        C O M P O S A N T E   E N   ' U ':
<
<
SPU:     EQU         $
<
< ENTREE DES PARAMETRES :
<
         CPZ         IPREM           < EST-CE NECESSAIRE ???
         JGE         SPU1            < NON...
         IC          IPREM           < OUI...
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         XA0             < TRANSLATION PRELIMINAIRE DES NIVEAUX.
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         XA1             < REDUCTION PRELIMINAIRE DES NIVEAUX.
         LXI         A2
         BSR         ASPCT
         FST         XFA2            < MODULATION D'AMPLITUDE FINALE DE 'W'.
         LXI         A3
         BSR         ASPCT
         FST         XFA3            < TRANSLATION DE 'U'.
         LXI         A4
         BSR         ASPCT
         FST         XFA4            < TRANSLATION DE 'V'.
         LXI         A5
         BSR         ASPCT
         FST         XFA5            < TRANSLATION DE 'W'.
         LXI         A6
         BSR         ASPCT
         BSR         AROND
         STA         ADMT            < ADRESSE COURANTE SUR LA BANDE :
         JAGE        SPU3            < OK, ELLE EST POSITIVE (OU NULLE)...
SPU4:    EQU         $
         LAD         DEMADC          < SI ELLE EST NEGATIVE,
         SVC         0               < ON RECUPERE L'ADRESSE COURANTE SUR LA
                                     < BANDE.
         JE          SPU5            < OK...
         QUIT        1               < "!ASSIGN B=MT1" MANQUE SUREMENT...
         JMP         SPU4            < TRY AGAIN...
SPU5:    EQU         $
         ACTD        3               < RECUPERATION DE 'BOX' :
         STB         ADMT            < CE QUI DONNE L'ADRESSE COURANTE SUR LA
                                     < BANDE...
SPU3:    EQU         $
<
< INITIALISATION DU Z-BUFFER :
<
         LYI         YSTORE          < (Y)=FONCTION DE 'STORE',
         LAI         0               < (A)=(YS,XS)=POINT INITIAL...
SPU2:    EQU         $
         PSR         A               < SAUVEGARDE DE L'ADRESSE COURANTE...
         LBI         0               < INITIALISATION DU CUMUL,
         BSR         ASP1            < DECODAGE DU PREMIER CHIFFRE,
         BSR         ASP1            < DU DEUXIEME,
         BSR         ASP1            < DU TROISIEME,
         BSR         ASP1            < ET ENFIN DU QUATRIEME.
         LA          XA0
         ADR         A,B             < TRANSLATION INITIALE,
         LAI         0
         DV          XA1             < MISE A L'ECHELLE INITIALE.
         LR          A,B             < (B)=VALEUR A RANGER DANS LE Z-BUFFER,
         PLR         A               < A L'ADRESSE (A)...
         BSR         AGZB            < ET ON MEMORISE DANS LE Z-BUFFER...
         ADRI        1,A             < PUIS PASSAGE AU (YS,XS) SUIVANT...
         JANE        SPU2            < S'IL EXISTE...
SPU1:    EQU         $
<
< COMPOSANTE :
<
         FLD         VARU            < ON RENVOIE 'VARU',
         FAD         XFA3            < TRANSLATE...
         RSR
<
<
<        C O M P O S A N T E   E N  ' V '  :
<
<
SPV:     EQU         $
<
< COMPOSANTE :
<
         FLD         VARV            < ON RENVOIE 'VARV',
         FAD         XFA4            < TRANSLATE...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
<
< CALCUL DU POINT COURANT, ET POSITION
< DE CE POINT DANS UN CARRE A
< COORDONNEES ENTIERES :
<
         FLD         VARU
         FDV         KFU
         FDV         KUZ
         FST         FWORK
         LA          TRX
         FLT
         FAD         FWORK
         FST         GXS             < COORDONNEE 'XS' DU POINT COURANT,
         FIX
         STA         XS              < COORDONNEE 'X' DU PREMIER SOMMET,
         FLT
         FSB         GXS
         FNEG
         FST         GINCU           < POSITION SUR L'AXE DES 'X',
         FLD         VARV
         FDV         KFV
         FDV         KVZ
         FST         FWORK
         LA          TRY
         FLT
         FAD         FWORK
         FST         GYS             < COORDONNEE 'YS' DU POINT COURANT.
         FIX
         STA         YS              < COORDONNEE 'Y' DU PREMIER SOMMET,
         FLT
         FSB         GYS
         FNEG
         FST         GINCV           < POSITION SUR L'AXE DES 'Y'.
<
< CALCUL DES NIVEAUX DES 4 SOMMETS :
<
         BSR         ASPIR
         FST         GNIV1           < NIVEAU(XS,YS).
         IC          XS
         BSR         ASPIR
         FST         GNIV2           < NIVEAU(XS+1,YS).
         IC          YS
         BSR         ASPIR
         FST         GNIV3           < NIVEAU(XS+1,YS+1).
         DC          XS
         BSR         ASPIR
         FST         GNIV4           < NIVEAU(XS,YS+1).
         DC          YS              < RETOUR AU POINT DE DEPART...
<
< CALCUL DU NIVEAU INTERPOLE
< DANS LE CARRE "ENTIER" :
<
         FLD         F1
         FSB         GINCU
         FST         FWORK1          < W1=1-FU,
         FLD         F1
         FSB         GINCV
         FST         FWORK2          < W2=1-FV,
         FMP         FWORK1
         FMP         GNIV1
         FST         FWORK           < (1-FU)*(1-FV)*N1,
         FLD         GINCU
         FMP         FWORK2
         FMP         GNIV2
         BSR         APWORK          < +FU*(1-FV)*N2,
         FLD         GINCU
         FMP         GINCV
         FMP         GNIV3
         BSR         APWORK          < +FU*FV*N3,
         FLD         FWORK1
         FMP         GINCV
         FMP         GNIV4
         BSR         APWORK          < +(1-FU)*FV*N4,
<
< MODULATION FINALE :
<
         FMP         XFA2
         FAD         XFA5
         RSR
<
<
<        A C C E S   A U   C A R A C T E R E   C O U R A N T  :
<
<
SP2:     EQU         $
         PSR         B,X
SP24:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER,
         CP          MAXBUF          < EST-ON AU BOUT DU BUFFER (EN PARTICULIER
                                     < CAS DE LA PREMIERE LECTURE...) ???
         JL          SP21            < NON...
         STZ         XBUF            < OUI, ON SE RAMENE EN TETE DU BUFFER...
SP23:    EQU         $
         LAD         DEMMT
         SVC         0               < ON LIT LE BLOC COURANT...
         JE          SP22            < OK...
         LR          X,A
         CPI         '45             < EST-CE UN 'TAPE-MARK' ???
         JNE         SP29            < NON, AUTRE ERREUR...
         LAD         DEMMT           < OUI, ON TENTE DE RELIRE...
         SVC         0               < LECTURE DU BLOC COURANT...
         JE          SP22            < OK, ON A SAUTE LE 'TAPE-MARK'...
SP29:    EQU         $
         QUIT        1               < ERREUR D'ASSIGNATION PROBABLEMENT...
         JMP         SP23
SP22:    EQU         $
         IC          ADMT            < ET PASSAGE AU BLOC SUIVANT...
         ACTD        3               < RECUPERATION DE LA 'BOX'...
         LR          B,A             < (A)=BOX...
         CP          MAXBUF          < ET VALIDATION...
         JLE         SP28            < OK...
         QUIT        1               < !?!???!?!
SP28:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER...
SP21:    EQU         $
         IC          XBUF            < ET PASSAGE AU CARACTERE SUIVANT...
         LR          A,X
         LBY         &AXBUF          < (A)=CARACTERE COURANT DU BUFFER :
         CPI         " "             < ET TEST...
         JL          SP24            < ON IGNORE TOUS LES CONTROLES...
         JG          SP25            < OK, CHIFFRE (PEUT-ETRE...).
         LAI         "0"             < LE BLANC EST TRANSFORME EN "0"...
SP25:    EQU         $
         CPI         "0"             < ET VALIDATION...
         JL          SP26            < ERREUR...
         CPI         "9"             < VALIDATION...
         JG          SP26            < ERREUR...
         ADRI        -"0",A          < DECODAGE BINAIRE...
SP27:    EQU         $
         PLR         B,X
         RSR                         < ET SORTIE...
SP26:    EQU         $
         QUIT        1               < ?!????!??!
         LAI         0               < ET ON FORCE 0...
         JMP         SP27            < ET ON SORT...
<
<
<        C O N V E R S I O N   B I N A I R E  :
<
<
SP1:     EQU         $
         LR          B,A             < (A)=CUMUL COURANT,
         MP          C10             < QUE L'ON MULTIPLIE PAR 10...
         BSR         ASP2            < ACCES AU CARACTERE COURANT...
         ADR         A,B             < ET CUMUL...
         RSR
<
<
<        I N T E R P O L A T I O N   D A N S   L A   M A I L L E  :
<
<
<        ARGUMENTS :
<                    (XS,YS)=POINT COURANT.
<
<
<        RESULTAT :
<                    (A,B)=VALEUR CONTENUE EN (YS,XS) DU Z-BUFFER.
<
<
SPIR:    EQU         $
         LA          YS
         SWBR        A,A
         OR          XS
         LYI         YLOAD
         BSR         AGZB            < RECUPERATION DE LA VALEUR CONTENUE EN
                                     < (YS,XS) DU Z-BUFFER,
         LR          B,A
         FLT                         < ET FLOTTAGE...
         RSR
:F
:F
< <<'SIOC CARTE RASTER 2'
DF'SIOC CARTE RASTER 3'
ED'SIOC CARTE RASTER 3'
IN0
         PAGE
         IDP         "SIOC CARTE RASTER 3"
<
<
<        E N T R E E   C A R T E S   R A S T E R   3  :
<
<
<        FONCTION :
<                      CE MODULE LIT SUR L'UNITE
<                    '0B DES NIVEAUX DE GRIS, ET
<                    LES AFFICHE SEQUENTIELLEMENT
<                    SUR L'ECRAN...
<                      LA VERSION 'RASTER 3' EST
<                    SIMPLIFIEE PAR RAPPORT A LA
<                    VERSION 'RASTER 1', CAR EN
<                    EFFET CHAQUE POINT EST CODE
<                    PAR UN SEUL CARACTERE DONNANT
<                    DIRECTEMENT SON NIVEAU DE GRIS...
<
<
<        ARGUMENT :
A2::     VAL         2               < ADRESSE DU PREMIER BLOC SUR LA BANDE ;
                                     < SI CETTE ADRESSE EST FOURNIE NEGATIVE,
                                     < ALORS, ON RECUPERE L'ADRESSE COURANTE
                                     < DANS LA 'BOX'...
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
<
< INDICATEUR DE PREMIER PASSAGE :
<
IPREM:   WORD        -1
<
< DEFINITION ET ACCES AU BUFFER :
<
LCBUF::  VAL         NMOTL*NBITMO    < LONGUEUR EN OCTETS DU BUFFER,
CBUF:    EQU         IMAGE           < IL EST EN RECOUVREMENT AVEC 'IMAGE'...
NVPMT::  VAL         '0B             < 'NVP' D'ACCES A LA BANDE MAGNETIQUE...
DEMADC:  BYTE        NVPMT;'05       < MISE DE L'ADRESSE COURANTE DANS LA 'BOX'.
DEMMT:   BYTE        NVPMT;'08       < LECTURE EN ACCES DIRECT DE LA BANDE :
         WORD        CBUF-ZERO*2
         WORD        LCBUF
ADMT:    WORD        0               < ADRESSE COURANTE DE BLOC ('A2').
AXBUF:   WORD        CBUF,X          < RELAI D'ACCES AU BUFFER,
XBUF:    WORD        LCBUF           < INDEX COURANT DU BUFFER,
MAXBUF:  WORD        LCBUF           < VALEUR COURANTE DE 'XBUF'.
<
< CONSTANTES :
<
C10:     WORD        10              < CONVERSION DECIMALE.
FINITE:  FLOAT       1000000
<
< RELAIS :
<
ASP1:    WORD        SP1             < CONVERSION DECIMALE PAR CARACTERE,
ASP2:    WORD        SP2             < ACCES A UN CARACTERE.
         PROG
<
<
<        C O M P O S A N T E   E N   ' U ':
<
<
SPU:     EQU         $
<
< ENTREE DES PARAMETRES :
<
         CPZ         IPREM           < EST-CE NECESSAIRE ???
         JGE         SPU1            < NON...
         IC          IPREM           < OUI...
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         STA         ADMT            < ADRESSE COURANTE SUR LA BANDE :
         JAGE        SPU3            < OK, ELLE EST POSITIVE OU NULLE...
SPU4:    EQU         $
         LAD         DEMADC          < SI ELLE EST NEGATIVE,
         SVC         0               < ON RECUPERE L'ADRESSE COURANTE SUR LE
                                     < BANDE.
         JE          SPU5            < OK...
         QUIT        1               < "!ASSIGN B=MT1" MANQUE SUREMENT...
         JMP         SPU4            < TRY AGAIN...
SPU5:    EQU         $
         ACTD        3               < RECUPERATION DE 'BOX' :
         STB         ADMT            < CE QUI DONNE L'ADRESSE COURANTE SUR LA
                                     < BANDE...
SPU3:    EQU         $
SPU1:    EQU         $
<
< COMPOSANTE :
<
         FLD         FINITE          < POUR FORCER UN OVERSCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N  ' V '  :
<
<
SPV:     EQU         $
<
< COMPOSANTE :
<
         FLD         FINITE          < POUR FORCER UN OVERS-SCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
<
< ACCES AU NIVEAU DE GRIS COURANT :
<
         LBI         0               < INITIALISATION DU CUMUL,
         BSR         ASP1            < DECODAGE D'UN SEUL CHIFFRE...
         LR          B,A             < (A)=NIVEAU DE GRIS COURANT,
<
< MARQUAGE DU POINT COURANT :
<
         LX          XR
         STX         XS
         LY          YR
         STY         YS
         BSR         ASPRPS          < MARQUAGE DU POINT (XS,YS)=(XR,YR)
                                     < AVEC LE NIVEAU (A)...
<
< COMPOSANTE :
<
         FLD         F0
         RSR
<
<
<        A C C E S   A U   C A R A C T E R E   C O U R A N T  :
<
<
SP2:     EQU         $
         PSR         B,X
SP24:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER,
         CP          MAXBUF          < EST-ON AU BOUT DU BUFFER (EN PARTICULIER
                                     < CAS DE LA PREMIERE LECTURE...) ???
         JL          SP21            < NON...
         STZ         XBUF            < OUI, ON SE RAMENE EN TETE DU BUFFER...
SP23:    EQU         $
         LAD         DEMMT
         SVC         0               < ON LIT LE BLOC COURANT...
         JE          SP22            < OK...
         LR          X,A
         CPI         '45             < EST-CE UN 'TAPE-MARK' ???
         JNE         SP29            < NON, AUTRE ERREUR...
         LAD         DEMMT           < OUI, ON TENTE DE RELIRE...
         SVC         0               < LECTURE DU BLOC COURANT...
         JE          SP22            < OK, ON A SAUTE LE 'TAPE-MARK'...
SP29:    EQU         $
         QUIT        1               < ERREUR D'ASSIGNATION PROBABLEMENT...
         JMP         SP23
SP22:    EQU         $
         IC          ADMT            < PASSAGE AU BLOC SUIVANT...
         ACTD        3               < RECUPERATION DE LA 'BOX'...
         LR          B,A             < (A)=BOX...
         CP          MAXBUF          < ET VALIDATION...
         JLE         SP28            < OK...
         QUIT        1               < !?!???!?!
SP28:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER...
SP21:    EQU         $
         IC          XBUF            < ET PASSAGE AU CARACTERE SUIVANT...
         LR          A,X
         LBY         &AXBUF          < (A)=CARACTERE COURANT DU BUFFER :
MASKCA:: VAL         '000F           < MASQUE DE CONVERSION --> BINAIRE...
         ANDI        MASKCA          < ON NE FAIT AUCUNE VERIFICATION SUR LA
                                     < CARACTERE COURANT...
         PLR         B,X
         RSR                         < ET SORTIE...
<
<
<        C O N V E R S I O N   B I N A I R E  :
<
<
SP1:     EQU         $
         LR          B,A             < (A)=CUMUL COURANT,
         MP          C10             < QUE L'ON MULTIPLIE PAR 10...
         BSR         ASP2            < ACCES AU CARACTERE COURANT...
         ADR         A,B             < ET CUMUL...
         RSR
:F
:F
< <<'SIOC CARTE RASTER 3'
DF'SIOC CARTE XY 9'
ED'SIOC CARTE XY 9'
IN0
         PAGE
         IDP         "SIOC CARTE XY 9"
<
<
<        E N T R E E   A   P A R T I R   D E   C A R T E S   X Y   9  :
<                    ( L I S T E   ( X , Y ) )
<
<
<        FORMAT :
<                      ON TROUVE UN PAQUET DE CARTES CONTENANT
<                    UN NOMBRE VARIABLE DE DOUBLETS (X(I),Y(I))
<                    X(I) ET Y(I) ETANT DES COORDONNEES DANS LE
<                    SEGMENT (0,255); ON CONSIDERE QUE LA LISTE
<                    S'ARRETE SUR LE POINT (0,0)...
<                      X(I) ET Y(I) SONT CODES SUR 'XX2' CHIFFRES,
<                    ET IL Y A 'XX4' DOUBLETS PAR CARTE.
<
<
<        BLOCAGE DES ENREGISTREMENTS :
<                      ON BLOQUE 'XX6' CARTE PAR ENRE-
<                    GISTREMENT SUR LA BANDE MAGNETIQUE.
<
<
<        FONCTION :
<                      TRACE LE MAILLAGE DONNE PAR UNE
<                    SUITE DE DOUBLETS DEFINISSANT UNE
<                    SUITE DE CHAINES DE SEGMENTS.
<
<
<        ASSIGNATIONS :
<                    !ASSIGN A=DKU,
<                    !ASSIGN B=MT1.
<
<
<        ARGUMENTS :
<                    A0000=CONSTANTE DE TRANSLATION DES COORDONEES X,
<                    A0001=CONSTANTE DE TRANSLATION DES COORDONNEES Y,
<                    A0002=COULEUR DU POINT A TRACER ; SI CELLE-CI
<                          EST NEGATIVE, ON CLIGNOTE...
<                    A0003=ADRESSE DU PREMIER BLOC A LIRE SUR LA
<                          BANDE MAGNETIQUE ; SI CELUI-CI EST
<                          NEGATIF, ON PREND LA POSITION COU-
<                          RANTE...
<                    A0004=TEMPORISATION INTER-POINT...
A0::     VAL         0               < TRANSLATION EN 'X',
A1::     VAL         A0+1            < TRANSLATION EN 'Y'.
A2::     VAL         A1+1            < COULEUR DU TRACE.
A3::     VAL         A2+1            < ADRESSE DU PREMIER BLOC SUR BANDE.
A4::     VAL         A3+1            < TEMPORISATION INTER-POINT...
<
<
         LOCAL
FLOC:    EQU         $
<
< INDICATEUR DE PREMIER PASSAGE :
<
IPREM:   WORD        -1
<
< DONNEES D'ACCES A LA BANDE :
<
LCBUF::  VAL         8               < LONGUEUR DES CARTE.
CBUF:    EQU         IMAGE           < BUFFER DES CARTE,
KCARTE:  WORD        0               < DECOMPTEUR DE DEBLOCAGE DES CARTE
                                     < DANS LE BUFFER BANDE MAGNETIQUE.
ACBUF:   WORD        CBUF,X          < ET SON RELAI D'ACCES.
ACBUF0:  WORD        CBUF,X          < ET POUR LE REINITIALISER...
XX2::    VAL         4               < NOMBRE DE CHIFFRES DECIMAUX CODANT
                                     < CHACUNE DES COORDONNEES.
XX4::    VAL         1               < NOMBRE DE DOUBLETS PAR CARTE.
XX5::    VAL         XX2+XX2*XX4     < NOMBRE DE CARACTERES PAR CARTE.
         IF          LCBUF-XX5,,XWOR%,XWOR%
         IF          'XX5' EST MAUVAIS !!!
XWOR%:   VAL         0
XX6::    VAL         32              < FACTEUR DE BLOCAGE DES CARTE DANS LE
                                     < BUFFER DE LA BANDE MAGNETIQUE...
NVPMT::  VAL         '0B             < 'NVP' D'ACCES A LA BANDE MAGNETIQUE.
DEMADC:  BYTE        NVPMT;'05       < DEMANDE D'ACCES A L'ADRESSE COURANTE.
DEMCR:   BYTE        NVPMT;'08       < ACCES DIRECT AUX ENREGISTREMENTS.
         WORD        CBUF-ZERO*NOCMO
         WORD        LCBUF*XX6
ADMT:    WORD        0               < ADRESSE COURANTE SUR LA BANDE...
<
< CONSTANTES :
<
XTEMPO:  WORD        0               < TEMPORISATION INTER-POINT...
TRNLXS:  WORD        0               < TRANSLATION DE 'XS',
TRNLYS:  WORD        0               < TRANSLATION DE 'YS'.
NIVOXY:  WORD        0               < NIVEAU DU TRACE ; SI CELUI-CI EST NEGATIF
                                     < ON FAIT UN CLIGNOTEMENT...
C10:     WORD        BASE10          < CONSTANTE DE CONVERSION DECIMALE.
ALIGM1:  WORD        -NLIGM1
<
< RELAIS :
<
ASP1:    WORD        SP1             < SOUS-PROGRAMME DE CONVERSION.
ASP2:    WORD        SP2
ASP3:    WORD        SP3             < TEMPORISATION INTER-POINT.
         PROG
<
<
<        C O M P O S A N T E   ' U '  :
<
<
SPU:     EQU         $
<
< ENTREE DES PARAMETRES :
<
         CPZ         IPREM           < EST-CE NECESSAIRE ???
         JGE         SPU1            < NON...
         IC          IPREM           < OUI...
         LXI         A0
         BSR         ASPCT           < RECUPERATION DE 'A0000',
         BSR         AROND           < ET CONVERSION ENTIERE,
         STA         TRNLXS          < ET SAVE...
         LXI         A1
         BSR         ASPCT           < RECUPERATION DE 'A0001',
         BSR         AROND           < ET CONVERSION ENTIERE,
         STA         TRNLYS          < ET SAVE...
         LXI         A2
         BSR         ASPCT           < RECUPERATION DE 'A0002',
         BSR         AROND           < ET CONVERSION ENTIERE, CE QUI DONNE
                                     < LE NIVEAU DU POINT A TRACER...
         STA         NIVOXY          < ET SAVE...
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         STA         ADMT            < ADRESSE COURANTE SUR LA BANDE :
         JAGE        SPU3            < OK, ELLE EST POSITIVE (OU NULLE)...
SPU4:    EQU         $
         LAD         DEMADC          < SI ELLE EST NEGATIVE,
         SVC         0               < ON RECUPERE L'ADRESSE COURANTE SUR LA
                                     < BANDE.
         JE          SPU5            < OK...
         QUIT        1               < "!ASSIGN B=MT1" MANQUE SUREMENT...
         JMP         SPU4            < TRY AGAIN...
SPU5:    EQU         $
         ACTD        3               < RECUPERATION DE 'BOX' :
         STB         ADMT            < CE QUI DONNE L'ADRESSE COURANTE SUR LA
                                     < BANDE...
SPU3:    EQU         $
         LXI         A4
         BSR         ASPCT
         BSR         AROND
         STA         XTEMPO          < TEMPORISATION INTER-POINT...
<
< INITIALISATIONS :
<
SPU1:    EQU         $
         LXI         XX5             < INDEX COURANT DES CARTE...
<
< BOUCLE DE RECUPERATION D'UN DOUBLET :
<
SPU10:   EQU         $
         BSR         ASP1
         STA         XS              < RECUPERATION DE X(I),
         BSR         ASP1
         STA         YS              < RECUPERATION DE Y(I),
         OR          XS              < POUR TESTER LE POINT (0,0)...
         JAE         SPU30           < FIN DE LISTE...
<
< TRACE DU POINT COURANT :
<
         LA          XS
         AD          TRNLXS
         STA         XS              < TRANSLATION DE 'XS' :
         JAL         SPU11           < HORS-ECRAN...
         CPI         NPOLM1
         JG          SPU11           < HORS-ECRAN...
         LA          YS
         AD          TRNLYS
         STA         YS              < TRANSLATION DE 'YS' :
         JAL         SPU11           < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPU11           < HORS-ECRAN...
         LA          NIVOXY          < (A)=NIVEAU A UTILISER POUR LE TRACE :
         JAL         SPU12           < UN CLIGNOTEMENT EST DEMANDE...
         BSR         ASPRPS          < UN FORCAGE EST DEMANDE...
         BSR         ASP3            < TEMPORISATION INTER-POINT...
         JMP         SPU11           < ET ON SORT...
SPU12:   EQU         $
         NGR         A,B
         BSR         ASPGPS          < SAUVEGARDE DU NIVEAU ANTERIEUR,
         XR          A,B
         BSR         ASPRPS          < ET ON
         BSR         ASP3            < TEMPORISATION...
         XR          A,B
         BSR         ASPRPS          <       CLIGNOTE...
SPU11:   EQU         $
         JMP         SPU10           < VERS LE DOUBLET SUIVANT...
<
< OUI, FIN DE L'IMAGE COURANTE...
<
SPU30:   EQU         $
         STZ         KCARTE          < LA FIN DU BLOC COURANT EST IGNOREE...
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0              < U=0...
         RSR
<
<
<        T E M P O R I S A T I O N   I N T E R - P O I N T  :
<
<
SP3:     EQU         $
         PSR         X
         LX          XTEMPO
         CPZR        X               < ALORS ???
         JLE         SP31            < PAS DE TEMPORISATION...
SP32:    EQU         $
         JDX         SP32            < TEMPORISATION...
SP31:    EQU         $
         PLR         X
         RSR
<
<
<        C O N V E R S I O N   D E C I M A L E  :
<
<
SP1:     EQU         $
         STZ         FWORK           < INITIALISATION DU CUMUL...
         DO          XX2
         BSR         ASP2            < (A)=COORDONNEE COURANTE.
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E   E T   C U M U L  :
<
<
SP2:     EQU         $
         LR          X,A
         CPI         XX5             < FAUT-IL LIRE UNE CARTE ???
         JL          SP24            < NON...
SP25:    EQU         $
         LA          ACBUF
         ADRI        LCBUF/NOCMO,A
         STA         ACBUF           < PROGRESSION DU BUFFER CARTE DANS LE
                                     < BUFFER BANDE MAGNETIQUE...
         DC          KCARTE          < ALORS, FAUT-IL LIRE UN NOUVEL
                                     < ENREGISTREMENT ???
         JGE         SP28            < NON...
         LAI         XX6-1           < OUI, (-1 A CAUSE DU 'DC' QUI MANQUE)
         STA         KCARTE          < REINITIALISATION DU FACTEUR DE DEBLOCAGE,
         LA          ACBUF0
         STA         ACBUF           < ET DU RELAI DU BUFFER CARTE...
SP27:    EQU         $
         LAD         DEMCR           < OUI :
         SVC         0               < LECTURE D'UNE CARTE...
         JE          SP29            < OK...
         QUIT        1               < !ASSIGN ???
         JMP         SP27            < ET ON RETENTE...
SP29:    EQU         $
         IC          ADMT            < POUR L'ACCES AU BLOC SUIVANT...
SP28:    EQU         $
         LXI         0               < REINITIALISATION DE L'INDEX CARACTERE.
SP24:    EQU         $
         LBY         &ACBUF
         ADRI        1,X             < POUR LE CARACTERE SUIVANT...
         ANDI        '0F             < DECODAGE 'ASCI' OU 'EBCDIC', EN TENANT
                                     < COMPTE DE L'EQUIVALENCE ENTRE "SPACE"
                                     < ET LE CHIFFRE "0".
         CPI         BASE10
         JL          SP23
         QUIT        1
SP23:    EQU         $
         PSR         A               < SAVE LE CHIFFRE COURANT,
         LA          FWORK
         MP          C10             < DECALAGE,
         PLR         A
         ADR         B,A             < ET CUMUL...
         STA         FWORK           < (A)=(FWORK)=RESULTAT...
         RSR
:F
:F
< <<'SIOC CARTE XY 9'
DF'SIOC CARTE RASTER 4'
ED'SIOC CARTE RASTER 4'
IN0
         PAGE
         IDP         "SIOC CARTE RASTER 4"
<
<
<        E N T R E E   C A R T E S   R A S T E R   4  :
<
<
<        FONCTION :
<                      CE MODULE LIT SUR L'UNITE
<                    '0B DES NIVEAUX DE GRIS, ET
<                    LES AFFICHE SEQUENTIELLEMENT
<                    SUR L'ECRAN...
<                      LA VERSION 'RASTER 4' SE DIFFE-
<                    RENCIE DES AUTRES VERSIONS PAR LE
<                    FAIT QUE L'IMAGE TRANSMISE N'EST
<                    PAS 256*256, MAIS 1024*1024, ET
<                    PEUT MEME POSSEDER PLUS DE LIGNES
<                    (IL SUFFIT DE SE POSITIONNER ALORS
<                    SUR LA BANDE PAR 'A2') ; CHAQUE
<                    BLOC CONTIENT 64 PAQUETS DE 4 CHIF-
<                    FRES HEXA-DECIAMUX QUI CODENT EN
<                    FAIT LA CONFIGURATION DES 16 POINTS
<                    TOUT OU RIEN DES PAVES 4*4 DE LA GRANDE
<                    IMAGE QUE L'ON VA DONC REPRESENTER
<                    PAR UNE TRANSFORMATION HABILE DE
<                    CES 16 BITS...
<
<
<        ARGUMENTS :
A0::     VAL         0               < MODE DE REPRESENTATION :
XMOD00:: VAL         0               < MODE 'MAX' : ON VISUALISE MAX(A(I,J)).
XMOD01:: VAL         XMOD00+1        < MODE 'SIGMA' : ON VISUALISE LE SIGMA
                                     < DES A(I,J).
A2::     VAL         A0+2            < ADRESSE DU PREMIER BLOC SUR LA BANDE ;
                                     < SI CETTE ADRESSE EST FOURNIE NEGATIVE,
                                     < ALORS, ON RECUPERE L'ADRESSE COURANTE
                                     < DANS LA 'BOX'...
A3::     VAL         A2+1            < TAILLE DU PAVE ELEMENTAIRE :
                                     < 1 : 1*1 --> 1 POINT D'IMAGE,
                                     < 2 : 2*2 --> 1 POINT D'IMAGE,
                                     < 4 : 4*4 --> 1 POINT D'IMAGE.
A4::     VAL         A3+1            < XMIN(FENETRE) DANS :
                                     < (0,1023) POUR LA TAILLE 1,
                                     < (0,511) POUR 2,
                                     < (0,255) POUR 4.
A5::     VAL         A4+1            < YMIN(FENETRE),
A6::     VAL         A5+1            < XMAX(FENETRE),
A7::     VAL         A6+1            < YMAX(FENETRE).
A8::     VAL         A7+1            < TRANSPOSITION DE 'VNIVO' :
                                     < =0 : NON,
                                     < #0 : OUI.
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
<
< INDICATEUR DE PREMIER PASSAGE :
<
IPREM:   WORD        -1
<
< DEFINITION ET ACCES AU BUFFER :
<
LCBUF::  VAL         NMOTL*NBITMO    < LONGUEUR EN OCTETS DU BUFFER,
CBUF:    EQU         IMAGE           < IL EST EN RECOUVREMENT AVEC 'IMAGE'...
NVPMT::  VAL         '0B             < 'NVP' D'ACCES A LA BANDE MAGNETIQUE...
DEMADC:  BYTE        NVPMT;'05       < MISE DE L'ADRESSE COURANTE DANS LA 'BOX'.
DEMMT:   BYTE        NVPMT;'08       < LECTURE EN ACCES DIRECT DE LA BANDE :
         WORD        CBUF-ZERO*2
         WORD        LCBUF
ADMT:    WORD        0               < ADRESSE COURANTE DE BLOC ('A2').
AXBUF:   WORD        CBUF,X          < RELAI D'ACCES AU BUFFER,
XBUF:    WORD        LCBUF           < INDEX COURANT DU BUFFER,
MAXBUF:  WORD        LCBUF           < VALEUR COURANTE DE 'XBUF'.
<
< CONSTANTES :
<
FINITE:  FLOAT       1000000
VMODE:   WORD        0               < 'A0' : MODE DE REPRESENTATION.
VNIVO:   WORD        0               < RNAGEMENT DU PAQUET DE 4 CHIFFRES
                                     < HEXA-DECIMAUX COURANT.
TPAVE:   WORD        0               < 'A3' : TAILLE DU PAVE A TRAITER.
PXMIN:   WORD        0               < 'A4' : XMIN(FENETRE),
PYMIN:   WORD        0               < 'A5' : YMIN(FENETRE),
PXMAX:   WORD        0               < 'A6' : XMAX(FENETRE),
PYMAX:   WORD        0               < 'A7' : YMAX(FENETRE).
ITRVNI:  WORD        0               < TRANSPOSITION DE 'VNIVO' :
                                     < =0 : NON,
                                     < #0 : OUI.
<
< LISTES DE TRAITEMENT DES PAVES 2*2 :
<
LIS11:   EQU         $
         WORD        0;0;1;1;0;0;1;1;4;4;5;5;4;4;5;5
LIS12:   EQU         $
         WORD        2;2;3;3;2;2;3;3;6;6;7;7;6;6;7;7
LIS21:   EQU         $
         WORD        8;8;9;9;8;8;9;9;12;12;13;13;12;12;13;13
LIS22:   EQU         $
         WORD        10;10;11;11;10;10;11;11;14;14;15;15;14;14;15;15
ALIS11:  WORD        LIS11,X         < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (1,1),
ALIS12:  WORD        LIS12,X         < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (1,2),
ALIS21:  WORD        LIS21,X         < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (2,1),
ALIS22:  WORD        LIS22,X         < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (2,2).
LISTR:   EQU         $
         WORD        15;14;13;12;11;10;9;8;7;6;5;4;3;2;1;0
ALISTR:  WORD        LISTR,X         < LISTE DE TRANSPOSITION DE 'VNIVO'.
<
< TABLE DE COLORIAGE :
<
LISCOU:  EQU         $
         WORD        0;1;1;2;2;3;3;4;4;5;5;6;6;7;7;7;7
ALISCO:  WORD        LISCOU,X        < RELAI D'ACCES A LA TABLE DE COLORIAGE...
<
< RELAIS :
<
ASP1:    WORD        SP1             < CONVERSION DECIMALE PAR CARACTERE,
ASP2:    WORD        SP2             < ACCES A UN CARACTERE.
ASPMAR:  WORD        SPMAR           < MARQUAGE D'UN POINT SUIVANT LE MODE
                                     < 'MAX' OU 'SIGMA'.
ASPW0:   WORD        SPW0            < RELAI...
         PROG
<
<
<        C O M P O S A N T E   E N   ' U ':
<
<
SPU:     EQU         $
<
< ENTREE DES PARAMETRES :
<
         CPZ         IPREM           < EST-CE NECESSAIRE ???
         JGE         SPU1            < NON...
         IC          IPREM           < OUI...
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         VMODE           < MODE DE REPRESENTATION...
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         STA         ADMT            < ADRESSE COURANTE SUR LA BANDE :
         JAGE        SPU3            < OK, ELLE EST POSITIVE OU NULLE...
SPU4:    EQU         $
         LAD         DEMADC          < SI ELLE EST NEGATIVE,
         SVC         0               < ON RECUPERE L'ADRESSE COURANTE SUR LE
                                     < BANDE.
         JE          SPU5            < OK...
         QUIT        1               < "!ASSIGN B=MT1" MANQUE SUREMENT...
         JMP         SPU4            < TRY AGAIN...
SPU5:    EQU         $
         ACTD        3               < RECUPERATION DE 'BOX' :
         STB         ADMT            < CE QUI DONNE L'ADRESSE COURANTE SUR LA
                                     < BANDE...
SPU3:    EQU         $
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         STA         TPAVE           < TAILLE DU PAVE COURANT.
         LXI         A4
         BSR         ASPCT
         BSR         AROND
         STA         PXMIN           < XMIN(FENETRE),
         LXI         A5
         BSR         ASPCT
         BSR         AROND
         STA         PYMIN           < YMIN(FENETRE),
         LXI         A6
         BSR         ASPCT
         BSR         AROND
         STA         PXMAX           < XMAX(FENETRE),
         LXI         A7
         BSR         ASPCT
         BSR         AROND
         STA         PYMAX           < YMAX(FENETRE).
         LXI         A8
         BSR         ASPCT
         BSR         AROND
         STA         ITRVNI          < TRANSPOSITION DE 'VNIVO' ???
SPU1:    EQU         $
<
< COMPOSANTE :
<
         FLD         FINITE          < POUR FORCER UN OVERSCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N  ' V '  :
<
<
SPV:     EQU         $
<
< COMPOSANTE :
<
         FLD         FINITE          < POUR FORCER UN OVERS-SCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         LX          XR
         LY          YR
         STX         XS              < POISITIONEMENT DANS LE COIN SUPERIEUR
         STY         YS              < GAUCHE DU PAVE COURANT...
<
< ACCES AU NIVEAU DE GRIS COURANT :
<
         LBI         0               < INITIALISATION DU CUMUL,
         DO          NBRHEX
         BSR         ASP1            < DECODAGE DU PAQUET DE 4 CHIFFRES...
         STB         VNIVO           < (VNIVO)=PAQUET COURANT DE 4 CHIFFRES
                                     <         HEXA-DECIMAUX.
         CPZ         ITRVNI          < FAUT-IL TRANSPOSER 'VNIVO' ???
         JE          SPW9            < NON...
         LB          VNIVO           < (B)=LISTE DES POINTS DU PAVE 4*4,
         LAI         0               < (A)=LISTE TRANSPOSEE DU PAVE 4*4,
         LXI         NBITMO          < (X)=NOMBRE DE POINTS DE LA LISTE (B).
SPD21:   EQU         $
         ADRI        -1,X
         LY          &ALISTR         < (Y)=INDEX DE TRANSPOSITION DE (X),
         XR          X,Y
         TBT         NBITMO,X        < TEST DE B(Y),
         XR          X,Y
         JNC         SPD22           < 0...
         SBT         0,X             < 1 : ON MARQUE A(X)...
SPD22:   EQU         $
         CPZR        X               < LE TRANSFERT EST-IL FINI ???
         JGE         SPD21           < NON...
         STA         VNIVO           < ET ON RESTAURE 'VNIVO'...
SPW9:    EQU         $
<
< AIGUILLAGE EN FONCTION
< DE LA TAILLE DU PAVE :
<
         LA          TPAVE           < (A)=TAILLE DEMANDEE :
         CPI         4
         JE          SPW4            < ON VA VISUALISER UN PAVE 4*4 PAR POINT.
         CPI         2
         JE          SPW2            < ON VA VISUALISER UN PAVE 2*2 PAR POINT.
         CPI         1
         JE          SPW1            < ON VA VISUALISER UN PAVE 1*1 PAR POINT.
         QUIT        1               < BERKKK...
         BR          ASPW0           < ET ON SORT...
<
< VISUALISATION D'UN PAVE 4*4
< PAR POINT DE L'IMAGE 256*256 :
<
SPW4:    EQU         $
         BSR         ASPMAR          < MARQUAGE DU POINT (XS,YS) SUIVANT
                                     < L'UN DES MODES 'MAX' OU 'SIGMA'...
         BR          ASPW0           < ET ON SORT...
<
< MARQUAGE D'UN PAVE 1*1
< PAR POINT DE L'IMAGE 256*256 :
<
SPW1:    EQU         $
ECHEL:   VAL         4               < FACTEUR D'ECHELLE.
         IF          ECHEL*ECHEL-NBITMO,,XWOR%,
         IF          ATTENTION : INCOHERENCE !!!
XWOR%:   VAL         0
         LA          XS
         SLLS        ECHEL=0
         SB          PXMIN
         STA         XS              < CHANGEMENT DE
         LA          YS
         SLLS        ECHEL=0
         SB          PYMIN
         STA         YS              <               COORDONNEES...
         LYI         0               < (Y)=INDEX DE LA LISTE DE POINTS
                                     <     'VNIVO',
         LXI         ECHEL           < (X)=NOMBRE DE LIGNES A TRACER.
SPW11:   EQU         $
         LA          XS
         PSR         A,X             < SAVE L'ABSCISSE INITIALE, ET LE NOMBRE
                                     < DE LIGNES ENCORE A TRACER...
         LXI         ECHEL           < (X)=NOMBRE DE POINTS SUR LA LIGNE.
SPW12:   EQU         $
         LA          XS              < VALIDATION DE 'XS' :
         AD          PXMIN
         CP          PXMIN
         JL          SPW13           < HORS-FENETRE...
         CP          PXMAX
         JG          SPW13           < HORS-FENETRE...
         LA          YS              < VALIDATION DE 'YS' :
         AD          PYMIN
         CP          PYMIN
         JL          SPW13           < HORS-FENETRE...
         CP          PYMAX
         JG          SPW13           < HORS-FENETRE...
         LA          VNIVO           < (A)=LISTE DES POINTS DU PAVE 4*4,
         XR          X,Y
         TBT         0,X             < LE POINT (XS,YS) COURANT EST-IL BLANC ???
         XR          X,Y
         LAI         0               < NON A PRIORI...
         JNC         SPW14           < NOIR...
         LAI         NIVMAX          < BLANC...
SPW14:   EQU         $
         BSR         ASPRPS          < ET MARQUAGE DU POINT COURANT (XS,YS)...
SPW13:   EQU         $
         ADRI        1,Y             < PASSAGE AU POINT SUIVANT DU PAVE...
         IC          XS              < PROGRESSION SUR LA LIGNE,
         JDX         SPW12           < SUR 4 POINTS...
         PLR         A,X             < AU BOUT DE 4 POINTS,
         STA         XS              < ON RESTAURE L'ABSCISSE INITIALE, ET LE
                                     < NOMBRE DE LIGNES ENCORE A TRACER,
         IC          YS              < PROGRESSION DU NUMERO DE LIGNE,
         JDX         SPW11           < SUR 4 LIGNES...
         BR          ASPW0           < ET C'EST FINI...
<
< MARQUAGE D'UN PAVE 2*2
< PAR POINT DE L'IMAGE 256*256 :
<
SPW2:    EQU         $
ECHEL:   VAL         2               < FACTEUR D'ECHELLE...
         LA          XS
         SLLS        ECHEL=0
         SB          PXMIN
         STA         XS              < CHANGEMENT DE
         LA          YS
         SLLS        ECHEL=0
         SB          PYMIN
         STA         YS              <               COORDONNEES...
         LB          VNIVO           < (B)=LISTE DES POINTS DU PAVE 4*4,
         LAI         0               < (A)=LISTE DES POINTS DU PAVE 2*2,
         LXI         NBITMO          < (X)=NOMBRE DE POINTS DE LA LISTE (B).
SPW21:   EQU         $
         ADRI        -1,X
         LY          &ALIS11         < (Y)=INDEX DE TRANSFERT DE (X),
         XR          X,Y
         TBT         NBITMO,X        < TEST DE B(Y),
         XR          X,Y
         JNC         SPW22           < 0...
         SBT         0,X             < 1 : ON MARQUE A(X)...
SPW22:   EQU         $
         CPZR        X               < LE TRANSFERT EST-IL FINI ???
         JGE         SPW21           < NON...
         XM          VNIVO           < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO',
         BSR         ASPMAR          < ET ON MARQUE LE PAVE 2*2 (1,1)...
         STA         VNIVO           < ET ON RESTAURE 'VNIVO'...
         LB          VNIVO           < (B)=LISTE DES POINTS DU PAVE 4*4,
         LAI         0               < (A)=LISTE DES POINTS DU PAVE 2*2,
         LXI         NBITMO          < (X)=NOMBRE DE POINTS DE LA LISTE (B).
SPWA1:   EQU         $
         ADRI        -1,X
         LY          &ALIS12         < (Y)=INDEX DE TRANSFERT DE (X),
         XR          X,Y
         TBT         NBITMO,X        < TEST DE B(Y),
         XR          X,Y
         JNC         SPWA2           < 0...
         SBT         0,X             < 1 : ON MARQUE A(X)...
SPWA2:   EQU         $
         CPZR        X               < LE TRANSFERT EST-IL FINI ???
         JGE         SPWA1           < NON...
         XM          VNIVO           < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO',
         IC          XS              < PROGRESSION SUR LA LIGNE...
         BSR         ASPMAR          < ET ON MARQUE LE PAVE 2*2 (1,2)...
         STA         VNIVO           < ET ON RESTAURE 'VNIVO'...
         LB          VNIVO           < (B)=LISTE DES POINTS DU PAVE 4*4,
         LAI         0               < (A)=LISTE DES POINTS DU PAVE 2*2,
         LXI         NBITMO          < (X)=NOMBRE DE POINTS DE LA LISTE (B).
SPWB1:   EQU         $
         ADRI        -1,X
         LY          &ALIS21         < (Y)=INDEX DE TRANSFERT DE (X),
         XR          X,Y
         TBT         NBITMO,X        < TEST DE B(Y),
         XR          X,Y
         JNC         SPWB2           < 0...
         SBT         0,X             < 1 : ON MARQUE A(X)...
SPWB2:   EQU         $
         CPZR        X               < LE TRANSFERT EST-IL FINI ???
         JGE         SPWB1           < NON...
         XM          VNIVO           < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO',
         DC          XS
         IC          YS              < ET ON PROGRESSE...
         BSR         ASPMAR          < ET ON MARQUE LE PAVE 2*2 (2,1)...
         STA         VNIVO           < ET ON RESTAURE 'VNIVO'...
         LB          VNIVO           < (B)=LISTE DES POINTS DU PAVE 4*4,
         LAI         0               < (A)=LISTE DES POINTS DU PAVE 2*2,
         LXI         NBITMO          < (X)=NOMBRE DE POINTS DE LA LISTE (B).
SPWC1:   EQU         $
         ADRI        -1,X
         LY          &ALIS22         < (Y)=INDEX DE TRANSFERT DE (X),
         XR          X,Y
         TBT         NBITMO,X        < TEST DE B(Y),
         XR          X,Y
         JNC         SPWC2           < 0...
         SBT         0,X             < 1 : ON MARQUE A(X)...
SPWC2:   EQU         $
         CPZR        X               < LE TRANSFERT EST-IL FINI ???
         JGE         SPWC1           < NON...
         XM          VNIVO           < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO',
         IC          XS              < ET ON PROGRESSE...
         BSR         ASPMAR          < ET ON MARQUE LE PAVE 2*2 (2,2)...
         STA         VNIVO           < ET ON RESTAURE 'VNIVO'...
<
< FIN DE MARQUAGE :
<
SPW0:    EQU         $
         FLD         F0
         RSR
<
<
<        M A R Q U A G E   D ' U N   P O I N T
<        S U I V A N T   ' M A X '   O U   ' S I G M A '  :
<
<
SPMAR:   EQU         $
         PSR         A,B,X,Y
         LA          XS              < VALIDATION DE 'XS' :
         AD          PXMIN
         CP          PXMIN
         JL          SPM999          < HORS-FENETRE...
         CP          PXMAX
         JG          SPM999          < HORS-FENETRE...
         LA          YS              < VALIDATION DE 'YS' :
         AD          PYMIN
         CP          PYMIN
         JL          SPM999          < HORS-FENETRE...
         CP          PYMAX
         JG          SPM999          < HORS-FENETRE...
         LA          VMODE           < QUEL EST LE MODE DE REPRESENTATION ???
         CPI         XMOD00
         JE          SPM100          < MODE 'MAX'...
         CPI         XMOD01
         JE          SPM200          < MODE 'SIGMA'...
         QUIT        1               < BERKKK...
         JMP         SPM999          < ET ON ABANDONNE...
<
< CAS DU MODE 'MAX' :
<
SPM100:  EQU         $
         LAI         0               < (A)=NIVEAU NOIR A PRIORI,
         CPZ         VNIVO           < Y-A-T'IL AU MOINS UN BIT A 1 ???
         JE          SPM101          < NON ==> NOIR...
         LAI         NIVMAX          < OUI ==> BLANC...
SPM101:  EQU         $
         JMP         SPM800          < VERS LE TRACE...
<
< CAS DU MODE 'SIGMA' :
<
SPM200:  EQU         $
         LA          VNIVO           < (A)=CHAMP DONT ON DOIT COMPTER LES BITS,
         LYI         0               < (Y)=COMPTEUR DES BITS A 1,
SPM201:  EQU         $
         JAE         SPM202          < C'EST FINI, ON A TROUVE TOUS LES BITS
                                     < A 1...
         DBT                         < NON, RECHERCHE DU PROCHAIN BIT A 1,
         ADRI        1,Y             < ON LE COMPTE...
         RBT         0,X             < ET ON L'ELIMINE...
         JMP         SPM201          < AU SUIVANT...
SPM202:  EQU         $
         LR          Y,X             < (X)=NOMBRE DE BITS A 1,
         LA          &ALISCO         < (A)=NIVEAU DE MARQUAGE.
         JMP         SPM800          < VERS LE MARQUAGE...
<
< MARQUAGE DU POINT COURANT :
<
SPM800:  EQU         $
         BSR         ASPRPS          < MARQUAGE DU POINT (XS,YS)=(XR,YR)
                                     < AVEC LE NIVEAU (A)...
<
< ET SORTIE :
<
SPM999:  EQU         $
         PLR         A,B,X,Y
         RSR
<
<
<        A C C E S   A U   C A R A C T E R E   C O U R A N T  :
<
<
SP2:     EQU         $
         PSR         B,X
SP24:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER,
         CP          MAXBUF          < EST-ON AU BOUT DU BUFFER (EN PARTICULIER
                                     < CAS DE LA PREMIERE LECTURE...) ???
         JL          SP21            < NON...
         STZ         XBUF            < OUI, ON SE RAMENE EN TETE DU BUFFER...
SP23:    EQU         $
         LAD         DEMMT
         SVC         0               < ON LIT LE BLOC COURANT...
         JE          SP22            < OK...
         LR          X,A
         CPI         '45             < EST-CE UN 'TAPE-MARK' ???
         JNE         SP29            < NON, AUTRE ERREUR...
         LAD         DEMMT           < OUI, ON TENTE DE RELIRE...
         SVC         0               < LECTURE DU BLOC COURANT...
         JE          SP22            < OK, ON A SAUTE LE 'TAPE-MARK'...
SP29:    EQU         $
         QUIT        1               < ERREUR D'ASSIGNATION PROBABLEMENT...
         JMP         SP23
SP22:    EQU         $
         IC          ADMT            < PASSAGE AU BLOC SUIVANT...
         ACTD        3               < RECUPERATION DE LA 'BOX'...
         LR          B,A             < (A)=BOX...
         CP          MAXBUF          < ET VALIDATION...
         JLE         SP28            < OK...
         QUIT        1               < !?!???!?!
SP28:    EQU         $
         LA          XBUF            < (A)=INDEX COURANT DU BUFFER...
SP21:    EQU         $
         IC          XBUF            < ET PASSAGE AU CARACTERE SUIVANT...
         LR          A,X
         LBY         &AXBUF          < (A)=CARACTERE COURANT DU BUFFER :
MASKCA:: VAL         '003F           < MASQUE PERMETTANT DE PRENDRE EN COMPTE
                                     < AUSSI BIEN L'EBCDIC QUE L'ASCI...
         ANDI        MASKCA
         CPI         "0"             < EST-CE UN CHIFFRE ???
         JGE         SP27            < PEUT-ETRE...
         ORI         '40             < NON, ON TENTE UNE CONVERSION EN
                                     < LETTRE (DE "A" A "F")...
SP27:    EQU         $
         ADRI        -"0",A          < CONVERSION DECIMALE :
         JAL         SP25            < ERREUR...
         CPI         BASE10-1
         JLE         SP26            < C'EST UN CHIFFRE (DE "0" A "9")...
         ADRI        -"A"+"9"+1,A    < CONVERSION HEXA-DECIMALE :
         CPI         BASE10
         JL          SP25            < ERREUR...
         CPI         BASE16-1
         JLE         SP26            < C'EST UNE LETTRE (DE "A" A "F")...
SP25:    EQU         $
         QUIT        1               < BERKK...
SP26:    EQU         $
         PLR         B,X
         RSR                         < ET SORTIE...
<
<
<        C O N V E R S I O N   H E X A - D E C I M A L E  :
<
<
SP1:     EQU         $
         SLLD        NBRHEX          < DECALAGE DU CUMUL COURANT DANS 'B',
         BSR         ASP2            < ACCES AU CARACTERE COURANT...
         ORR         A,B             < ET CUMUL...
         RSR
:F
:F
< <<'SIOC CARTE RASTER 4'



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.