home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib04.dsk / LFDR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  119 lines

  1. 1  REM  *******************************
  2. 2  REM  **   APPLE LINEFINDER        **
  3. 3  REM  **   BY SANDY MOSSBERG       **
  4. 4  REM  **  COPYRIGHT (C) 1981 BY    **
  5. 5  REM  **    MICRO-SPARC, INC.      **
  6. 6  REM  **    LINCOLN, MA 01773      **
  7. 7  REM  *******************************
  8. 150  REM  LINEFINDER EXEC FILE POKES ORIGINAL PGM POINTERS INTO SCRATCHPAD STORAGE    LOCATIONS 1912-1919 AND    1146-1149 ON TEXT PG 1
  9. 160  TEXT : CALL  -936: POKE  -16298,0: POKE  -16300,0: POKE  -16368,0: GOSUB 1240: GOSUB 1530: GOSUB 1030
  10. 170  HOME : PRINT "FIND MEMORY LOCATION OF PROGRAM LINE": PRINT "------------------------------------"
  11. 180  VTAB 4: CALL  -958: INPUT "LINENUMBER: ";I$:LI =  VAL(I$): IF I$ = ""  THEN 180
  12. 190  VTAB 9: HTAB 11: INVERSE : PRINT " READING PROGRAM ": FOR I = 1 TO 500: NEXT 
  13. 200  GOSUB 430: NORMAL 
  14. 210  IF FL = 1  THEN FL = 0:VT = 6: GOSUB 980: GOSUB 640
  15. 220  IF FL = 2  THEN FL = 0: GOTO 250
  16. 230  VTAB 21: CALL  -958: PRINT "ADDITIONAL LOCATION DATA (Y/N) ? ";: GET I$: PRINT I$: IF I$ = "Y"  THEN  HOME : PRINT "ADDITIONAL MEMORY LOCATION DATA": PRINT "-------------------------------":VT = 4: GOSUB 980: GOSUB 840: GOTO 250
  17. 240  IF I$ < >"N"  THEN 230
  18. 250  VTAB 24: CALL  -958: PRINT "ANOTHER LINE LOCATION (Y/N) ? ";: GET I$: IF I$ = "Y"  THEN 170
  19. 260  IF I$ < >"N"  THEN  HTAB 1: GOTO 250
  20. 270  POKE 103, PEEK(1912): POKE 104, PEEK(1913): POKE ( PEEK(103) + PEEK(104) *256 -1),0: POKE 175, PEEK(1146): POKE 176, PEEK(1147): REM  RESTORE BEG AND END OF PGM POINTERS
  21. 280  POKE 111, PEEK(1914): POKE 112, PEEK(1915): POKE 107, PEEK(1916): POKE 108, PEEK(1917): POKE 105, PEEK(1918): POKE 106, PEEK(1919): POKE 109, PEEK(1148): POKE 110, PEEK(1149): REM  RESET OTHER POINTERS
  22. 290  TEXT : CALL  -936: POKE  -16298,0: POKE  -16300,0: POKE  -16368,0
  23. 300  VTAB 12: HTAB 7: INVERSE : PRINT " END OF LINEFINDER PROGRAM ": NORMAL : VTAB 23: END 
  24. 400  REM  ----------
  25. 410  REM  LINEFINDER
  26. 420  REM  ----------
  27. 430 NL = START
  28. 440 BL = NL
  29. 450 NL =  PEEK(BL) + PEEK(BL +1) *256: REM  FIND LOC NEXT LINE
  30. 460  IF NL = 0  AND FIN = 0  THEN  RETURN : REM  DURING INIT,PREVENTS RETURN (& MESS<CTRL-A>AGE) VIA LINE 480
  31. 470  IF  PEEK(BL +2) + PEEK(BL +3) *256 = LI  AND FIN < >0  THEN FL = 1: RETURN : REM  LINE FOUND:START=BL,END=NL-1
  32. 480  IF NL = 0  THEN FL = 2: VTAB 9: HTAB 7: FLASH : PRINT " LINE #"LI" CANNOT BE LOCATED ": NORMAL : RETURN : REM  LINE NOT FOUND
  33. 490  IF FIN = 0  THEN TNL = TNL +1: REM  TNL=TOTAL NO. LINES IN PGM
  34. 500  GOTO 440
  35. 600  REM  -------------
  36. 610  REM  LINEFIND DATA
  37. 620  REM  -------------
  38. 630  REM  DATA WILL BE ACCURATE REGARDLESS OF WHETHER TARGET PGM IS RUN OR ONLY LOADED.
  39. 640  VTAB 8: PRINT "STARTING LOCATION:": VTAB 8: HTAB ( FN HT(BL)): PRINT BL:DEC = BL: GOSUB 730: VTAB 8: HTAB 32: PRINT HEX$
  40. 650  VTAB 11: PRINT "ENDING LOCATION:": VTAB 11: HTAB ( FN HT(NL)): PRINT NL -1:DEC = NL -1: GOSUB 730: VTAB 11: HTAB 32: PRINT HEX$: RETURN 
  41. 700  REM  ----------
  42. 710  REM  DEC TO HEX
  43. 720  REM  ----------
  44. 730 HD% = DEC/256:NBR = HD%: GOSUB 760:HB$ = HEX$
  45. 740 LD% =  FN MOD(DEC):NBR = LD%: GOSUB 760:LB$ = HEX$
  46. 750 HEX$ = "$" +HB$ +LB$: RETURN 
  47. 760 H% = NBR/16 +1:L% = NBR/16:L = L% *16:L% = NBR -L +1
  48. 770 HEX$ =  MID$ (H$,H%,1) + MID$ (H$,L%,1): RETURN 
  49. 800  REM  ---------------
  50. 810  REM  ADDITIONAL DATA
  51. 820  REM  ---------------
  52. 830  REM  VARIABLE DATA WILL BE ACCURATE ONLY IF TARGET PGM IS RUN.
  53. 840  VTAB 6: PRINT "PROGRAM START:";: HTAB ( FN HT(START)): PRINT START;:DEC = START: GOSUB 730: HTAB 32: PRINT HEX$
  54. 850  VTAB 8: PRINT "PROGRAM END:";: HTAB ( FN HT(FIN)): PRINT FIN;:DEC = FIN: GOSUB 730: HTAB 32: PRINT HEX$
  55. 860  VTAB 10: PRINT "HIMEM:";: HTAB ( FN HT(HMEM)): PRINT HMEM;:DEC = HMEM: GOSUB 730: HTAB 32: PRINT HEX$
  56. 870  VTAB 12: PRINT "STRING STORAGE START:";: HTAB ( FN HT(SRNG)): PRINT SRNG;:DEC = SRNG: GOSUB 730: HTAB 32: PRINT HEX$
  57. 880  VTAB 14: PRINT "FREE SPACE START:";: HTAB ( FN HT(FSP)): PRINT FSP;:DEC = FSP: GOSUB 730: HTAB 32: PRINT HEX$
  58. 890  VTAB 16: PRINT "ARRAY SPACE START:";: HTAB ( FN HT(ARRAY)): PRINT ARRAY;:DEC = ARRAY: GOSUB 730: HTAB 32: PRINT HEX$
  59. 900  VTAB 18: PRINT "SIMPLE VARIABLE SPACE:";: VTAB 19: HTAB 7: PRINT "START (=LOMEM):";: HTAB ( FN HT(SVAR)): PRINT SVAR;:DEC = SVAR: GOSUB 730: HTAB 32: PRINT HEX$
  60. 910  VTAB 21: PRINT "TOTAL # PGM LINES:";: HTAB ( FN HT(TNL)): PRINT TNL: RETURN 
  61. 950  REM  --------------
  62. 960  REM  DEC/HEX HEADER
  63. 970  REM  --------------
  64. 980  VTAB (VT): HTAB 24: CALL  -958: INVERSE : PRINT "DEC";: HTAB 33: PRINT "HEX": NORMAL : RETURN 
  65. 1000  REM  --------------
  66. 1010  REM  INITIALIZATION
  67. 1020  REM  --------------
  68. 1030  VTAB 9: HTAB 11: INVERSE : PRINT " INITIALIZING ": NORMAL 
  69. 1040  DEF  FN HT(X) = 28 - LEN( STR$(X))
  70. 1050  DEF  FN MOD(X) = X - INT(X/256) *256
  71. 1060 H$ = "0123456789ABCDEF"
  72. 1070 START =  PEEK(1912) + PEEK(1913) *256: REM  PGM START
  73. 1080 LI = 0: GOSUB 430:FIN = BL +1: REM  CALC PGM END & TNL
  74. 1090 SRNG =  PEEK(1914) + PEEK(1915) *256: REM  START STRING STORAGE
  75. 1100 ARRAY =  PEEK(1916) + PEEK(1917) *256: REM  START ARRAY SPACE
  76. 1110 SVAR =  PEEK(1918) + PEEK(1919) *256: REM  START SIMPLE VARIABLE SPACE
  77. 1120 FSP =  PEEK(1148) + PEEK(1149) *256: REM  FREE SPACE
  78. 1130 HMEM =  PEEK(115) + PEEK(116) *256: RETURN : REM  HIMEM
  79. 1200  REM  ----------
  80. 1210  REM  TITLE PAGE
  81. 1220  REM  ----------
  82. 1230  REM  SF APPLE CORE FORMAT
  83. 1240 SS$ = "                     ": VTAB 4: INVERSE : REM  SS$=21 SPACES
  84. 1250 TT$ = SS$: GOSUB 1330: GOSUB 1330:TT$ = "      LINE FINDER    ": GOSUB 1330:TT$ = SS$: GOSUB 1330: GOSUB 1330:TT$ = "  BY SANDY MOSSBERG  ": GOSUB 1330:TT$ = SS$: GOSUB 1330: GOSUB 1330: NORMAL 
  85. 1260  VTAB 16: PRINT "LINEFINDER LOCATES THE RAM ADDRESSES OF ANY LINE IN A PROGRAM.  OTHER DATA ALSO ARE DISPLAYED.  FIRST RUN YOUR PROGRAM  AND THEN EXEC LINEFINDER."
  86. 1270  GOSUB 1380: RETURN 
  87. 1300  REM  ------------
  88. 1310  REM  PRINT CENTER
  89. 1320  REM  ------------
  90. 1330 WIDTH = 20 -( LEN(TT$)/2): IF WIDTH < = 0  THEN  PRINT TT$: RETURN 
  91. 1340  HTAB WIDTH: PRINT TT$: RETURN 
  92. 1350  REM  ------------
  93. 1360  REM  CONTINUE/END
  94. 1370  REM  ------------
  95. 1380  VTAB 23: HTAB 12: PRINT "[ESC] TO END"
  96. 1390  VTAB 24: PRINT  TAB( 8);"[SPACE] TO CONTINUE ";
  97. 1400  PRINT "[ ]";: HTAB 29: GET ZZ$: IF ZZ$ =  CHR$(27)  OR ZZ$ =  CHR$(3)  THEN 270
  98. 1410  IF ZZ$ =  CHR$(32)  THEN  RETURN 
  99. 1420  CALL  -868: CALL  -1008: GOTO 1400
  100. 1500  REM  ------------
  101. 1510  REM  INSTRUCTIONS
  102. 1520  REM  ------------
  103. 1530  HOME : PRINT "INSTRUCTIONS": PRINT "------------"
  104. 1540  VTAB 5: CALL  -958: PRINT "DO YOU WANT INSTRUCTIONS (Y/N) ? ";: GET I$: PRINT I$: IF I$ = "Y"  THEN  POKE 34,2: VTAB 4: CALL  -958: GOTO 1570
  105. 1550  IF I$ < >"N"  THEN 1540
  106. 1560  RETURN 
  107. 1570  HTAB 1: POKE 32,2: PRINT "1.THE ";: INVERSE : PRINT "LINEFINDER";: NORMAL : PRINT " UTILITY WILL LOCATE": PRINT "THE STARTING AND ENDING RAM MEMORY": PRINT "ADDRESSES OF THE LINE THAT IS INPUT.": POKE 32,0
  108. 1580  VTAB 8: HTAB 1: POKE 32,2: PRINT "2.OTHER MEMORY LOCATIONS THAT WILL BE": PRINT "PROVIDED INCLUDE: START OF PROGRAM,"
  109. 1590  PRINT "END OF PROGRAM, START OF ARRAY SPACE,": PRINT "START OF STRING STORAGE SPACE, START"
  110. 1600  PRINT "OF SIMPLE VARIABLE SPACE, START OF": PRINT "FREE SPACE, HIMEM, AND TOTAL NUMBER": PRINT "OF PROGRAM LINES.": POKE 32,0
  111. 1610  VTAB 16: HTAB 1: PRINT "3.TO USE THIS UTILITY:": HTAB 4: PRINT "A.";: INVERSE : PRINT "RUN";: NORMAL : PRINT " YOUR PROGRAM (SEE NEXT PAGE)."
  112. 1620  HTAB 4: PRINT "B.'EXEC' ";: INVERSE : PRINT "LINEFINDER";: NORMAL : PRINT " INTO RAM (YOUR": HTAB 6: PRINT "PROGRAM WILL REMAIN INTACT)."
  113. 1630  GOSUB 1380
  114. 1640  HOME 
  115. 1650  VTAB 4: PRINT "IF THE PROGRAM TO BE ANALYZED IS ";: INVERSE : PRINT "LOADED": NORMAL : PRINT "BUT NOT RUN, VALID ADDRESSES ARE GOTTEN": PRINT "FOR THE FOLLOWING DATA:": PRINT "  (1) LINENUMBER": PRINT "  (2) HIMEM"
  116. 1660  PRINT "  (3) LOMEM": PRINT "  (4) TOTAL # PROGRAM LINES": PRINT : PRINT "SINCE VARIABLE SPACE IS CREATED ONLY": PRINT "AFTER A PROGRAM HAS BEEN ";: INVERSE : PRINT "RUN";: NORMAL : PRINT ", STARTING"
  117. 1670  PRINT "ADDRESSES FOR VARIABLE SPACE AND FREE": PRINT "SPACE WILL NOT BE ACCURATE UNLESS YOUR": PRINT "PROGRAM HAS BEEN RUN BEFORE USING THE": PRINT "LINEFINDER UTILITY.": PRINT 
  118. 1680  PRINT "OF COURSE, IF DATA ON VARIABLE AND FREE": PRINT "SPACE ARE NOT REQUIRED, SIMPLY LOAD YOUR";: PRINT "PROGRAM AND EXEC LINEFINDER!"
  119. 1690  GOSUB 1380: HOME : POKE 34,0: RETURN