home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 613b.lha / PrLabel_v1.1 / src.LZH / src / PrL.c < prev    next >
C/C++ Source or Header  |  1992-01-31  |  20KB  |  800 lines

  1. /***************************************************************************
  2.  
  3.    Program:    PrLabel
  4.    File:       PrL.c
  5.    
  6.    Version:    V1.1
  7.    Date:       28.10.91
  8.    Function:   Actual label printing and Interface handling routines
  9.    
  10.    Copyright:  SciTech Software 1991
  11.    Author:     Andrew C. R. Martin
  12.    Address:    SciTech Software
  13.                23, Stag Leys,
  14.                Ashtead,
  15.                Surrey,
  16.                KT21 2TD.
  17.    Phone:      +44 (0372) 275775
  18.    EMail:      UUCP: cbmuk!cbmuka!scitec!amartin
  19.                JANET: andrew@uk.ac.ox.biop
  20.                
  21. ****************************************************************************
  22.  
  23.    This program is Shareware with a suggested donation of £5.00.
  24.    It may be freely copied and distributed for no more than a nominal charge 
  25.    (not more than £4.00 in the U.K.) providing this header is included.
  26.    
  27.    The code may be modified as required, but any modifications must be
  28.    documented so that the person responsible can be identified. If someone
  29.    else breaks this code, I don't want to be blamed for code that does not
  30.    work! The code may not be sold commercially without prior permission from
  31.    the author, although it may be given away free with commercial products,
  32.    providing it is made clear that this program is free and that the source
  33.    code is provided with the program.
  34.  
  35. ****************************************************************************
  36.  
  37.    Description:
  38.    ============
  39.    
  40.    Actual label printing and interface handling routines for PrLabel.
  41.    
  42.    N.B. The values for spacing in SetSheet27() and SetSheet28() have been
  43.         calculated, but never actually tested (I use 3x8 label sheets!).
  44.         Similarly Label27() and Label28().
  45.         
  46.         If you find these values are wrong, please let me know...
  47.  
  48.  
  49. ****************************************************************************
  50.  
  51.    Usage:
  52.    ======
  53.  
  54. ****************************************************************************
  55.  
  56.    Revision History:
  57.    =================
  58.    V1.1     17.01.92
  59.    Changed interface to use STSLib.
  60.  
  61. ***************************************************************************/
  62. #include "PrLabel.h"
  63.  
  64. #include <sts/stslib.h>
  65.  
  66. /**************************************************************************/
  67. /* Macros
  68. */
  69. #define NEXT(x)         (x)=(x)->next
  70. #define ALLOCNEXT(x,y)  {  if(((x)->next=(y *)malloc(sizeof(y)))==NULL) \
  71.                               Die("Out of Memory!"); \
  72.                            NEXT(x); \
  73.                            (x)->next=NULL; \
  74.                         }
  75. #define LAST(x)         while((x)->next != NULL) NEXT(x)
  76. #define TOGGLE(x)       (x) = (!(x))
  77.  
  78. /**************************************************************************/
  79. SetSheet38(APTR object)
  80. {
  81.    int j;
  82.    
  83.    for(j=0;j<8;j++)
  84.    {
  85.       label[0][j].x =  0;
  86.       label[1][j].x = 28;
  87.       label[2][j].x = 56;
  88.    }
  89.    
  90.    for(j=0;j<3;j++)
  91.    {
  92.       label[j][0].y =  0;
  93.       label[j][1].y =  8;
  94.       label[j][2].y = 16;
  95.       label[j][3].y = 25;
  96.       label[j][4].y = 34;
  97.       label[j][5].y = 43;
  98.       label[j][6].y = 52;
  99.       label[j][7].y = 60;
  100.    }
  101.    
  102.    SheetType = THREE_EIGHT;
  103.    
  104.    return(0);
  105. }
  106.  
  107. /**************************************************************************/
  108. SetSheet28(APTR object)
  109. {
  110.    int j;
  111.    
  112.    for(j=0;j<8;j++)
  113.    {
  114.       label[0][j].x =  0;
  115.       label[1][j].x = 43;
  116.       label[2][j].x = LINELENGTH+10; /* Make sure this won't be printed */
  117.    }
  118.  
  119.    for(j=0;j<3;j++)
  120.    {
  121.       label[j][0].y =  0;
  122.       label[j][1].y =  8;
  123.       label[j][2].y = 16;
  124.       label[j][3].y = 25;
  125.       label[j][4].y = 34;
  126.       label[j][5].y = 43;
  127.       label[j][6].y = 52;
  128.       label[j][7].y = 60;
  129.    }
  130.    
  131.    SheetType = TWO_EIGHT;
  132.    
  133.    return(0);
  134. }
  135.  
  136. /**************************************************************************/
  137. SetSheet27(APTR object)
  138. {
  139.    int j;
  140.  
  141.    for(j=0;j<8;j++)
  142.    {
  143.       label[0][j].x =  0;
  144.       label[1][j].x = 42;
  145.       label[2][j].x = LINELENGTH+10; /* Make sure this won't be printed */
  146.    }
  147.    
  148.    for(j=0;j<3;j++)
  149.    {
  150.       label[j][0].y =  0;
  151.       label[j][1].y =  9;
  152.       label[j][2].y = 19;
  153.       label[j][3].y = 29;
  154.       label[j][4].y = 39;
  155.       label[j][5].y = 49;
  156.       label[j][6].y = 59;
  157.       label[j][7].y = PAGELENGTH+10; /* Make sure this won't be printed */
  158.    }
  159.  
  160.    SheetType = TWO_SEVEN;
  161.    
  162.    return(0);
  163. }
  164.  
  165. /**************************************************************************/
  166. SetPos11(APTR object)
  167. {
  168.    TOGGLE(label[0][0].print);
  169.    return(0);
  170. }
  171.  
  172. /**************************************************************************/
  173. SetPos12(APTR object)
  174. {
  175.    TOGGLE(label[0][1].print);
  176.    return(0);
  177. }
  178.  
  179. /**************************************************************************/
  180. SetPos13(APTR object)
  181. {
  182.    TOGGLE(label[0][2].print);
  183.    return(0);
  184. }
  185.  
  186. /**************************************************************************/
  187. SetPos14(APTR object)
  188. {
  189.    TOGGLE(label[0][3].print);
  190.    return(0);
  191. }
  192.  
  193. /**************************************************************************/
  194. SetPos15(APTR object)
  195. {
  196.    TOGGLE(label[0][4].print);
  197.    return(0);
  198. }
  199.  
  200. /**************************************************************************/
  201. SetPos16(APTR object)
  202. {
  203.    TOGGLE(label[0][5].print);
  204.    return(0);
  205. }
  206.  
  207. /**************************************************************************/
  208. SetPos17(APTR object)
  209. {
  210.    TOGGLE(label[0][6].print);
  211.    return(0);
  212. }
  213.  
  214. /**************************************************************************/
  215. SetPos18(APTR object)
  216. {
  217.    TOGGLE(label[0][7].print);
  218.    return(0);
  219. }
  220.  
  221. /**************************************************************************/
  222. SetPos21(APTR object)
  223. {
  224.    TOGGLE(label[1][0].print);
  225.    return(0);
  226. }
  227.  
  228. /**************************************************************************/
  229. SetPos22(APTR object)
  230. {
  231.    TOGGLE(label[1][1].print);
  232.    return(0);
  233. }
  234.  
  235. /**************************************************************************/
  236. SetPos23(APTR object)
  237. {
  238.    TOGGLE(label[1][2].print);
  239.    return(0);
  240. }
  241.  
  242. /**************************************************************************/
  243. SetPos24(APTR object)
  244. {
  245.    TOGGLE(label[1][3].print);
  246.    return(0);
  247. }
  248.  
  249. /**************************************************************************/
  250. SetPos25(APTR object)
  251. {
  252.    TOGGLE(label[1][4].print);
  253.    return(0);
  254. }
  255.  
  256. /**************************************************************************/
  257. SetPos26(APTR object)
  258. {
  259.    TOGGLE(label[1][5].print);
  260.    return(0);
  261. }
  262.  
  263. /**************************************************************************/
  264. SetPos27(APTR object)
  265. {
  266.    TOGGLE(label[1][6].print);
  267.    return(0);
  268. }
  269.  
  270. /**************************************************************************/
  271. SetPos28(APTR object)
  272. {
  273.    TOGGLE(label[1][7].print);
  274.    return(0);
  275. }
  276.  
  277. /**************************************************************************/
  278. SetPos31(APTR object)
  279. {
  280.    TOGGLE(label[2][0].print);
  281.    return(0);
  282. }
  283.  
  284. /**************************************************************************/
  285. SetPos32(APTR object)
  286. {
  287.    TOGGLE(label[2][1].print);
  288.    return(0);
  289. }
  290.  
  291. /**************************************************************************/
  292. SetPos33(APTR object)
  293. {
  294.    TOGGLE(label[2][2].print);
  295.    return(0);
  296. }
  297.  
  298. /**************************************************************************/
  299. SetPos34(APTR object)
  300. {
  301.    TOGGLE(label[2][3].print);
  302.    return(0);
  303. }
  304.  
  305. /**************************************************************************/
  306. SetPos35(APTR object)
  307. {
  308.    TOGGLE(label[2][4].print);
  309.    return(0);
  310. }
  311.  
  312. /**************************************************************************/
  313. SetPos36(APTR object)
  314. {
  315.    TOGGLE(label[2][5].print);
  316.    return(0);
  317. }
  318.  
  319. /**************************************************************************/
  320. SetPos37(APTR object)
  321. {
  322.    TOGGLE(label[2][6].print);
  323.    return(0);
  324. }
  325.  
  326. /**************************************************************************/
  327. SetPos38(APTR object)
  328. {
  329.    TOGGLE(label[2][7].print);
  330.    return(0);
  331. }
  332.  
  333. /**************************************************************************/
  334. PrintLabels(APTR object)
  335. {
  336.    int  labelcount,
  337.         j,
  338.         k;
  339.    /* This is only declared as static, to get it off the stack. Once the
  340.       stack resizing option is documented for Lattice C, this can be used
  341.       instead.
  342.    */
  343.    static char PageBuffer[PAGELENGTH][LINELENGTH];
  344.    ADDR *p;
  345.    
  346.    /* Move to current address label and copy buffers into linked list */
  347.    for(p=address,j=0; p!=NULL && j<CurLabel; NEXT(p), j++);
  348.    strcpy(p->line[0], Line1SIBuff);
  349.    strcpy(p->line[1], Line2SIBuff);
  350.    strcpy(p->line[2], Line3SIBuff);
  351.    strcpy(p->line[3], Line4SIBuff);
  352.    strcpy(p->line[4], Line5SIBuff);
  353.    strcpy(p->line[5], Line6SIBuff);
  354.    strcpy(p->line[6], Line7SIBuff);
  355.  
  356.    /* Blank the buffer */
  357.    BlankBuffer(PageBuffer);
  358.    
  359.    /* If there's only one label defined, we'll print it at each active
  360.       label position
  361.    */
  362.    if(NLabel == 1)
  363.    {
  364.       for(j=0;j<3;j++)
  365.          for(k=0;k<8;k++)
  366.             if(label[j][k].print) PrintAt(PageBuffer,label[j][k].x,label[j][k].y,0);
  367.    }
  368.    else
  369.    {
  370.       labelcount = 0;
  371.       for(j=0;j<3;j++)
  372.          for(k=0;k<8;k++)
  373.             if(label[j][k].print) 
  374.             {
  375.                if(labelcount < NLabel)
  376.                   PrintAt(PageBuffer, label[j][k].x, label[j][k].y, labelcount++);
  377.             }
  378.    }
  379.    
  380.    DumpBuffer(PageBuffer);
  381.  
  382.    /* Reactivate line1 gadget */
  383.    GoLine1((APTR)1);
  384.    
  385.    return(0);
  386. }
  387.  
  388. /**************************************************************************/
  389. PrevLabel(APTR object)
  390. {
  391.    ADDR *p;
  392.    int  j;
  393.    
  394.    /* Move to current address label and copy buffers into linked list */
  395.    for(p=address,j=0; p!=NULL && j<CurLabel; NEXT(p), j++);
  396.    strcpy(p->line[0], Line1SIBuff);
  397.    strcpy(p->line[1], Line2SIBuff);
  398.    strcpy(p->line[2], Line3SIBuff);
  399.    strcpy(p->line[3], Line4SIBuff);
  400.    strcpy(p->line[4], Line5SIBuff);
  401.    strcpy(p->line[5], Line6SIBuff);
  402.    strcpy(p->line[6], Line7SIBuff);
  403.  
  404.    CurLabel--;
  405.    
  406.    if(CurLabel < 0) CurLabel = 0;
  407.    
  408.    /* Put vales for this label in buffers */
  409.    for(p=address,j=0; p!=NULL && j<CurLabel; NEXT(p), j++);
  410.    strcpy(Line1SIBuff, p->line[0]);
  411.    strcpy(Line2SIBuff, p->line[1]);
  412.    strcpy(Line3SIBuff, p->line[2]);
  413.    strcpy(Line4SIBuff, p->line[3]);
  414.    strcpy(Line5SIBuff, p->line[4]);
  415.    strcpy(Line6SIBuff, p->line[5]);
  416.    strcpy(Line7SIBuff, p->line[6]);
  417.    
  418.    RefreshGList(Line1,Window,NULL,7);
  419.    
  420.    /* Reactivate line1 gadget */
  421.    GoLine1((APTR)1);
  422.    
  423.    return(0);
  424. }
  425.  
  426. /**************************************************************************/
  427. NextLabel(APTR object)
  428. {
  429.    ADDR *p;
  430.    int  j;
  431.  
  432.    /* Move to current address label and copy buffers into linked list */
  433.    for(p=address,j=0; p!=NULL && j<CurLabel; NEXT(p), j++);
  434.    strcpy(p->line[0], Line1SIBuff);
  435.    strcpy(p->line[1], Line2SIBuff);
  436.    strcpy(p->line[2], Line3SIBuff);
  437.    strcpy(p->line[3], Line4SIBuff);
  438.    strcpy(p->line[4], Line5SIBuff);
  439.    strcpy(p->line[5], Line6SIBuff);
  440.    strcpy(p->line[6], Line7SIBuff);
  441.    
  442.    CurLabel++;
  443.    p = address;
  444.    
  445.    /* Allocate space for next address if necessary */
  446.    while(NLabel <= CurLabel)
  447.    {
  448.       LAST(p);
  449.       ALLOCNEXT(p,ADDR);
  450.       if(!p)
  451.       {
  452.          ReqMessage(Window,"No memory for next label!",0);
  453.       }
  454.       else
  455.       {
  456.          NLabel++;
  457.          p->line[0][0] = '\0';
  458.          p->line[1][0] = '\0';
  459.          p->line[2][0] = '\0';
  460.          p->line[3][0] = '\0';
  461.          p->line[4][0] = '\0';
  462.          p->line[5][0] = '\0';
  463.          p->line[6][0] = '\0';
  464.          p->next = NULL;
  465.       }
  466.    }
  467.    
  468.    /* Move to current address label and put values in buffers */
  469.    for(p=address,j=0; p!=NULL && j<CurLabel; NEXT(p), j++);
  470.    strcpy(Line1SIBuff,p->line[0]);
  471.    strcpy(Line2SIBuff,p->line[1]);
  472.    strcpy(Line3SIBuff,p->line[2]);
  473.    strcpy(Line4SIBuff,p->line[3]);
  474.    strcpy(Line5SIBuff,p->line[4]);
  475.    strcpy(Line6SIBuff,p->line[5]);
  476.    strcpy(Line7SIBuff,p->line[6]);
  477.  
  478.    RefreshGList(Line1,Window,NULL,7);
  479.  
  480.    /* Reactivate line1 gadget */
  481.    GoLine1((APTR)1);
  482.    
  483.    return(0);
  484. }
  485.  
  486. /**************************************************************************/
  487. KillLabel(APTR object)
  488. {
  489.    ADDR *p;
  490.    int  j;
  491.    
  492.    if(NLabel > 1)
  493.    {
  494.       /* Deal with special case */
  495.       if(CurLabel == 0)
  496.       {
  497.          p = address->next;
  498.          free(address);
  499.          address = p;
  500.       }
  501.       else
  502.       {
  503.          ADDR *q;
  504.          /* Move to previous address label in list */
  505.          for(p=address,j=0; p!=NULL && j<CurLabel-1; NEXT(p), j++);
  506.          /* Save the next pointer from the address label we're going to kill */
  507.          q = p->next->next;
  508.          /* Kill the address label */
  509.          free(p->next);
  510.          /* Update the pointer */
  511.          p->next = q;
  512.          /* Move on if there's another address label */
  513.          if(q)
  514.             p = q;
  515.          else
  516.             CurLabel--;
  517.       }
  518.       
  519.       /* Decrement number of address labels */
  520.       NLabel--;
  521.       
  522.       /* Refresh buffers */
  523.       for(p=address,j=0; p!=NULL && j<CurLabel; NEXT(p), j++);
  524.       strcpy(Line1SIBuff, p->line[0]);
  525.       strcpy(Line2SIBuff, p->line[1]);
  526.       strcpy(Line3SIBuff, p->line[2]);
  527.       strcpy(Line4SIBuff, p->line[3]);
  528.       strcpy(Line5SIBuff, p->line[4]);
  529.       strcpy(Line6SIBuff, p->line[5]);
  530.       strcpy(Line7SIBuff, p->line[6]);
  531.    
  532.       RefreshGList(Line1,Window,NULL,7);
  533.    }
  534.    
  535.    /* Reactivate line1 gadget */
  536.    GoLine1((APTR)1);
  537.    
  538.    return(0);
  539. }
  540.  
  541. /**************************************************************************/
  542. PrintAt(char PageBuffer[PAGELENGTH][LINELENGTH],
  543.         int xpos,
  544.         int ypos,
  545.         int labelnum)
  546. {
  547.    int j,
  548.        k;
  549.    ADDR *p;
  550.  
  551.    /* Set p to point to the address item in which we're interested */
  552.    for(p=address,j=0; p!=NULL && j<labelnum; NEXT(p), j++);
  553.    
  554.    /* For each line of an address */
  555.    for(j=0;j<NLABLIN; j++)
  556.    {
  557.       /* Break out if we're off the page */
  558.       if(ypos+j >= PAGELENGTH) continue;
  559.       
  560.       /* For each character in the line */
  561.       for(k=0;k<strlen(p->line[j]);k++)
  562.       {
  563.          /* Break out if we're off the page */
  564.          if(xpos+k >= LINELENGTH) break;
  565.          
  566.          /* Copy the characters into the page buffer */
  567.          PageBuffer[ypos+j][xpos+k] = p->line[j][k];
  568.       }
  569.    }
  570.    return(0);
  571. }
  572.  
  573. /**************************************************************************/
  574. DumpBuffer(char PageBuffer[PAGELENGTH][LINELENGTH])
  575. {
  576.    int j;
  577.    struct FileHandle *fh;
  578.    
  579.    if(fh=(struct FileHandle *)Open("PRT:",MODE_OLDFILE))
  580.    {
  581.       /* For each line */
  582.       for(j=0; j<PAGELENGTH; j++)
  583.       {
  584.          /* Ensure line is correctly terminated */
  585.          PageBuffer[j][LINELENGTH-1] = '\0';
  586.          /* Dump to the printer */
  587.          Write(fh,PageBuffer[j],strlen(PageBuffer[j]));
  588.          Write(fh,"\n",1);
  589.       }
  590.       Close(fh);
  591.    }
  592.    
  593.    return(0);
  594. }
  595.  
  596. /**************************************************************************/
  597. BlankBuffer(char PageBuffer[PAGELENGTH][LINELENGTH])
  598. {
  599.    int j,
  600.        k;
  601.  
  602.    for(j=0;j<PAGELENGTH;j++)
  603.    {
  604.       for(k=0;k<LINELENGTH;k++)
  605.          PageBuffer[j][k] = ' ';
  606.       PageBuffer[j][LINELENGTH-1] = '\0';
  607.    }
  608.       
  609.    return(0);
  610. }
  611.  
  612. /**************************************************************************/
  613. GoLine1(APTR object)
  614. {
  615.    ActivateGadget(Line1,Window,NULL);
  616.    return(0);
  617. }
  618.  
  619. /**************************************************************************/
  620. GoLine2(APTR object)
  621. {
  622.    ActivateGadget(Line2,Window,NULL);
  623.    return(0);
  624. }
  625.  
  626. /**************************************************************************/
  627. GoLine3(APTR object)
  628. {
  629.    ActivateGadget(Line3,Window,NULL);
  630.    return(0);
  631. }
  632.  
  633. /**************************************************************************/
  634. GoLine4(APTR object)
  635. {
  636.    ActivateGadget(Line4,Window,NULL);
  637.    return(0);
  638. }
  639.  
  640. /**************************************************************************/
  641. GoLine5(APTR object)
  642. {
  643.    ActivateGadget(Line5,Window,NULL);
  644.    return(0);
  645. }
  646.  
  647. /**************************************************************************/
  648. GoLine6(APTR object)
  649. {
  650.    ActivateGadget(Line6,Window,NULL);
  651.    return(0);
  652. }
  653.  
  654. /**************************************************************************/
  655. GoLine7(APTR object)
  656. {
  657.    ActivateGadget(Line7,Window,NULL);
  658.    return(0);
  659. }
  660.  
  661. /**************************************************************************/
  662. Label38(void)
  663. {
  664.    struct IntuiText *itext;
  665.    
  666.    /* Label the Y-axis */
  667.    itext = MakeText(NULL,"6",1,97,mb+14,0);
  668.    MakeText(itext,"7",1,97,mb+28,0);
  669.    MakeText(itext,"7",1,97,mb+42,0);
  670.    MakeText(itext,"7",1,97,mb+56,0);
  671.    MakeText(itext,"7",1,97,mb+70,0);
  672.    MakeText(itext,"7",1,97,mb+84,0);
  673.    MakeText(itext,"7",1,97,mb+98,0);
  674.    MakeText(itext,"3",1,97,mb+112,0);
  675.  
  676.    /* Label the X-axis */
  677.    MakeText(itext,"26",1,15,mb+125,0);
  678.    MakeText(itext,"26",1,43,mb+125,0);
  679.    MakeText(itext,"20",1,71,mb+125,0);
  680.  
  681.    PrintIText(Window->RPort,itext,0,-8);
  682.  
  683.    FreeIText(itext);
  684.  
  685.    return(0);
  686. }
  687.  
  688. /**************************************************************************/
  689. Label28(void)
  690. {
  691.    struct IntuiText *itext;
  692.    
  693.    /* Label the Y-axis */
  694.    itext = MakeText(NULL,"6",1,72,mb+14,0);
  695.    MakeText(itext,"7",1,72,mb+28,0);
  696.    MakeText(itext,"7",1,72,mb+42,0);
  697.    MakeText(itext,"7",1,72,mb+56,0);
  698.    MakeText(itext,"7",1,72,mb+70,0);
  699.    MakeText(itext,"7",1,72,mb+84,0);
  700.    MakeText(itext,"7",1,72,mb+98,0);
  701.    MakeText(itext,"3",1,72,mb+112,0);
  702.  
  703.    /* Label the X-axis */
  704.    MakeText(itext,"39",1,15,mb+125,0);
  705.    MakeText(itext,"34",1,43,mb+125,0);
  706.  
  707.    PrintIText(Window->RPort,itext,0,-8);
  708.  
  709.    FreeIText(itext);
  710.  
  711.    return(0);
  712. }
  713.  
  714. /**************************************************************************/
  715. Label27(void)
  716. {
  717.    struct IntuiText *itext;
  718.    
  719.    /* Label the Y-axis */
  720.    itext = MakeText(NULL,"7",1,72,mb+14,0);
  721.    MakeText(itext,"7",1,72,mb+28,0);
  722.    MakeText(itext,"7",1,72,mb+42,0);
  723.    MakeText(itext,"7",1,72,mb+56,0);
  724.    MakeText(itext,"7",1,72,mb+70,0);
  725.    MakeText(itext,"7",1,72,mb+84,0);
  726.    MakeText(itext,"4",1,72,mb+98,0);
  727.  
  728.    /* Label the X-axis */
  729.    MakeText(itext,"39",1,15,mb+111,0);
  730.    MakeText(itext,"34",1,43,mb+111,0);
  731.  
  732.    PrintIText(Window->RPort,itext,0,-8);
  733.  
  734.    FreeIText(itext);
  735.  
  736.    return(0);
  737. }
  738.  
  739. /**************************************************************************/
  740. /* Displays an About message
  741. */
  742. About(APTR object)
  743. {
  744.    struct IntuiText *itext1,
  745.                     *itext2,
  746.                     *itext3,
  747.                     *oktext;
  748.    
  749.    oktext  = MakeText(NULL,"OK",1,0,0,0);
  750.  
  751.    itext1 = MakeText(NULL,"PrLabel",           1,72, 0,0);
  752.    MakeText(itext1,"Label Printing Utility",   1,12,10,0);
  753.    MakeText(itext1,"SciTech Software ©1992",   1,12,20,0);
  754.    MakeText(itext1," ",                        1, 0,30,0);
  755.    MakeText(itext1,"This program is shareware",1, 0,40,0);
  756.    MakeText(itext1,"and uses the STSLib",      1, 0,50,0);
  757.    MakeText(itext1,"gadget and menu library",  1, 0,60,0);
  758.    
  759.    itext2 = MakeText(NULL,"PrLabel",           1,72, 0,0);
  760.    MakeText(itext2,"Suggested fee £5.00",      1,24,10,0);
  761.    MakeText(itext2," ",                        1, 0,20,0);
  762.    MakeText(itext2,"STSLib provides 3D-look",  1, 0,30,0);
  763.    MakeText(itext2,"gadgets and menu support", 1, 0,40,0);
  764.    MakeText(itext2,"under V1.3 and V2.0",      1, 0,50,0);
  765.    MakeText(itext2," ",                        1, 0,60,0);
  766.    MakeText(itext2,"STSLib is £20.00 from:",   1, 0,70,0);
  767.    
  768.    itext3 = MakeText(NULL,"SciTech Software",  1, 0, 0,0);
  769.    MakeText(itext3,"23, Stag Leys,",           1, 0,10,0);
  770.    MakeText(itext3,"Ashtead,",                 1, 0,20,0);
  771.    MakeText(itext3,"Surrey",                   1, 0,30,0);
  772.    MakeText(itext3,"KT21 2TD.",                1, 0,40,0);
  773.    MakeText(itext3," ",                        1, 0,50,0);
  774.    MakeText(itext3,"Tel.: +44(0372)275775",    1, 0,60,0);
  775.  
  776.    STSAutoRequest(NULL,itext1,oktext,oktext,NULL,NULL,0,0);
  777.    STSAutoRequest(NULL,itext2,oktext,oktext,NULL,NULL,0,0);
  778.    STSAutoRequest(NULL,itext3,oktext,oktext,NULL,NULL,0,0);
  779.    
  780.    FreeIText(itext1);
  781.    FreeIText(itext2);
  782.    FreeIText(itext3);
  783.    
  784.    return(0);
  785. }
  786. /**************************************************************************/
  787. /* Reads in an address list
  788. */
  789. ReadList(APTR object)
  790. {
  791.    return(0);
  792. }
  793. /**************************************************************************/
  794. /* Writes out an address list
  795. */
  796. SaveList(APTR object)
  797. {
  798.    return(0);
  799. }
  800.