home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************)
- (* *)
- (* Epson LQ Printer Configurer - Version 1.0 *)
- (* *)
- (* Author: Forrest A. Blood IV - 11/24/91 *)
- (* Based on the original program for a Gemini 10x by G. Moore - 12/4/87 *)
- (* *)
- (* This program allows you to configure an Epson LQ in various ways *)
- (* including "Ultra Tiny" print. This accessory has been tested on an *)
- (* LQ-510 and an LQ-570 printer and may not work on other models. The *)
- (* source code is well documented so you can modify the printer codes *)
- (* for your specific printer. You need Personal Pascal Version 2 to *)
- (* compile this. *)
- (* *)
- (* This source code and compiled program are released into the public *)
- (* domain and may not be sold for profit. *)
- (* *)
- (*************************************************************************)
-
- {$S10,A+,D-}
-
- Program Epson_Acc;
-
- {$I GEMSUBS}
- {$I AUXSUBS}
-
- VAR ap_id,
- menu_id : Integer ;
- our_name: Str255 ;
-
- CONST
-
- {The following are all CONST defins from the Resource Construction Program}
- PRT_BOX = 0;
- ULTRATNY = 4;
- PICA = 3;
- ELITE = 5;
- CONDENSE = 6;
- PAPER = 17;
- SKIPOVER = 18;
- D_WIDE = 19;
- D_STRIKE = 21;
- ITALICS = 20;
- BOLD = 22;
- FORMFEED = 16;
- TYPERITE = 14;
- LINEFEED = 12;
- DONE = 13;
- INITIAL = 15;
- LEFT = 25;
- RIGHT = 26;
- DOWN = 28;
- LPP = 27;
- UP = 29;
- LFSIZE = 30;
-
- TYPE
- stuff = Integer;
-
- VAR
-
- {The following capitalized variables represent whether or
- not the indicated button is selected}
-
- PICA_,
- ELITE_,
- CONDENSE_,
- ULTRA_TINY_,
- PAPER_,
- SKIPOVER_,
- D_WIDE_,
- D_STRIKE_,
- ITALICS_,
- BOLD_ : Boolean;
-
- J,
- Choice,
- ToBeEdited, {Which of the four buttons is to be edited}
- CurLeft, {Current Left Margin}
- CurRight, {Current Right Margin}
- CurLPP, {Current Number of Lines Per Page}
- CurLFS : Integer; {Current Line Feed Size}
-
- Box : Dialog_Ptr;
-
- OutStr : Str255; {String to send to the printer}
-
- P : File of Text;
-
- TheScreen : Screen_type;
-
- Initial_Draw, {Has dialog been drawn yet?}
- ChangeSize : Boolean; {Has size changed (eg from PICA to CONDENSED)}
-
- (****************************************************************)
- Function bcostat(device : integer) : boolean;
- BIOS(8);
- (****************************************************************)
- Procedure TypeWriter;
-
- Begin
- Clear_Screen;
- Curs_Home;
- Curs_On;
- Writeln('Typewriter mode -- type /EX to quit');
- Writeln;
- Repeat
- Readln(OutStr);
- If (OutStr <> '/EX') and (OutStr <> '/ex') then Writeln(P,OutStr);
- Until (OutStr = '/EX') or (OutStr = '/ex');
- Curs_Off;
- Clear_Screen;
- End;
- (****************************************************************)
- Procedure UpdateNumber(Index,Value:Integer);
-
- VAR S : Str255;
- NewValue,
- J, K : Integer;
-
- {Gets current resolution: 0 = Low, 1 = Medium, 2 = High}
- Function Get_rez:integer;
- XBIOS(4);
-
- Begin
- {Convert the integer to a string}
- K := Value div 100;
- If K = 0 then S := ' ' else S := Chr(Ord('0') + K);
- If (Value < 10) then S := ' ' else
- begin
- Value := Value mod 100;
- K := Value div 10;
- S := concat(S,Chr(Ord('0') + K));
- Value := Value Mod 10;
- end;
- S := concat(S,Chr(Ord('0') + Value));
-
- {Draw string directly to dialog box since Show_Dialog is WAY too slow}
- Case Index of
- LEFT : J := 99;
- RIGHT : J := 115;
- LPP : J := 131;
- LFSIZE : J := 147;
- end;
-
- If Get_rez = 0 then K := 288 else K := 448;
- If Get_rez = 2 then J := J * 2;
- Draw_Mode(1);
- Draw_String(K,J,S);
-
- End;
- (****************************************************************)
-
- Procedure Event_Loop ;
-
- VAR
- event, junk : Integer ;
- mbox, rload : Boolean;
- msg : Message_Buffer ;
-
- Begin
- mbox := False;
- rload := Load_Resource('EPSONLQ.RSC');
- WHILE True DO
- Begin
- event := Get_Event( E_Message,0,0,0,0,false,0,0,0,0,false,0,0,0,0,
- msg,junk,junk,junk,junk,junk,junk );
- If (msg[0] = AC_Open) AND (msg[4] = menu_id) THEN
- If not rload then
- J := Do_Alert('[3][ EPSONLQ.RSC not | found! ][ ABORT ]',1)
- else
- Begin
-
- If NOT mbox then
- begin
- Find_Dialog(PRT_BOX,Box);
- Init_Mouse;
-
- PICA_ := True;
- ELITE_ := False;
- CONDENSE_ := False;
- ULTRA_TINY_ := False;
- PAPER_ := False;
- SKIPOVER_ := False;
- D_WIDE_ := False;
- D_STRIKE_ := False;
- ITALICS_ := False;
- BOLD_ := False;
-
- ToBeEdited := RIGHT;
-
- CurLeft := 0;
- CurRight := 80;
- CurLPP := 66;
- CurLFS := 30;
-
- mbox := True;
- ChangeSize := False;
-
- Obj_SetState(Box,LEFT,Selected | Shadowed,Initial_Draw);
-
- End;
-
- Initial_Draw := False;
-
- Rewrite(P,'PRN:');
- Center_Dialog(Box);
-
- Repeat
- If PICA_
- then Obj_SetState(Box,PICA,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,PICA,(Shadowed),Initial_Draw);
-
- If ELITE_
- then Obj_SetState(Box,ELITE,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,ELITE,(Shadowed),Initial_Draw);
-
- If CONDENSE_
- then Obj_SetState(Box,CONDENSE,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,CONDENSE,(Shadowed),Initial_Draw);
-
- If ULTRA_TINY_
- then Obj_SetState(Box,ULTRATNY,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,ULTRATNY,(Shadowed),Initial_Draw);
-
- If PAPER_
- then Obj_SetState(Box,PAPER,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,PAPER,(Shadowed),Initial_Draw);
-
- If SKIPOVER_
- then Obj_SetState(Box,SKIPOVER,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,SKIPOVER,(Shadowed),Initial_Draw);
-
- If D_WIDE_
- then Obj_SetState(Box,D_WIDE,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,D_WIDE,(Shadowed),Initial_Draw);
-
- If D_STRIKE_
- then Obj_SetState(Box,D_STRIKE,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,D_STRIKE,(Shadowed),Initial_Draw);
-
- If ITALICS_
- then Obj_SetState(Box,ITALICS,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,ITALICS,(Shadowed),Initial_Draw);
-
- If BOLD_
- then Obj_SetState(Box,BOLD,(Selected | Shadowed),Initial_Draw)
- else Obj_SetState(Box,BOLD,(Shadowed),Initial_Draw);
-
- Obj_SetState(Box,LINEFEED,Shadowed,Initial_Draw);
- Obj_SetState(Box,FORMFEED,Shadowed,Initial_Draw);
- Obj_SetState(Box,TYPERITE,Shadowed,Initial_Draw);
- Obj_SetState(Box,INITIAL,Shadowed,Initial_Draw);
- Obj_SetState(Box,UP,Normal,Initial_Draw);
- Obj_SetState(Box,DOWN,Normal,Initial_Draw);
-
- If (not Initial_Draw) then
- begin
- Show_Dialog(Box,0);
- Show_Dialog(Box,1);
- Show_Dialog(Box,7);
- Show_Dialog(Box,23);
- UpdateNumber(LFSIZE,CurLFS);
- UpdateNumber(LPP,CurLPP);
- UpdateNumber(RIGHT,CurRight);
- UpdateNumber(LEFT,CurLeft);
- end;
-
- Choice := Redo_Dialog(Box,0);
-
- OutStr := '';
-
- Initial_Draw := True;
-
- If (Obj_State(Box,PAPER) & Selected) = 0
- then begin
- PAPER_ := False;
- OutStr := Concat(OutStr,#27,#120,#0); {DISABLE LQ Mode}
- end
- else begin
- PAPER_ := True;
- OutStr := Concat(OutStr,#27,#120,#1); {ENABLE LQ Mode}
- end;
-
- If (Obj_State(Box,SKIPOVER) & Selected) = 0
- then begin
- SKIPOVER_ := False;
- OutStr := Concat(OutStr,#27,#79); {DISABLE PERFORATION SKIPOVER}
- end
- else begin
- SKIPOVER_ := True;
- OutStr := Concat(OutStr,#27,#78,#6); {ENABLE PERFORATION SKIPOVER (SKIPS 2 LINES)}
- end;
-
- If (Obj_State(Box,D_WIDE) & Selected) = 0
- then begin
- D_WIDE_ := False;
- OutStr := Concat(OutStr,#27,'W',#0); {DISABLE DOUBLEWIDE PRINT}
- end
- else begin
- D_WIDE_ := True;
- OutStr := Concat(OutStr,#27,'W',#1); {ENABLE DOUBLEWIDE PRINT}
- end;
-
- If (Obj_State(Box,D_STRIKE) & Selected) = 0
- then begin
- D_STRIKE_ := False;
- OutStr := Concat(OutStr,#27,'H'); {DISABLE DOUBLESTRIKE}
- end
- else begin
- D_STRIKE_ := True;
- OutStr := Concat(OutStr,#27,#71); {ENABLE DOUBLESTRIKE}
- end;
-
- If (Obj_State(Box,ITALICS) & Selected) = 0
- then begin
- ITALICS_ := False;
- OutStr := Concat(OutStr,#27,#53); {DISABLE ITALICS}
- end
- else begin
- ITALICS_ := True;
- OutStr := Concat(OutStr,#27,#52); {ENABLE ITALICS}
- end;
-
- If (Obj_State(Box,BOLD) & Selected) = 0
- then begin
- BOLD_ := False;
- OutStr := Concat(OutStr,#27,#70); {DISABLE EMPHASIZED (BOLD) PRINT}
- end
- else begin
- BOLD_ := True;
- OutStr := Concat(OutStr,#27,#69); {ENABLE EMPHASIZED PRINT}
- end;
-
- If (Obj_State(Box,PICA) & Selected) = 0
- then PICA_ := False
- else begin
- If not PICA_ then ChangeSize := True;
- PICA_ := True;
- OutStr := Concat(OutStr,#27,#80); {SELECT PICA (10 CPI)}
- end;
-
- If (Obj_State(Box,ELITE) & Selected) = 0
- then ELITE_ := False
- else begin
- If not ELITE_ then ChangeSize := True;
- ELITE_ := True;
- OutStr := Concat(OutStr,#27,#77); {SELECT ELITE (12 CPI)}
- end;
-
- If (Obj_State(Box,CONDENSE) & Selected) = 0
- then CONDENSE_ := False
- else begin
- If not CONDENSE_ then ChangeSize := True;
- CONDENSE_ := True;
- OutStr := Concat(OutStr,#27,#103); {SELECT CONDENSED PRINT (17 CPI)}
- end;
-
- If (Obj_State(Box,ULTRATNY) & Selected) = 0
- then begin
- ULTRA_TINY_ := False;
- OutStr := Concat(OutStr,#27,#84); {CANCEL SUBSCRIPT MODE}
- If not D_STRIKE_ then OutStr := Concat(OutStr,#27,'H'); {CANCEL DOUBLE STRIKE}
- end
- else begin
- If not ULTRA_TINY_ then ChangeSize := True;
- ULTRA_TINY_ := True;
- OutStr := Concat(OutStr,#27,#83,#0,#15); {SELECT SUPERSCRIPT MODE & CONDENSED}
- D_STRIKE_ := True;
- end;
-
- If ChangeSize then
- begin
- CurLeft := 0;
- UpdateNumber(LEFT,CurLeft);
- end;
-
- If ULTRA_TINY_ and ChangeSize then
- begin
- CurLFS := 17;
- UpdateNumber(LFSIZE,CurLFS);
- CurLPP := 122;
- UpdateNumber(LPP,CurLPP);
- CurRight := 136;
- UpdateNumber(RIGHT,CurRight);
- end;
-
- If (not ULTRA_TINY_) and ChangeSize then
- begin
- CurLFS := 30;
- UpdateNumber(LFSIZE,CurLFS);
- CurLPP := 66;
- UpdateNumber(LPP,CurLPP);
- If PICA_ then CurRight := 80;
- If ELITE_ then CurRight := 96;
- If CONDENSE_ then CurRight := 120;
- UpdateNumber(RIGHT,CurRight);
- end;
-
- ChangeSize := False;
-
- If (Obj_State(Box,LEFT) & Selected) <> 0 then ToBeEdited := LEFT;
- If (Obj_State(Box,RIGHT) & Selected) <> 0 then ToBeEdited := RIGHT;
- If (Obj_State(Box,LPP) & Selected) <> 0 then ToBeEdited := LPP;
- If (Obj_State(Box,LFSIZE) & Selected) <> 0 then ToBeEdited := LFSIZE;
-
- J := 0;
- If (Obj_State(Box,UP) & Selected) <> 0 then J := 1;
- If (Obj_State(Box,DOWN) & Selected) <> 0 then J := -1;
-
- Case ToBeEdited of
- LEFT : If (CurLeft + J > -1) and (CurLeft + J < 136) then
- Begin
- CurLeft := CurLeft + J;
- UpdateNumber(LEFT,CurLeft);
- End;
- RIGHT : If (CurRight + J > 0) and (CurRight + J < 137) then
- Begin
- CurRight := CurRight + J;
- UpdateNumber(RIGHT,CurRight);
- End;
- LPP : If (CurLPP + J > 0) and (CurLPP + J < 128) then
- Begin
- CurLPP := CurLPP + J;
- UpdateNumber(LPP,CurLPP);
- End;
- LFSIZE : If (CurLFS + J > 0) and (CurLFS + J < 256) then
- Begin
- CurLFS := CurLFS + J;
- UpdateNumber(LFSIZE,CurLFS);
- End;
- end; {CASE}
-
- OutStr := Concat(OutStr,#27,#108,Chr(CurLeft)); {SET LEFT MARGIN}
- OutStr := Concat(OutStr,#27,#81,Chr(CurRight)); {SET RIGHT MARGIN}
- OutStr := Concat(OutStr,#27,#67,Chr(CurLPP)); {SET LINES PER PAGE}
- OutStr := Concat(OutStr,#27,#51,Chr(CurLFS)); {SET LINE FEED SIZE in 1/180" INCREMENTS}
-
- If (Obj_State(Box,LINEFEED) & Selected) <> 0
- then OutStr := Concat(OutStr,#10); {SEND LINEFEED}
-
- If (Obj_State(Box,FORMFEED) & Selected) <> 0
- then OutStr := Concat(OutStr,#12); {SEND FORMFEED}
-
- If Choice = INITIAL then
- Begin
- PICA_ := True;
- ELITE_ := False;
- CONDENSE_ := False;
- ULTRA_TINY_ := False;
- PAPER_ := False;
- SKIPOVER_ := False;
- D_WIDE_ := False;
- D_STRIKE_ := False;
- ITALICS_ := False;
- BOLD_ := False;
-
- CurLFS := 30;
- UpdateNumber(LFSIZE,CurLFS);
- CurLPP := 66;
- UpdateNumber(LPP,CurLPP);
- CurRight := 80;
- UpdateNumber(RIGHT,CurRight);
- CurLeft := 0;
- UpdateNumber(LEFT,CurLeft);
-
- OutStr := Concat(#27,#64); {CODE TO INITIALIZE PRINTER TO POWER UP STATE}
- End;
-
- If bcostat(0) then
- Write(P,OutStr) {Send OutStr to the printer!}
- else
- Begin
- J := do_alert('[3][ Printer is not | responding! ][ Abort ]',1);
-
- PICA_ := True;
- ELITE_ := False;
- CONDENSE_ := False;
- ULTRA_TINY_ := False;
- PAPER_ := False;
- SKIPOVER_ := False;
- D_WIDE_ := False;
- D_STRIKE_ := False;
- ITALICS_ := False;
- BOLD_ := False;
-
- CurLFS := 30;
- UpdateNumber(LFSIZE,CurLFS);
- CurLPP := 66;
- UpdateNumber(LPP,CurLPP);
- CurRight := 80;
- UpdateNumber(RIGHT,CurRight);
- CurLeft := 0;
- UpdateNumber(LEFT,CurLeft);
-
- Choice := Done;
- End;
-
- If Choice = TYPERITE then
- Begin
- Hide_Mouse;
- Save_Scrn(TheScreen);
- TypeWriter;
- Restr_Scrn(TheScreen);
- Show_Mouse;
- End;
- Until Choice = Done;
- Obj_SetState( Box, Done, Shadowed, True);
- ReWrite (P, 'CON:');
- End_Dialog ( Box );
- END
- END
- END;
-
- BEGIN
- ap_id := Init_Gem ;
- IF ap_id >= 0 THEN
- BEGIN
- our_name := ' Set Epson LQ';
- menu_id := Menu_Register( ap_id, our_name );
- Event_Loop ;
- END
- END.
-
-
-
-