home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib38b.dsk / UNC.bas < prev    next >
BASIC Source File  |  2023-02-26  |  3KB  |  44 lines

  1. 10  REM  *************************
  2. 20  REM  * UNC                   *
  3. 30  REM  * By Garth A. Perry     *
  4. 40  REM  * Copyright(c) 1989     *
  5. 50  REM  * MindCraft Publ. Corp. *
  6. 60  REM  * Concord, Ma 01742     *
  7. 70  REM  *************************
  8. 80  REM 
  9. 90  PRINT  CHR$(21)
  10. 100 DIG$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ":MB% =  LEN(DIG$): REM  INIT POSSIBLE DIGITS & MAX BASE
  11. 110  GOSUB 360: REM  DIPLAY LOGO
  12. 120  PRINT "Do you want instructions?N"; CHR$(8);: GET C$: PRINT C$: IF C$ =  CHR$(13)  THEN C$ = "N"
  13. 130  IF C$ < >"Y"  AND C$ < >"N"  THEN  CALL  -1059: GOTO 120
  14. 140  IF C$ = "Y"  THEN  HOME : GOSUB 360: GOSUB 390
  15. 150  HOME 
  16. 160  INPUT "Number To Be Changed?";NB$:F$ =  LEFT$(NB$,1): ON F$ = "" GOTO 220: ON NB$ = "#" GOTO 150: ON NB$ = "$" GOTO 150: ON (F$ = "$"  OR F$ = "#") GOTO 170: ON F$ >"Z" GOTO 150: ON F$ <"0" GOTO 150: ON (F$ >"9"  AND F$ <"A") GOTO 150
  17. 170  IF  LEFT$(NB$,1) = "#"  THEN NB$ =  RIGHT$(NB$, LEN(NB$) -1):OB% = 10:NB% = 16: GOTO 210
  18. 180  IF  LEFT$(NB$,1) = "$"  THEN NB$ =  RIGHT$(NB$, LEN(NB$) -1):OB% = 16:NB% = 10: GOTO 210: REM  BASE 16 TO BASE 10 ASSUMED
  19. 190  INPUT "ORIG BASE ?";OB%: IF OB% <2  OR OB% >MB%  THEN : CALL  -1059: PRINT "BASE INVALID": NORMAL : GOTO 190
  20. 200  INPUT "NEW BASE ?";NB%: IF NB% <2  OR NB% >MB%  THEN : CALL  -1059: PRINT "BASE INVALID": NORMAL : GOTO 200
  21. 210  GOSUB 250: GOTO 160: REM  CONVERT NUMBER
  22. 220  TEXT : HOME : GOSUB 360: VTAB 10: PRINT "DO YOU WANT TO QUIT?";: GET ZZ$: IF ZZ$ = "Y"  OR ZZ$ = "y"  THEN  TEXT : HOME : END 
  23. 230  IF ZZ$ = "N"  OR ZZ$ = "n"  THEN  HOME : GOSUB 370: GOTO 160
  24. 240  GOTO 220
  25. 250  REM  *****CONVERT NUMBER*****
  26. 260 DEC = 0:B = 1:LN% =  LEN(NB$): FOR I = LN% TO 1  STEP  -1: FOR J = 1 TO OB%: REM  LOCATE ORDINAL VALUE OF ORIG NMBR
  27. 270  IF  MID$ (NB$,I,1) < > MID$ (DIG$,J,1)  THEN 290
  28. 280 D% = J:J = 99
  29. 290  NEXT : IF J <90  THEN I =  -1: GOTO 310: REM  INVALID CHARACTER
  30. 300 DEC = DEC +(D% -1) *B:B = B *OB%: REM  ACCUMULATE BASE TEN NMBR
  31. 310  NEXT : IF I <0  THEN 350: REM  ERROR
  32. 320 NN$ = "": REM  CONVERTED NUMBER
  33. 330 Q =  INT(DEC/NB%):NN$ =  MID$ (DIG$,DEC -Q *NB% +1,1) +NN$:DEC = Q: IF Q >0  THEN 330
  34. 340  PRINT NB$;" ";: INVERSE : PRINT "BASE ";OB%;: NORMAL : PRINT " IS ";NN$;" ";: INVERSE : PRINT "BASE ";NB%: NORMAL : PRINT : RETURN 
  35. 350  CALL  -1059: PRINT ">>INVALID DIGIT(S), MUST BE FOLLOWING<< ";: INVERSE : FOR I = 1 TO OB%: PRINT  MID$ (DIG$,I,1);: NEXT : NORMAL : PRINT : RETURN 
  36. 360  REM  *****DISPLAY LOGO*****
  37. 370  TEXT : HOME : HTAB 9: PRINT "UNIVERSAL NUMBER CONVERTER": HTAB 14: PRINT "BY GARTH A. PERRY": HTAB 14: PRINT "COPYRIGHT(C) 1989": HTAB 12: PRINT "MINDCRAFT PUBL. CORP."
  38. 380  NORMAL : POKE 34,5: PRINT : RETURN 
  39. 390  REM  *****DISPLAY INSTRUCTIONS*****
  40. 400  HOME : PRINT "This program can be used to convert a": PRINT : PRINT "number from any base in the range of two": PRINT "through 36 to its equivalent value in a": PRINT : PRINT "new base of the same range. Enter the": PRINT 
  41. 410  PRINT "number and its base then the new base.": PRINT : PRINT "Any blank number will stop the program."
  42. 420  PRINT : INVERSE : HTAB (6): PRINT "PRESS RETURN TO CONTINUE";: NORMAL : GET C$: HOME 
  43. 430  PRINT "If the 1st chacacter is '#', decimal to": PRINT : PRINT "hexadecimal is assumed; if it is a '$'": PRINT : PRINT "hex to decimal is assumed.": PRINT : INVERSE : HTAB (6): PRINT "PRESS RETURN TO CONTINUE";: NORMAL : GET C$: HOME 
  44. 440  RETURN