'===========================================================================
' Subject: QUICK TEXT EDITOR/(DE)CODER        Date: 02-02-98 (23:33)       
'  Author: Michael G. Stewart                 Code: QB, QBasic, PDS        
'  Origin: mikegs@juno.com                  Packet: TEXT.ABC
'===========================================================================
DECLARE SUB Decode (fl!)
DECLARE SUB codeit ()
DECLARE FUNCTION encode$ (text$)
DECLARE FUNCTION uncode$ (text$)
DECLARE FUNCTION SINPUT$ (instring$, old$)
DECLARE SUB KPRINT (text$, col!, hicol!, bacol!)
CLS
COLOR 15, 4
PRINT SPACE$(80)
LOCATE 1
PRINT " QuikTEED v1.0 - Quick Text Editor/Encoder/Decoder "; : COLOR 14: PRINT "by Mike Stewart"
VIEW PRINT 2 TO 25
main:
COLOR 15, 0
CLS
PRINT "Options:"
KPRINT " ^Edit File", 15, 2, 0
KPRINT " ^Decode File", 15, 2, 0
KPRINT " En^Code File", 15, 2, 0
KPRINT " ^Quit", 15, 2, 0
COLOR 15, 0
INPUT "Your Choice: (E D C Q) ", choice$
SELECT CASE UCASE$(choice$)
CASE "E"
 CHDIR "C:\"
 file$ = SINPUT$("File Name: (CurDir=C:\) ", file$)
 PRINT "Loading MS-DOS Editor...";
 com$ = "edit " + file$
 SHELL com$
 PRINT "Done!"
 PRINT "Press Any Key!"
 WHILE INKEY$ = "": WEND
 GOTO main
CASE "D"
 CHDIR "C:\"
 file$ = SINPUT$("File Name: (CurDir=C:\) ", file$)
 INPUT "Password: ", pass1$
 PRINT "Preparing to Decode File...";
 ON ERROR GOTO oops
 OPEN file$ FOR INPUT AS #1
 ON ERROR GOTO 0
 LINE INPUT #1, in$
 IF LEFT$(in$, 8) <> "QuikTEED" THEN
  CLOSE #1
  COLOR 4, 0
  BEEP
  PRINT : PRINT "Error: File Not in QuikTEED Format, or Corrupt!"
  COLOR 15, 0
  PRINT "Press Any Key To Continue"
  WHILE INKEY$ = "": WEND
  GOTO main
 END IF
 fl = VAL(MID$(in$, 9, 5))
 ed$ = MID$(in$, 14, 10)
 et$ = MID$(in$, 24, 8)
 pass$ = uncode$(MID$(in$, 32, 10))
 IF LEFT$(pass1$, 10) <> RTRIM$(pass$) THEN
  CLOSE #1
  COLOR 4, 0
  BEEP
  PRINT : PRINT "Error: Incorrect Password!"
  COLOR 15, 0
  PRINT "Press Any Key To Continue"
  WHILE INKEY$ = "": WEND
  GOTO main
 END IF
 PRINT "Done!"
 PRINT "Length of File:"; fl; " Encoded Date: "; ed$; "  Encoded Time: "; et$
 PRINT "Decoding File...";
 Decode fl
 PRINT "Done!"
 PRINT "Writing File...";
 OPEN file$ FOR OUTPUT AS #2
 OPEN "Temp.tmp" FOR INPUT AS #1
 DO WHILE NOT EOF(1)
  LINE INPUT #1, in$
  PRINT #2, in$
 LOOP
 CLOSE #1
 CLOSE #2
 KILL "temp.tmp"
 PRINT "Done!"
 PRINT "Press Any Key!"
 WHILE INKEY$ = "": WEND
 GOTO main
