*
********************************
*                              *
*      -< STRINGS DEMO >-      *
*                              *
*       VERSION 00.03.00       *
*                              *
*         20-JAN-2019          *
*                              *
********************************
*                              *
*       NATHAN D. RIGGS        *
*   NATHAN.RIGGS@OUTLOOK.COM   *
*                              *
********************************
*
** ASSEMBLER DIRECTIVES
*
         CYC   AVE
         TR    ON
         EXP   ONLY
         DSK   STRINGS.DEMO
         OBJ   $BFE0
         ORG   $6000
*
*``````````````````````````````*
*  TOP INCLUDES (PUTS, MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
         PUT   MIN.VARS.REQUIRED
         USE   MIN.MAC.REQUIRED
         PUT   MIN.HOOKS.REQUIRED
         USE   MIN.MAC.STRINGS
         PUT   MIN.HOOKS.STRINGS
*
*``````````````````````````````*
*      PROGRAM MAIN BODY       *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
         _PRNT " ",8D8D8D8D
         _PRNT "STRINGS LIBRARY DEMO",8D
         _PRNT "--------------------",8D
         _PRNT " ",8D
         _PRNT "THE SCMP MACRO COMPARES TWO ",8D
         _PRNT "STRINGS AND SETS THE FLAGS",8D
         _PRNT "ACCORDINGLY. IF THE TWO ARE EQUAL,",8D
         _PRNT "THEN .Z IS SET TO ZERO; IF NOT, 1.",8D8D
         _PRNT "IF STRING1 LENGTH > STRING2 LENGTH,",8D
         _PRNT ".C(ARRY) = 0; ELSE, .C = 1.",8D8D
         _PRNT "SO, WE CAN COMPARE THE LITERAL 'A'",8D
         _PRNT "TO THE VALUE STORED IN ASTR, WHICH",8D
         _PRNT "HOLDS THE SAME STRING, THEN USE BNE TO",8D
         _PRNT "TEST IF THEY ARE EQUAL.",8D8D
         SCMP  "A";ASTR
         BNE   PE         ; IS ZERO FLAG 1? BRANCH IF SO
         JMP   CONT
PE
         _PRNT "THE LITERAL A AND THE A STRING ARE",8D
         _PRNT "EQUAL.",8D8D8D
CONT
         _WAIT
         _PRNT "NOTE THAT ONLY A SINGLE PARAMETER",8D
         _PRNT "MAY BE A LITERAL STRING IN SCMP;",8D
         _PRNT "THIS SAME RULE APPLIES TO ALL MACROS",8D
         _PRNT "THAT ACCEPT STRINGS AS PARAMETERS.",8D8D
         _PRNT "YOU CAN ALSO USE SCMP TO COMPARE",8D
         _PRNT "THE LENGTHS OF TWO DIFFERENT STRINGS.",8D8D
         _PRNT "THE CARRY FLAG IS SET TO 0 IF THE",8D
         _PRNT "FIRST STRING HAS A LENGTH > THAN THE ",8D
         _PRNT "SECOND STRING'S LENGTH. THIS CAN THEN",8D
         _PRNT "BE TESTED WITH BCS.",8D8D
         _PRNT "SO IF WE COMPARE THE LITERAL 'AA' ",8D
         _PRNT "TO THE SAME ASTR, WE WILL FIND THAT",8D
         _PRNT "THE LITERAL HAS A GREATER LENGTH.",8D8D
*
         SCMP  "AA";ASTR
         BCS   LE
         JMP   CONT2
LE
         _PRNT "THE LITERAL 'AA' IS GREATER THAN ",8D
         _PRNT "ASTR, WHICH HOLDS 'A'.",8D8D8D
CONT2
         _WAIT
*
         _PRNT " ",8D8D8D8D
         _PRNT "THE SCAT MACRO CONCATENATES",8D
         _PRNT "A SECOND GIVEN STRING TO A ",8D
         _PRNT "FIRST GIVEN STRING. EITHER PARAMETER",8D
         _PRNT "MAY BE A LITERAL STRING, BUT NEVER BOTH.",8D8D
         _PRNT "SCAT 'WTF IS ';ASTR;#50 RETURNS: ",8D8D
         SCAT  "WTF IS ";#ASTR;#50
         SPRN  #RETURN
         _PRNT " ",8D8D8D
         _WAIT
*
         _PRNT "TO SHOW THE RESULT OF SCAT,",8D
         _PRNT "WE USED THE SPRN MACRO, WHICH",8D
         _PRNT "SIMPLY PRINTS A STRING. THIS",8D
         _PRNT "WORKS DIFFERENTLY THAN THE PRINT",8D
         _PRNT "ROUTINES IN STDIO OR THE _PRNT",8D
         _PRNT "ROUTINE, AS IT CAN ONLY HANDLE",8D
         _PRNT "A STRING ADDRESS.",8D8D
         _PRNT "SPRN BSTR RETURNS: "
         SPRN  #BSTR
         _PRNT " ",8D8D8D
         _WAIT
*
         _PRNT " ",8D8D8D8D
         _PRNT "SUBSTRING ROUTINES/MACROS",8D
         _PRNT "-------------------------",8D8D
         _PRNT "SPOS FINDS THE POSITION OF",8D
         _PRNT "A SUBSTRING WITHIN ANOTHER",8D
         _PRNT "STRING.",8D8D
         _PRNT "SPOS 'THIS IS A STRING';ASTR RETURNS: "
         SPOS  "THIS IS A STRING";#ASTR
         STA   $300
         LDA   #0
         STA   $301       ; CLEAR HI BYTE
         DUMP  #RETURN;#1
         _PRNT " ",8D8D8D
*
         _PRNT " ",8D8D8D
         _PRNT "THE SCPY MACRO COPIES A ",8D
         _PRNT "SUBSTRING FROM ANOTHER STRING",8D
         _PRNT "AT THE SPECIFIED INDEX, HOLDING",8D
         _PRNT "THE SUBSTRING IN [RETURN].",8D8D
         _PRNT "SCPY 'ABCDEFGHIJK';#2;#4;#50 RETURNS: "
         SCPY  "ABCDEFGHIJK";#2;#4;#$FF
         SPRN  #RETURN
         _PRNT " ",8D8D8D
         _WAIT
*
         _PRNT " ",8D8D8D8D8D
         _PRNT "THE SDEL MACRO DELETES A SUBSTRING",8D
         _PRNT "FROM THE GIVEN SOURCE STRING. NOTE ",8D
         _PRNT "THAT THE SOURCE STRING MUST NOT",8D
         _PRNT "BE A LITERAL BECAUSE THIS ROUTINE",8D
         _PRNT "ALTERS THE STRING PASSED TO IT.",8D8D
         _PRNT "IF LSTR HOLDS 'THIS IS A STRING.'",8D
         _PRNT "THEN SDEL LSTR;#1;#7 RETURNS: ",8D8D
         SDEL  #LSTR;#1;#7
         SPRN  #LSTR
         _PRNT " ",8D8D8D8D
         _WAIT
*
         _PRNT "THE SINS MACRO DOES THE ",8D
         _PRNT "OPPOSITE OF SDEL: IT INSERTS",8D
         _PRNT "A SUBSTRING INTO A PARENT STRING",8D
         _PRNT "AT THE GIVEN INDEX. NOTE THAT",8D
         _PRNT "WHILE THE PARENT STRING CANNOT BE ",8D
         _PRNT "A LITERAL, THE SUBSTRING ITSELF CAN BE.",8D8D
         _PRNT "THUS SINS LSTR;#1;#50;'THIS IS NOT'",8D
         _PRNT "RETURNS: ",8D
         SINS  #LSTR;#1;#50;"THIS IS NOT"
         SPRN  #LSTR
         _PRNT " ",8D8D8D8D
         _WAIT
*
         JMP   REENTRY
*
ASTR     STR   "A"
BSTR     STR   "B"
LSTR     STR   "THIS IS A STRING."
*
*``````````````````````````````*
*        BOTTOM INCLUDES       *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** BOTTOM INCLUDES
*
         PUT   MIN.LIB.REQUIRED
*
** INDIVIDUAL SUBROUTINE INCLUDES
*
** STRING SUBROUTINES
*
         PUT   MIN.SUB.PRNSTR
         PUT   MIN.SUB.STRCAT
         PUT   MIN.SUB.STRCOMP
*
** SUBSTRING SUBROUTINES
*
         PUT   MIN.SUB.SUBCOPY
         PUT   MIN.SUB.SUBDEL
         PUT   MIN.SUB.SUBINS
         PUT   MIN.SUB.SUBPOS
*
