REM PROGRAM POSTER II 1.2 REM PROGRAMMER D. ALLEN REM CREATED MAR 22, 1986 REM UPDATED JAN 16, 2001 REM COPYRIGHT (C) 1986 ' ' THE PURPOSE OF THIS PROGRAM IS TO PRINT A SENTENCE. THE USER ' TYPES IN A SENTENCE. THIS PROGRAM WILL PRINT THAT SENTENCE. ' HOWEVER, EACH WORD WILL BE SPACED, AND CENTERED, AND EVERY ' CHARACTER WILL BE A 5 BY 5 MATRIX. ' ' VARIABLE TABLE: ' A,A$ - ONE CHARACTER INPUT VARIABLES ' BEG.PART - BEGINNING CHARACTER OF CURRENT PART ' CENTER - FLAG, 1=CENTER CHARACTER ' CH - CURRENT PTR TO CHAR$ ' CH$ - CURRENT CHARACTER ' CH$(,) - CHARACTER TABLE ' CH(,) - CHARACTER BIT TABLE ' CHAR$ - CHARACTER TRANSLATION TABLE ' D,D!,D$ - DUMMY VARIABLES ' END.PART - ENDING CHARACTER OF CURRENT PART ' ER - ERROR CODE ' ERP - FLAG, ERROR PROMPT ' FNCN$(,,) - FUNC, CENTER STRING X$, BY N, WITH Y$ ' FOUND - FLAG, 0=FALSE,-1=TRUE ' I,J - LOOP INDEXES ' K - LOOP INDEX ' MC$ - MESSAGE OR CHARACTER PRINTED ' MESS$ - MESSAGE ' PART - CURRENT CHARACTER OF PART$ ' PART$ - PRINTING PART OF MESSAGE ' PART$() - PART TRANSLATION TABLE ' QUIT - FLAG, EXIT PROGRAM ' RPT.COL - REPORT COLUMN WIDTH ' RPT.PART - MAXIMUM # OF REPORT CHARACTERS ' ' DECLARATIONS: ' DEFINT A-Z DEF FNCN$(X$,N,Y$)=STRING$(FIX((N-LEN(X$))/2),Y$)+X$+STRING$(FIX((N-LEN(X$))/2),Y$)+ STRING$(((N-LEN(X$)) MOD 2),Y$) DIM CH$(48,5) DIM PART$(20,5) ' GOTO INITIALIZATION REM REM UTILITY ROUTINES SECTION. REM ' CLS.: ' ' THE PURPOSE OF THIS ROUTINE IS TO PRINT A CLEAR SCREEN AND ' HOME THE CURSOR. ' : CLS RETURN ' INKEY.CASE: ' ' THE PURPOSE OF THIS ROUTINE IS TO SET A$ EQUAL TO THE NEXT ' LINE OF INPUT. ALL LOWERCASE IS CONVERTED TO UPPERCASE. ' DO A$=INKEY$ LOOP UNTIL A$<>"" D=ASC(A$) : IF D>96 AND D<123 THEN A$=CHR$(D-32) RETURN ' INPUT.CASE: ' ' THE PURPOSE OF THIS ROUTINE IS TO READ A LINE OF INPUT FROM ' A$, CONVERTING IT FROM LOWER TO UPPERCASE. ' LINE INPUT A$ FOR A = 1 TO LEN(A$) D=ASC(MID$(A$,A,1)) IF D>96 AND D<123 THEN MID$(A$,A,1)=CHR$(D-32) NEXT A RETURN ' PAUSE: ' ' THE PURPOSE OF THIS ROUTINE IS TO WAIT FOR THE USER TO ' HIT ANY KEY. ' PRINT PRINT "Press anything to continue..."; GOSUB INKEY.CASE RETURN ' MESSAGES: ' ' THE PURPOSE OF THIS ROUTINE IS TO HANDLE ALL NON-FATAL ' ERRORS. ENTRY: GOSUB MESSAGES\ ' D$="" PRINT "** ";D$ RETURN ' ERRORS: ' ' THE PURPOSE OF THIS ROUTINE IS TO HANDLE ALL FATAL ' ERRORS. ENTRY: GOTO ERRORS\ ' D$="" PRINT "** ";D$ RETURN ' ERROR.HANDLER: ' ' THE PURPOSE OF THIS ROUTINE IS HANDLE ALL PROGRAM, AND ' SYSTEM ERRORS. ENTRY: ON ERROR GOTO ERROR.HANDLER\ ' D$="" IF ERR<50 THEN D$="Syntax Error" IF ERR=53 THEN D$="File not Found" IF ERR=64 THEN D$="Bad File Name" IF D$="" THEN D$="Disk Error" PRINT "** ";D$;", ERR#";ERR IF ERR <= 50 THEN D!=ERL IF D! <> 65535 THEN PRINT "** Error Line Number";D! END IF IF ERP THEN PRINT "Press 'C' to continue, anything to quit." D$=INPUT$(1) IF D$<>"C" AND D$<>"c" THEN STOP END IF RESUME RESUMED RESUMED: RETURN REM REM UTILITY ROUTINES EXIT. REM ' INITIALIZATION: ' ' THE PURPOSE OF THIS ROUTINE IS TO INITIALIZE PROGRAM VARIABLES ' AND TABLES. ENTRY: THE SYSTEM. ' ON ERROR GOTO ERROR.HANDLER CENTER=1 CHAR$="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.!*-?,'/$:; " ERP=-1 MC$="CHAR" MESS$=" " QUIT=0 RPT.COL=80 ' ' INITIALIZE TABLES. ' I=1 WHILE I <= 48 FOR J = 1 TO 5 FOR K = I TO I+7 READ CH$(K,J) NEXT K NEXT J I=I+8 WEND DATA " AAA ","BBBB "," CCC ","DDDD ","EEEEE","FFFFF"," GGG ","H H" DATA "A A","B B","C C","D D","E ","F ","G ","H H" DATA "AAAAA","BBBB ","C ","D D","EEE ","FFF ","G GG","HHHHH" DATA "A A","B B","C C","D D","E ","F ","G G","H H" DATA "A A","BBBB "," CCC ","DDDD ","EEEEE","F "," GGG ","H H" ' DATA "IIIII","JJJJJ","K K","L ","M M","N N"," OOO ","PPPP " DATA " I "," J ","K K ","L ","MM MM","NN N","O O","P P" DATA " I "," J ","KKK ","L ","M M M","N N N","O O","PPPP " DATA " I ","J J ","K K ","L ","M M","N NN","O O","P " DATA "IIIII"," J ","K K","LLLLL","M M","N N"," OOO ","P " ' DATA " QQQ ","RRRR "," SSSS","TTTTT","U U","V V","W W","X X" DATA "Q Q","R R","S "," T ","U U","V V","W W"," X X " DATA "Q Q","RRRR "," SSS "," T ","U U","V V","W W W"," X " DATA "Q Q Q","R R "," S"," T ","U U"," V V ","W W W"," X X " DATA " QQQ ","R R","SSSS "," T "," UUU "," V "," W W ","X X" ' DATA "Y Y","ZZZZZ"," 000 "," 1 "," 222 "," 333 ","4 4 ","55555" DATA " Y Y "," Z","00 0"," 11 ","2 2","3 3","4 4 ","5 " DATA " Y "," ZZZ ","0 0 0"," 1 "," 22 "," 33 ","44444"," 555" DATA " Y ","Z ","0 00"," 1 ","22 ","3 3"," 4 ","5 5" DATA " Y ","ZZZZZ"," 000 "," 111 ","22222"," 333 "," 4 "," 555 " ' DATA " 6 ","77777"," 888 "," 999 "," "," ! ","* *"," " DATA " 6 "," 7 ","8 8","9 9"," "," !!! "," * * "," " DATA "66 6 "," 7 "," 888 "," 9999"," .. "," ! ","*****","-----" DATA "6 6"," 7 ","8 8"," 9"," .. "," * "," * * "," " DATA " 666 "," 7 "," 888 "," 99 "," "," * ","* *"," " ' DATA " ??? "," "," ' "," /"," $$$$"," "," "," " DATA "? ?"," "," ' "," / ","$ $ "," "," "," " DATA " ? "," "," "," / "," $$$ "," : "," ;; "," " DATA " ? "," , "," "," / "," $ $"," : "," ; "," " DATA " * "," , "," ","/ ","$$$$ "," "," "," " REM REM MAIN ROUTINE REM ' ' THE PURPOSE OF THIS ROUTINE IS TO CONTROL THE PROGRAM. IT ' WILL READ, VERIFY, AND PROCESS A COMMAND FROM THE USER. IT ' WILL THEN ASK FOR ANOTHER COMMAND. ENTRY: INITIALIZATION\ ' DO D$="No" : IF CENTER=1 THEN D$="Yes" GOSUB CLS. : PRINT PRINT PRINT "POSTER II 1.2" PRINT "(C) Copyright 1986-2001 by Dennis Allen" PRINT "Portions (C) Copyright" PRINT "Microsoft Corp. 1982-2001" PRINT "All Rights Reserved" PRINT PRINT " <1> Centered = ";D$ PRINT " <2> Width =";RPT.COL PRINT " <3> Character = ";MC$ PRINT " <4> Message = ";MESS$ PRINT PRINT " <5> Print Message" PRINT " <6> Exit Program" PRINT PRINT " Press key corresponding to function..." PRINT DO GOSUB INKEY.CASE : A=VAL(A$) LOOP UNTIL A<>0 IF A=6 THEN QUIT=-1 ON A GOSUB GET.CENTER,GET.WIDTH,GET.CHAR, GET.MESSAGE,PRINT.MESSAGE LOOP UNTIL QUIT SYSTEM REM REM MAIN ROUTINES SECTION. REM ' GET.CENTER: ' ' THE PURPOSE OF THIS ROUTINE IS TO TOGGLE THE SWITCH TO CENTER ' TEXT. ENTRY & EXIT: THE MAIN ROUTINE. ' IF CENTER THEN CENTER=0 ELSE CENTER=1 RETURN ' GET.WIDTH: ' ' THE PURPOSE OF THIS ROUTINE IS TO TOGGLE THE COLUMN WIDTH. ' ENTRY & EXIT: THE MAIN ROUTINE. ' IF RPT.COL=80 THEN RPT.COL=132 ELSE RPT.COL=80 ' WIDTH LPRINT RPT.COL RETURN ' GET.CHAR: ' ' THE PURPOSE OF THIS ROUTINE IS TO PROMPT THE USER FOR THE ' PRINTABLE CHARACTERS OF EACH MESSAGE CHARACTER. ENTRY & ' EXIT: THE MAIN ROUTINE. ' PRINT PRINT "What is the printable set of characters (CHAR default) : "; GOSUB INPUT.CASE : IF A$="" THEN A$="CHAR" MC$=A$ : IF MC$<>"CHAR" THEN MC$=LEFT$(MC$,1) RETURN ' GET.MESSAGE: ' ' THE PURPOSE OF THIS ROUTINE IS TO PROMPT THE USER FOR THE ' MESSAGE TO PRINT. ENTRY & EXIT: THE MAIN ROUTINE. ' PRINT PRINT "What is the message : "; GOSUB INPUT.CASE : MESS$=A$+" " RETURN ' PRINT.MESSAGE: ' ' THE PURPOSE OF THIS ROUTINE IS TO PRINT THE CURRENT MESSAGE ' USING THE CURRENT CHARACTER. GROUPS OF CHARACTERS ARE ALWAYS ' KEPT TOGETHER. ENTRY & EXIT: THE MAIN ROUTINE. ' OPEN "LPT1.DOS" FOR OUTPUT AS #1 IF RPT.COL=80 THEN RPT.PART=11 ELSE RPT.PART=18 BEG.PART=1 : END.PART=RPT.PART IF END.PART>LEN(MESS$) THEN END.PART=LEN(MESS$) WHILE BEG.PART<=LEN(MESS$) D=END.PART WHILE D>BEG.PART AND MID$(MESS$,D,1)<>" " D=D-1 WEND IF D>BEG.PART THEN END.PART=D D=END.PART WHILE D>BEG.PART AND MID$(MESS$,D,1)=" " D=D-1 WEND PART$=MID$(MESS$,BEG.PART,D-BEG.PART+1) IF CENTER THEN PART$=FNCN$(PART$,RPT.PART," ") GOSUB PRINT.PART BEG.PART=END.PART+1 : END.PART=BEG.PART+RPT.PART-1 IF END.PART>LEN(MESS$) THEN END.PART=LEN(MESS$) WEND PRINT #1, " " : PRINT #1, " " CLOSE #1 RETURN REM REM PRINT MESSAGE ROUTINES SECTION. REM ' PRINT.PART: ' ' THE PURPOSE OF THIS ROUTINE IS TO PRINT THAT PORTION OF THE ' MESSAGE THAT WILL FIT ON THE CURRENT LINE. ENTRY & EXIT: ' PRINT.MESSAGE\ ' FOR PART = 1 TO LEN(PART$) CH$=MID$(PART$,PART,1) CH=1 : FOUND=0 WHILE CH"CHAR" THEN FOR I = 1 TO LEN(D$) IF MID$(D$,I,1)<>" " THEN MID$(D$,I,1)=MC$ NEXT I END IF PART$(PART,K)=D$ NEXT K NEXT PART FOR K = 1 TO 5 FOR PART = 1 TO LEN(PART$) PRINT #1, PART$(PART,K);" "; NEXT PART PRINT #1, " " NEXT K PRINT #1, " " : PRINT #1, " " RETURN REM REM PRINT MESSAGE ROUTINES EXIT. REM REM MAIN ROUTINES EXIT. REM END