CASE "C"
 CHDIR "C:\"
 file$ = SINPUT$("File Name: (CurDir=C:\) ", file$)
 INPUT "Password to Use: ", pass$
 PRINT "Coding File...";
 ON ERROR GOTO oops
 OPEN file$ FOR INPUT AS #1
 ON ERROR GOTO 0
 OPEN "temp.tmp" FOR OUTPUT AS #2
 codeit
 CLOSE #1
 CLOSE #2
 PRINT "Done!"
 PRINT "Writing File...";
 OPEN file$ FOR OUTPUT AS #2
 OPEN "temp.tmp" FOR INPUT AS #1
 flen$ = LEFT$(RTRIM$(LTRIM$(STR$(fl))) + SPACE$(5), 5)
 pass$ = encode$(LEFT$(pass$ + SPACE$(10), 10))
 head$ = "QuikTEED" + flen$ + DATE$ + TIME$ + pass$
 PRINT #2, head$
 DO WHILE NOT EOF(1)
  LINE INPUT #1, in$
  PRINT #2, in$
 LOOP
 CLOSE #1
 CLOSE #2
 KILL "temp.tmp"
 PRINT "Done!"
 PRINT "Press Any Key To Continue"
 WHILE INKEY$ = "": WEND
 GOTO main
CASE "Q"
 END
END SELECT
BEEP
COLOR 4, 0
PRINT "Error: Invaled Command!"
COLOR 15, 0
PRINT "Press Any Key To Continue!"
WHILE INKEY$ = "": WEND
GOTO main





oops:
BEEP
COLOR 4, 0
PRINT "Error: File Not Found!"
COLOR 15, 0
PRINT "Press Any Key To Continue"
WHILE INKEY$ = "": WEND
RUN

SUB codeit
SHARED fl
fl = 0
DO WHILE NOT EOF(1)
 LINE INPUT #1, in$
 cc$ = cc$ + encode$(in$) + CHR$(27)
 DO WHILE LEN(cc$) > 80
  IF LEN(cc$) > 80 THEN
   PRINT #2, LEFT$(cc$, 80)
   cc$ = MID$(cc$, 81)
   fl = fl + 80
  END IF
 LOOP
LOOP
fl = fl + LEN(cc$)
PRINT #2, cc$
cc$ = ""
END SUB

SUB Decode (fl)
OPEN "temp.tmp" FOR OUTPUT AS #2
FOR a = 1 TO fl STEP 80
 pct = a / fl
 IF pct MOD 10 = 0 THEN PRINT ".";
 LINE INPUT #1, in$
 FOR b% = 1 TO LEN(in$)
  s$ = MID$(in$, b%, 1)
  IF s$ = CHR$(27) THEN
   o$ = uncode$(cc$)
   PRINT #2, o$
   cc$ = ""
  ELSE
   cc$ = cc$ + s$
  END IF
 NEXT b%
NEXT a
CLOSE #2
CLOSE #1
END SUB

FUNCTION encode$ (text$)
FOR a% = 1 TO LEN(text$)
 s = ASC(MID$(text$, a%, 1))
 IF s > 250 THEN s = s - 219 ELSE s = s + 5
 cc$ = cc$ + CHR$(s)
NEXT a%
encode$ = cc$
END FUNCTION

SUB KPRINT (text$, col, hicol, bacol)
FOR a% = 1 TO LEN(text$)
 s$ = MID$(text$, a%, 1)
 IF s$ = "^" THEN
  hi = 1
 ELSE
  IF hi = 1 THEN
   hi = 0
   COLOR hicol, bacol: PRINT s$;
  ELSE
   COLOR col, bacol: PRINT s$;
  END IF
 END IF
NEXT a%
PRINT
END SUB

FUNCTION SINPUT$ (instring$, old$)
row = CSRLIN
PRINT instring$; old$
LOCATE row, LEN(instring$) + 1
INPUT "", return$
IF return$ = "" THEN return$ = old$
SINPUT$ = return$
END FUNCTION

FUNCTION uncode$ (text$)
FOR a% = 1 TO LEN(text$)
 s = ASC(MID$(text$, a%, 1))
 IF s < 38 THEN s = s + 219 ELSE s = s - 5
 IF s = 256 THEN s = 32
 done$ = done$ + CHR$(s)
NEXT a%
uncode$ = done$
END FUNCTION
