REM PROGRAM POSTER 1.2 REM PROGRAMMER D. ALLEN REM CREATED MARCH 21, 1986 REM UPDATED JAN 16, 2001 REM COPYRIGHT (C) 1986 ' ' THE PURPOSE OF THIS PROGRAM IS TO PRINT A BANNER POSTER OF ' A SPECIFIED SETENCE. THIS BANNER WILL BE PRINTED LENGTHWISE. ' THE CHARACTER SIZE CAN BE ADJUSTED TO FIT THE NEED. ' ' VARIABLE TABLE: ' A,A$ - ONE CHARACTER INPUT VARIABLES ' CENTER - FLAG, 1=CENTER CHARACTER ' CH - LENGTH OF CH$() ' CH. - CURRENT PTR OF CH$() ' CH$ - CURRENT CHARACTER ' CH$() - CHARACTER TABLE ' CH(,) - CHARACTER BIT TABLE ' D,D!,D$ - DUMMY VARIABLES ' ER - ERROR CODE ' ERP - FLAG, ERROR PROMPT ' FOUND - FLAG, 0=FALSE,-1=TRUE ' I,J - LOOP INDEXES ' J() - TEMPORARY BIT TABLE ' K - LOOP INDEX ' MC$ - MESSAGE OR CHARACTER PRINTED ' MESS$ - MESSAGE ' QUIT - FLAG, EXIT PROGRAM ' U - LOOP INDEX ' X - # HORIZONTAL LINES ' X$ - CHARACTER(S) TO PRINT ' X. - LOOP INDEX ' Y - # VERTICAL LINES ' ' DECLARATIONS: ' DEFINT A-Z DIM CH$(50),CH(50,7) DIM J(10) ' 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$="" IF ER=1 THEN D$="Invalid Command, Retype" IF ER=2 THEN D$="Bad Value, Retype" IF ER=3 THEN D$="Enter Miles Driven, or Odometer" IF ER=4 THEN D$="Bad Date, Enter 99/99/99 Format" PRINT "** ";D$ RETURN ' ERRORS: ' ' THE PURPOSE OF THIS ROUTINE IS TO HANDLE ALL FATAL ' ERRORS. ENTRY: GOTO ERRORS\ ' D$="" IF ER=1 THEN D$="Error, Bad DIF File" IF ER=2 THEN D$="Error, MILEAGE Table Full" 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 ERP=-1 MC$="CHAR" MESS$=" " QUIT=0 X=2 Y=2 ' ' INITIALIZE TABLES. ' CH=0 : D=0 READ CH$(CH+1) WHILE CH$(CH+1)<>"***" CH=CH+1 FOR D = 1 TO 7 READ CH(CH,D) NEXT D READ CH$(CH+1) WEND DATA " ",000,000,000,000,000,000,000 DATA A,505,037,035,034,035,037,505 DATA B,512,274,274,274,274,274,239 DATA C,125,131,258,258,258,131,069 DATA D,512,258,258,258,258,131,125 DATA E,512,274,274,274,274,258,258 DATA F,512,018,018,018,018,002,002 DATA G,125,131,258,258,290,163,101 DATA H,512,017,017,017,017,017,512 DATA I,258,258,258,512,258,258,258 DATA J,065,129,257,257,257,129,128 DATA K,512,017,017,041,069,131,258 DATA L,512,257,257,257,257,257,257 DATA M,512,007,013,025,013,007,512 DATA N,512,007,009,017,033,193,512 DATA O,125,131,258,258,258,131,125 DATA P,512,018,018,018,018,018,015 DATA Q,125,131,258,258,322,131,381 DATA R,512,018,018,050,082,146,271 DATA S,069,139,274,274,274,163,069 DATA T,002,002,002,512,002,002,002 DATA U,128,129,257,257,257,129,128 DATA V,064,065,129,257,129,065,064 DATA W,256,257,129,065,129,257,256 DATA X,388,069,041,017,041,069,388 DATA Y,008,009,017,481,017,009,008 DATA Z,386,322,290,274,266,262,260 DATA 0,125,131,262,274,322,131,125 DATA 1,000,261,259,512,257,257,000 DATA 2,261,387,322,290,274,267,261 DATA 3,066,130,258,274,266,150,100 DATA 4,033,049,041,037,035,512,033 DATA 5,160,274,274,274,274,274,226 DATA 6,193,289,305,297,293,291,194 DATA 7,258,130,066,034,018,010,008 DATA 8,069,171,274,274,274,171,069 DATA 9,263,138,074,042,026,010,007 DATA ?,005,003,002,354,018,001,005 DATA *,069,041,017,512,017,041,069 DATA =,041,041,041,041,041,041,041 DATA !,001,001,001,384,001,001,001 DATA .,001,001,129,449,129,001,001 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 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> Horizontal =";X PRINT " <2> Veritcal =";Y PRINT " <3> Centered = ";D$ PRINT " <4> Character = ";MC$ PRINT " <5> Message = ";MESS$ PRINT PRINT " <6> Print Message" PRINT " <7> Exit Program" PRINT PRINT " Press key corresponding to function..." PRINT DO GOSUB INKEY.CASE : A=VAL(A$) LOOP UNTIL A<>0 IF A=7 THEN QUIT=-1 ON A GOSUB GET.HORIZ,GET.VERT,CENTER,GET.CHAR,GET.MESSAGE,PRINT.MESSAGE LOOP UNTIL QUIT SYSTEM REM REM MAIN ROUTINES SECTION. REM ' GET.HORIZ: ' ' THE PURPOSE OF THIS ROUTINE IS TO PROMPT THE USER FOR THE ' HORIZONTAL LENGTH OF A CHARACTER. ENTRY & EXIT: ' THE MAIN ROUTINE. ' PRINT PRINT "What is the horizontal length of a character "; INPUT X : IF X<0 THEN X=0 RETURN ' GET.VERT: ' ' THE PURPOSE OF THIS ROUTINE IS TO PROMPT THE USER FOR THE ' VERTICAL LENGTH OF A CHARACTER. ENTRY & EXIT: ' THE MAIN ROUTINE. ' PRINT PRINT "What is the vertical length of a character "; INPUT Y : IF Y<0 THEN Y=0 RETURN ' 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.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$ 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. ENTRY & EXIT: THE MAIN ROUTINE. ' OPEN "LPT1.DOS" FOR OUTPUT AS #1 FOR I = 1 TO LEN(MESS$) CH$=MID$(MESS$,I,1) IF CH$=" " THEN GOSUB PRINT.SPACE ELSE GOSUB PRINT.CHAR NEXT I FOR D = 1 TO 10 PRINT #1, " " NEXT D CLOSE #1 RETURN REM REM PRINT MESSAGE ROUTINES SECTION. REM ' PRINT.SPACE: ' ' THE PURPOSE OF THIS ROUTINE IS TO PRINT A SPACE THAT IS ' PROPORTIONAL TO THE LETTERS. ENTRY & EXIT: PRINT.MESSAGE\ ' FOR D = 1 TO 7*X PRINT #1, " " NEXT D RETURN ' PRINT.CHAR: ' ' THE PURPOSE OF THIS ROUTINE IS TO PRINT THE CHARACTER, ' SPECIFIED BY CH$. ENTRY & EXIT: PRINT.MESSAGE\ ' CH.=CH : FOUND=0 WHILE CH.>1 AND NOT FOUND IF CH$=CH$(CH.) THEN FOUND=-1 ELSE CH.=CH.-1 WEND X$=MC$ : IF MC$="CHAR" THEN X$=CH$(CH.) FOR U = 1 TO 7 K=8 : J=0 : D=CH(CH.,U) WHILE K>=0 AND J=0 J(9-K)=0 IF 2^K < D THEN J(9-K)=1 : D=D-2^K : IF D=1 THEN J=9-K K=K-1 WEND FOR X. = 1 TO X PRINT #1, TAB((37-4.5*Y)*CENTER/(LEN(X$))+1); FOR K = 1 TO J IF J(K)=0 THEN D$=STRING$(LEN(X$),32) ELSE D$=X$ FOR D = 1 TO Y PRINT #1, D$; NEXT D NEXT K PRINT #1, " " NEXT X. NEXT U FOR D = 1 TO 2*X PRINT #1, " " NEXT D RETURN REM REM PRINT MESSAGE ROUTINES EXIT. REM REM MAIN ROUTINES EXIT. REM END