home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / net-tools / alynx / goodies / resize.lha / ReSize / src / resize.c next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  2.7 KB  |  131 lines

  1. /* ReSize ©1995 P.Marquardt, crippled SUXX-WARE */
  2.  
  3. #define __USE_SYSBASE
  4.  
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <clib/dos_protos.h>
  8. #include <clib/alib_stdio_protos.h>
  9. #include <clib/graphics_protos.h>
  10. #include <intuition/intuitionbase.h>
  11. #include <proto/dos.h>
  12. #include <proto/intuition.h>
  13. #include <proto/graphics.h>
  14. #include "version.h"
  15.  
  16. CHARVERSTAG;
  17.  
  18. struct ReSizeArgs {
  19.   LONG Local,Global,Save,Verbose;
  20. };
  21.  
  22. char *Template = "SET/S,SETENV/S,SAVE/S,VERBOSE=V/S";
  23.  
  24. char *Options[] = {
  25.     "set local",
  26.     "set global ENV:",
  27.     "save in ENVARC:",
  28.     "be verbose"
  29. };
  30.  
  31. char *Errlist[] = {
  32.     "n/a"
  33. };
  34.  
  35. char *cols_name = "COLS";
  36. char *colm_name = "COLUMNS";
  37. char *rows_name = "LINES";
  38. char *mode_name = "SCREENMODE";
  39. char *enva_name = "ENVARC:";
  40.  
  41. static void Help(int err)
  42. {
  43.   if (!err) {
  44.     char *p,**o;
  45.     Printf("Purpose: show/set/save $%s/$%s/$%s vars\n",cols_name,rows_name,mode_name);
  46.     Printf("Usage:\nReSize %s\n",Template);
  47.     o=&Options[0];
  48.     for (p=strtok(Template,",");p;p=strtok(NULL,","))
  49.         Printf("%12s %s\n",p,*o++);
  50.   }
  51.   else
  52.     Printf("Error: %s\n",Errlist[err-1]);
  53. }
  54.  
  55. void DoVar(char *Where, char *Var, char *Fmt, LONG SetTo, ULONG flag)
  56. {
  57.     char VarBuf[64];
  58.     char NameBuf[64];
  59.  
  60.     sprintf(NameBuf,"%s%s",Where,Var);
  61.     sprintf(VarBuf,Fmt,SetTo);
  62.     if (flag&GVF_GLOBAL_ONLY)
  63.         SetVar(NameBuf,VarBuf,-1,GVF_GLOBAL_ONLY);
  64.     if (flag&GVF_LOCAL_ONLY)
  65.         SetVar(NameBuf,VarBuf,-1,GVF_LOCAL_ONLY);
  66. }
  67.  
  68. LONG __saveds main(void)
  69. {
  70.   struct Window *win;
  71.   struct Screen *scr;
  72.   ULONG m;
  73.   WORD rows , cols;
  74.   LONG ret;
  75.  
  76.   struct RDArgs *RDArgs;
  77.   struct ReSizeArgs Args = {0};
  78.   LONG NoArg = NULL;
  79.  
  80.   if ((RDArgs=ReadArgs(Template,(LONG *)&Args,NULL))==NULL) {
  81.     PrintFault (IoErr(),NULL);
  82.     ret = 1;
  83.     goto quit;
  84.   }
  85.  
  86.   ret = 0;
  87.  
  88.   NoArg = !(Args.Local || Args.Global || Args.Save);
  89.  
  90.   if (NoArg && !Args.Verbose) {
  91.     FreeArgs (RDArgs);
  92.     Help(0);
  93.     goto quit;
  94.   }
  95.  
  96.   win = IntuitionBase->ActiveWindow;
  97.   scr = IntuitionBase->FirstScreen;
  98.   m   = GetVPModeID(&scr->ViewPort);
  99.  
  100.   rows = (win->Height - win->BorderTop  - win->BorderBottom) / (win->RPort->Font->tf_YSize);
  101.   cols = (win->Width  - win->BorderLeft - win->BorderRight)  / (win->RPort->Font->tf_XSize);
  102.  
  103.   if (Args.Verbose) {
  104.     Printf ("%s=%ld\n%s=%ld\n%s=%ld\n%s=0x%lx\n",rows_name,rows,cols_name,cols,colm_name,cols,mode_name,m);
  105.   }
  106.  
  107.   if (!NoArg) {
  108.     ULONG flag = NULL;
  109.     char loops = 1;
  110.     char *funky = "";
  111.  
  112.     if (Args.Local) flag = GVF_LOCAL_ONLY;
  113.     if (Args.Global || Args.Save) flag |= GVF_GLOBAL_ONLY;
  114.     if (Args.Save) loops = 2;
  115.  
  116.     while (loops) {
  117.       DoVar(funky,rows_name,"%ld",rows,flag);
  118.       DoVar(funky,cols_name,"%ld",cols,flag);
  119.       DoVar(funky,colm_name,"%ld",cols,flag);
  120.       DoVar(funky,mode_name,"0x%lx",m,flag);
  121.       loops--;
  122.       funky=enva_name;
  123.     }
  124.   }
  125.  
  126.   FreeArgs (RDArgs);
  127. quit:
  128.   return ret;
  129. }
  130.  
  131.