


       NAM ML
******************************************************
*      THIS PROGRAM WAS WRITTEN BY JOHN M. BILLINGS
*      AND REVISED BY MOTOROLA MICROSYSTEMS.
*      ORIGINALLY CALLED "CHRISTMAS CARD LIST" SINCE
*      THAT WAS ITS INTENDED PURPOSE BY THE AUTHOR.
*
*      THE PROGRAM, WITH ITS 7 SINGLE LETTER
*      COMMANDS, ALLOWS INDEXING, LOADING, VERIFY,
*      AND DELETION OF INDIVIDUAL LABEL.
*
*      COMMANDS:
*        I - INDEX.  PRINTS TITLE AND THAT PORTION
*            OF BLOCK BETWEEN $08 AND $09.  LISTING
*            TERMINATED ON NUL FOUND IN 1ST BYTE
*            OF BLOCK.
*        N - NEXT BLOCK.  SHOWS ADDRESS OF NEXT
*            AVAILABLE EMPTY BLOCK.
*        X - REVERT BACK TO MONITOR CONTROL.
*        D - DELETE BLOCK.  WILL DELETE THE BLOCK
*            AT THE ADDRESS YOU GIVE.
*        L - LOAD.  PRINTS "LOAD $" THEN WAITS FOR
*            A 4-DIGIT HEX ADDRESS OF THE BLOCK TO
*            BE LOADED.  EACH BLOCK SHOULD BEGIN WITH
*            A CR AND AT LEAST 1 LF.  USE THE CODES
*            $08 AND $09 FOR THE INDEXED ITEM. (CONTROL
*            H AND CONTROL I).  AT LEAST 1 LF SHOULD
*            FOLLOW THE END OF LABEL AND FINALLY
*            A $04 (CONTROL D).
*        V - VERIFY.  ENTER ADDRESS OF BLOCK.
*        CONTROL L - PRINTS THE ENTIRE LIST.
*      NOTE: MEMORY DEDICATED TO STORE LABELS MUST
*        BE CLEARED BEFORE LOADING.
*
*      REV 1.1 - 8/25/78 - DLJ
********************************************************
       SPC 1
XHI    EQU $A00C
BADDR  EQU $E047
PDATA1 EQU $E07E
OUT4HS EQU $E0C8
CONTRL EQU $E0E3
INEEE  EQU $E1AC
OUTEEE EQU $E1D1
       SPC 1
       ORG $0020
NXBLK  FDB START
SAVEX  FDB START
TEMPX  FDB START
       SPC 1
INDEX  LDX #TITLE INIT POINTER AND SAVEX
       STX SAVEX
IX1    LDAA 0,X GET CHAR
       INX BUMP POINTER
       CMPA #$08
       BNE IX1
IX2    LDAA 0,X GET NEXT CHAR
       INX
       CMPA #$09
       BEQ IX3
       JSR OUTEEE PRINT CHAR
       BRA IX2 DO AGAIN
       SPC 1
IX3    BSR INCSVX ADD $50 TO SAVEX
       LDX #SAVEX
       JSR OUT4HS PRINT SAVEX
       LDX SAVEX
       LDAA 0,X GET CHAR
       CMPA #0 TEST FOR NUL
       BNE IX1 NO NUL, DO IT AGAIN
       JMP VE1
       SPC 1
NXTBLK LDX #STAT
       JSR PDATA1 PRINT MSG
       LDX #NXBLK
       JSR OUT4HS PRINT ADR
CTROL  LDX #SYMBOL
       JSR PDATA1
       JSR INEEE
       CMPA #'I
       BEQ INDEX
       CMPA #'N
       BEQ NXTBLK
       CMPA #$0C CONTROL L
       BNE *+5
       JMP PRINT
       CMPA #'X
       BNE *+5
       JMP CONTRL IN MIKBUG
       CMPA #'D
       BEQ DELETE
       CMPA #'L
       BEQ LOAD
       CMPA #'V
       BEQ VERIFY
       BRA CTROL NONE OF ABOVE!
       SPC 1
DELETE LDX #DE2
       JSR PDATA1
       JSR BADDR
DE1    LDAA $50,X
       STAA 0,X
       INX
       CPX #$0FAF END OF BLOCK FOR LABELS?
       BNE DE1 STILL MEMORY
       LDAA NXBLK
       LDAB NXBLK+1
       SUBB #$50
       SBCA #0
       STAA NXBLK
       STAB NXBLK+1
C1     BRA CTROL
       SPC 1
INCSVX LDAA SAVEX
       LDAB SAVEX+1
       ADDB #$50
       ADCA #0
       STAA SAVEX
       STAB SAVEX+1
       RTS
       SPC 1
LOAD   LDX #LD4
       JSR PDATA1 PRINT MSG
       JSR BADDR GET ADR
       STX SAVEX SAVE IT
LD1    JSR INEEE GET CHAR
       CMPA #$05 CONTROL E?
       BNE LD2 NO, CHAR OK
       DEX YES, PREV CHAR ERROR
       BRA LD1 BACKSPACE
       SPC 1
LD2    STAA 0,X SAVE IT
       INX
       CMPA #$04 CONTROL D?
       BNE LD1 NO
       STX TEMPX
       LDX #TEMPX
       JSR OUT4HS PRINT ADR
       LDX #QUEST
       JSR PDATA1 PRINT MSG
       BSR INCSVX
       LDX SAVEX
       JSR INEEE WAIT FOR ANSWER
       CMPA #'Y
       BEQ LD1 YES, GO BACK TO LOAD
       STX NXBLK NO
C2     BRA C1
       SPC 1
VERIFY LDX #VE2
       JSR PDATA1 PRINT MSG
       JSR BADDR GET ADR
       LDAA 0,X GET 1ST CHAR
       BEQ VE1 NUL
       JSR PDATA1 PRINT IT
       STX TEMPX
       LDX #TEMPX
       JSR OUT4HS PRINT ADR
       LDX #ASK
       JSR PDATA1 PRINT MSG
       JSR INEEE WAIT FOR ANSWER
       CMPA #'Y
       BNE C1 NO
       LDX XHI YES, DELETE
       JMP DE1
       SPC 1
VE1    LDX #BLANK
       JSR PDATA1 PRINT MSG
       BRA C1
       SPC 1
PRINT  LDX #START
       STX SAVEX
PR1    LDAA 0,X GET CHAR
       BEQ C2 NUL
       JSR PDATA1 PRINT BLOCK
       JSR INCSVX ADD $50 TO POINTER
       LDX SAVEX
       BRA PR1 DO OVER
       SPC 1
SYMBOL FCB $0D,$0A,$5B,4
ASK    FCB $0D,$0A
       FCC /TO BE DELETED ? "Y" OR "N" /
       FCB 4
STAT   FCC /EXT BLOCK $ /
       FCB 4
BLANK  FCC / BLANK! /
       FCB 4
VE2    FCC /ERIFY $ /
       FCB 4
DE2    FCC /ELETE $ /
       FCB 4
LD4    FCC /OAD $ /
       FCB 4
TITLE  FCB $08
       FCC /NDEX/
       FCB $0D,$0A
       FCC /MAILING LIST/
       FCB $0D,$0A,$0A,$09,$04
QUEST  FCB $0D,$0A
       FCC /MORE TO LOAD? "Y" OR "N" /
       FCB 4
       SPC 1
       ORG $0200
START  BSZ $0DFF
       SPC 1
       END CTROL
