509{
510 register const char *
fmt = (
const char *)vfmt;
512 const char *fmtp;
515 int singlecharflag = 0;
520 const char *sargp;
523 char *const *spav = *pav;
524 int spac = *pac;
525 void *curarg = (void *)0;
526
528
529
530
531
532
533 if (argp[0] == '-') {
534 argp++;
536
537
538
539
540
541 if (argp[0] == '-') {
542 argp++;
544
545
546
547 if (argp[1] == '\0') {
549 }
550 }
551 }
552 sargp = argp;
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
569
578 }
579
580
581
582again:
583 if (
fmt[0] !=
'\0' &&
584 (
fmt[1] ==
',' ||
fmt[1] ==
'+' ||
585 fmt[1] ==
'~' ||
fmt[1] ==
'%' ||
fmt[1] ==
'\0'))
586 singlecharflag++;
587
588
589
590 for (;;) {
591 for (; *
fmt;
fmt++, argp++) {
593
594
595
596
597
600 } else {
602 }
603
604
605
606
607 if (isspec) {
608
609
610
611
612
613 if (*argp == '+' && argp == sargp)
614 continue;
615
616
617
618 if (*argp == '=') {
621 argp++;
622 } else if (*argp != '\0' && haseql) {
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650 if ((!hasdash && argp != sargp) || *
fmt !=
'&')
651 goto nextarg;
652 }
653
654
655
656
657
658
659
660
661 if (!haseql && *argp != '\0' &&
662 (
fmt[0] ==
'*' ||
fmt[0] ==
'#' ||
663 fmt[0] ==
'?' ||
fmt[0] ==
'&') &&
665 goto nextarg;
666 }
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683 break;
684 }
else if (*
fmt == *argp) {
685 if (argp[1] == '\0' &&
686 (
fmt[1] ==
'\0' ||
fmt[1] ==
',')) {
687
689 *((
int *)curarg) =
TRUE;
690
691
693 }
694 } else {
695
696
697
698
699 nextarg:
700 while (*
fmt !=
',' && *
fmt !=
'\0') {
701
702 if ((*
fmt ==
'&' || *
fmt ==
'~') &&
705 }
707 }
708 argp = sargp;
709 break;
710 }
711 }
713
714 case '\0':
715
716
717
720 flagp++;
724 argp = sargp;
725 goto again;
726 }
727 }
728 if (singlecharflag && !doubledash &&
733 }
734 if (singlecharflag && !doubledash &&
739 }
741
742 case ',':
746 if (
fmt[1] ==
',' ||
fmt[1] ==
'+' ||
fmt[1] ==
'\0')
747 singlecharflag++;
750 continue;
751
752 case '*':
753 if (*argp ==
'\0' &&
fmt[1] !=
'_') {
754 if (*pac > 1) {
755 (*pac)--;
756 (*pav)++;
757 argp = **pav;
758 } else {
760 }
761 }
764 else if (
fmt[1] ==
' ')
766
768 *((const char **)curarg) = argp;
769
770
772
773 case '?':
774 if (*argp ==
'\0' &&
fmt[1] !=
'_') {
775 if (*pac > 1) {
776 (*pac)--;
777 (*pav)++;
778 argp = **pav;
779 } else {
781 }
782 }
785 else if (
fmt[1] ==
' ')
787
788
789
790
791
792
793 if (argp[0] != '\0' && argp[1] != '\0')
794 goto nextchance;
795
797 *((char *)curarg) = *argp;
798
799
801
802 case '+':
803
804
805
806
807 if (*argp != '\0')
808 goto nextchance;
809
810
811
812
813
815 goto nextchance;
816
818 if (
fmt[1] ==
'l' ||
fmt[1] ==
'L') {
819 if (
fmt[2] ==
'l' ||
fmt[2] ==
'L') {
821 *((
Llong *)curarg) += 1;
823 } else {
825 *((long *)curarg) += 1;
827 }
828 }
else if (
fmt[1] ==
's' ||
fmt[1] ==
'S') {
830 *((short *)curarg) += 1;
832 }
else if (
fmt[1] ==
'c' ||
fmt[1] ==
'C') {
834 *((char *)curarg) += 1;
836 } else {
837 if (
fmt[1] ==
'i' ||
fmt[1] ==
'I')
840 *((int *)curarg) += 1;
841 }
842
843
845
846 case '%':
847
848
849
850
851 if (*argp != '\0')
852 goto nextchance;
853
857 else if (*
fmt ==
'0')
859 else
860 goto nextchance;
861
864 if (
fmt[1] ==
'l' ||
fmt[1] ==
'L') {
865 if (
fmt[2] ==
'l' ||
fmt[2] ==
'L') {
869 } else {
871 *((
long *)curarg) =
val;
873 }
874 }
else if (
fmt[1] ==
's' ||
fmt[1] ==
'S') {
876 *((
short *)curarg) =
val;
878 }
else if (
fmt[1] ==
'c' ||
fmt[1] ==
'C') {
880 *((
char *)curarg) =
val;
882 } else {
883 if (
fmt[1] ==
'i' ||
fmt[1] ==
'I')
886 *((
int *)curarg) =
val;
887 }
888
889
891
892 case '#':
893 if (*argp ==
'\0' &&
fmt[1] !=
'_') {
894 if (*pac > 1) {
895 (*pac)--;
896 (*pav)++;
897 argp = **pav;
898 } else {
900 }
901 }
904 else if (
fmt[1] ==
' ')
906
908
909
910
911
912
913
914 nextchance:
915 while (*
fmt !=
',' && *
fmt !=
'\0') {
916 if ((*
fmt ==
'&' || *
fmt ==
'~') &&
919 }
921 }
922 argp = sargp;
923 *pac = spac;
924 *pav = spav;
925 continue;
926 }
929 if (
fmt[1] ==
'l' ||
fmt[1] ==
'L') {
930 if (
fmt[2] ==
'l' ||
fmt[2] ==
'L') {
934 } else {
936 *((
long *)curarg) =
val;
938 }
939 }
else if (
fmt[1] ==
's' ||
fmt[1] ==
'S') {
943 }
else if (
fmt[1] ==
'c' ||
fmt[1] ==
'C') {
947 } else {
948 if (
fmt[1] ==
'i' ||
fmt[1] ==
'I')
951 *((
int *)curarg) = (
int)
val;
952 }
953
955
956 case '~':
957 if (*argp != '\0')
958 goto nextchance;
959 if (haseql) {
961 }
962 goto callfunc;
963
964 case '&':
965 if (*argp ==
'\0' &&
fmt[1] !=
'_') {
966 if (*pac > 1) {
967 (*pac)--;
968 (*pav)++;
969 argp = **pav;
970 } else {
972 }
973 }
974 callfunc:
975
976 if (*
fmt ==
'&' &&
fmt[1] ==
'_')
978 else if (
fmt[1] ==
' ')
982
983 fmtp = sargp;
984 if (hasdash)
985 fmtp--;
986 if (doubledash)
987 fmtp--;
990
993
995 pac, pav, fmtp));
999 } else
1003
1006 ret = ((*(getpargfun)curarg) (argp, funarg,
1007 pac, pav, fmtp));
1011 } else {
1013 }
1014
1015
1016
1017 }
1018 }
1019}
char * astoll(const char *s, Llong *l)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
LOCAL int checkfmt(char *fmt) const
LOCAL int dosflags(const char *argp, void *vfmt, int *pac, char *const **pav, int flags, va_list oargs)